Release 951124

Tue Nov 21 18:49:10 1995  Alexandre Julliard  <julliard@sunsite.unc.edu>

	* [configure.in] [Makefile] [misc/dos_fs.c]
	Got rid of autoconf.h file.

	* [debugger/dbg.y]
	More logical behavior upon syntax errors.

	* [include/hook.h] [windows/hook.c]
	Changed hook structure and rewrote most of the hook functions for
	better compatibility, based on investigations by Alex Korobka.

	* [include/message.h] [windows/message.c]
	Added hooks to message queue structure and made the structure
	layout Windows-compatible.
	Added support for WH_MOUSE, WH_KEYBOARD, WH_HARDWARE and
	WH_JOURNALRECORD hooks.

	* [misc/main.c]
	Added command-line option for changing the language at run-time
 	(not implemented yet), based on a suggestion from Michael Patra.

	* [objects/cursoricon.c]
	Fixed silly SEGPTR bug in DumpIcon().

Mon Nov 20 22:22:22 1995  Alex Korobka <alex@phm30.pharm.sunysb.edu>

	* [controls/listbox.c] [controls/combo.c] [include/listbox.h]
	Partial implementaion of LBS_EXTENDEDSEL style,
	yet more updates for drag & drop support. Now works.

	* [windows/defwnd.c]
	More message handlers.

	* [windows/win.c]
	DragObject, DragDetect, AnyPopup functions. 

	* [controls/listbox.c]
	More kludgy fixes (WM_...TOITEM, etc.).

	* [objects/cursoricon.c] [objects/oembitmap.c]
	IconToCursor skeleton, patch for OBM_LoadCursorIcon to handle new
	cursor.

	* [include/bitmaps/ocr*]
	New OEM cursors.

Mon Nov 20 11:05:20 EST 1995  Jim Peterson <jspeter@birch.ee.vt.edu>

	* [toolkit/heap.c]
	Swapped flags and size arguments to LocalRealloc as per changes in
	memory/local.c by William Magro in previous release.

	* [include/wintypes.h]
	Reinstated the #define's for 'min' and 'max', since they're part of
	the Windows API.  I really don't think it's a wise idea, so I put
	a '#ifndef DONT_DEFINE_min_AND_max' around them.  I think the actual
	WINE code should never use these (it should use 'MIN' and 'MAX'
	instead).

	* [loader/*]
	Put '#ifndef WINELIB' around many things that WINElib should not need.

	* [controls/edit.c]
	Took out many '#if defined(WINELIB)' sections with the associated
	comment 'temporary fix, until Local memory is correctly implemented in
	WINELIB', since the effective translations are now in 
	toolkit/miscstubs.c.
	Took out the #ifndef's I put in EDIT_ClearText.  Whoever modified this
	file fixed (or at least postponed) the bug I had encountered.

	* [loader/task.c]
	Put an #ifdef in TASK_CreateTask() that hardwires the current drive to
	C:  This will probably cause a lot of trouble if this change is
	forgotten in the future, but it will let things like the OpenFileName
	dialog work for now.

	* [toolkit/libres.c] [toolkit/Makefile.in] [toolkit/Makefile]
	  [include/libres.h]
	Made new libres.c file, which will contain functions for supporting
	accessing resources by name in WINElib.  'winerc' will need to be
	changed.

	* [toolkit/heap.c]
	Refined memory routines to allow for differences between LocalAlloc
	and GlobalAlloc and between LocalSize and GlobalSize.

	* [windows/message.c] [include/windows.h]
	Defined the GetCurrentTime routine in windows/message.c, and removed
	the #define in windows.h.

Mon Nov 20 00:36:42 MET 1995 Sven Verdoolaege <skimo@dns.ufsia.ac.be>

	* [*/*]
	Added new debugging type DEBUG_WIN32 and DEBUG_ENV.

	* [loader/module.c]
	Added undocumented GetExpWinVer.

	* [tools/build.c]
	Previous code didn't pop possibly changed %esi, %edi and %edx
	from the stack.
	
	* [win32/advapi.c]
	Added GetUserNameA.

	* [win32/code_page.c]
	Added stub for MultiByteToWideChar.

	* [win32/console.c]
	Added SetConsoleCtrlHandler stub.

	* [win32/file.c]
	Added ReadFile CreateFileA GetFileInformationByHandle stubs.
	Added CloseHandle.

	* [win32/memory.c]
	Changed VirtualAlloc and VirtualFree.

	* [win32/process.c]
	Added ExitProcess.

Sun Nov 19 17:54:42 1995   Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>

	* [include/windows.h]
	Fixed a few broken structure definitions.

	* [loader/resource.c]
	FindResource(): Need to check for '#xxx' strings here.

	* [miscemu/int21.c]
	FindNext(): Return MS-DOS filenames uppercase.

	* [objects/cursoricon.c]
	CreateIcon(), CreateCursor(): Added missing element to CURSORICONINFO
	initializers.
	
	* [misc/file.c]
	_lopen(): Files opened in OF_WRITE mode are truncated.
	OpenFile(): Ignore OF_READ/OF_WRITE/OF_READWRITE when files are
	created; use read/write mode.
	
	* [misc/profile.c]
	load(): Rewritten.
	
	* [misc/commdlg.c]
	Fixed bad call to strncpy() that smashed the stack.

	* [controls/combo.c] [windows/winpos.c] [memory/selector.c]
	Operator precedence fixes. People who use gcc 2.7.1 don't need a
	debugger :-)
	
	* [if1632/gdi.spec] [objects/palette.c]
	Add ResizePalette() and AnimatePalette() stubs. They don't do anything,
	but sometimes that's good enough.

Fri Nov 17 09:10:35 GMT 1995  John Harvey <john@division.co.uk>

	* [include/wine.h] [include/registers.h] [include/winsock.h]
        Added definitions for Unixware.

	* [loader/signal.c] [misc/comm.c] [misc/winsocket.c]
	Misc. fixes for Unixware.

	* [loader/task.c]
        Made assignemts to context in InitTask for registers use the macros
        from registers.h to make them more portable. (Needed for Unixware)

	* [tools/build.c]
	Fixed register acces routines to work on Unixware. Bit grubby but
 	it seems to work.

	* [controls/edit.c]
	EDIT_WM_NCCreate allocates local heap if hasn't been previously
	allocated.
	
	* [miscemu/int21.c]
	mkdir now creates directory with permission to access it.

	* [misc/dos_fs.c]
	mkdir now creates directory with permission to access it.
	DOS_opendir now uses linked list of dirents to avoid problems with 
	realloc changing address of malloced memory.

Thu Nov 16 12:47:13 1995  Michael Patra  <patra@itp1.Physik.TU-Berlin.DE>

	* [controls/menu.c]
	MENU_CalcItemSize(): Fixed handling of empty menu items.

Sat Nov 11 21:46:54 1995  Hans de Graaff  <graaff@twi72.twi.tudelft.nl>

	* [misc/file.c]
	In OpenFile, unlink should be done on the unix filename.

Sat Nov 11 16:43:29 1995  Cameron Heide  (heide@ee.ualberta.ca)

        * [include/handle32.h]
        New header file containing internal Win32 kernel handle
        information.

        * [win32/file.c]
        Added ReadFile, CreateFile, and CloseFileHandle, and did
        some reorganizing to match the new handle allocation scheme.

        * [win32/init.c]
        Added CloseHandle and the creation of standard I/O handles.

        * [win32/object_mgt.c]
        New module for allocating and freeing Win32 kernel handles.
diff --git a/objects/bitmap.c b/objects/bitmap.c
index dde4d94..72e18ad 100644
--- a/objects/bitmap.c
+++ b/objects/bitmap.c
@@ -150,15 +150,20 @@
     LONG height;
     XImage * image;
     
+    /* KLUDGE! */
+    if (count < 0) {
+	fprintf(stderr, "Negative number of bytes (%ld) passed to GetBitmapBits???\n", count );
+	count = -count;
+    }
     bmp = (BITMAPOBJ *) GDI_GetObjPtr( hbitmap, BITMAP_MAGIC );
     if (!bmp) return 0;
 
-    dprintf_bitmap(stddeb, "GetBitmapBits: %dx%d %d colors %p\n",
-	    bmp->bitmap.bmWidth, bmp->bitmap.bmHeight,
-	    1 << bmp->bitmap.bmBitsPixel, buffer );
       /* Only get entire lines */
     height = count / bmp->bitmap.bmWidthBytes;
     if (height > bmp->bitmap.bmHeight) height = bmp->bitmap.bmHeight;
+    dprintf_bitmap(stddeb, "GetBitmapBits: %dx%d %d colors %p fetched height: %ld\n",
+	    bmp->bitmap.bmWidth, bmp->bitmap.bmHeight,
+	    1 << bmp->bitmap.bmBitsPixel, buffer, height );
     if (!height) return 0;
     
     if (!(image = BITMAP_BmpToImage( &bmp->bitmap, buffer ))) return 0;
@@ -180,6 +185,11 @@
     LONG height;
     XImage * image;
     
+    /* KLUDGE! */
+    if (count < 0) {
+	fprintf(stderr, "Negative number of bytes (%ld) passed to SetBitmapBits???\n", count );
+	count = -count;
+    }
     bmp = (BITMAPOBJ *) GDI_GetObjPtr( hbitmap, BITMAP_MAGIC );
     if (!bmp) return 0;
 
diff --git a/objects/color.c b/objects/color.c
index 41e222c..03cefa9 100644
--- a/objects/color.c
+++ b/objects/color.c
@@ -15,15 +15,15 @@
 #include "xmalloc.h"
 
 Colormap COLOR_WinColormap = 0;
-int COLOR_FixedMap = 0;
+static int COLOR_FixedMap = 0;
 
-int COLOR_Redshift = 0;
-int COLOR_Redmax = 0;
-int COLOR_Greenshift = 0;
-int COLOR_Greenmax = 0;
-int COLOR_Blueshift = 0;
-int COLOR_Bluemax = 0;
-int COLOR_Graymax = 0;
+static int COLOR_Redshift = 0;
+static int COLOR_Redmax = 0;
+static int COLOR_Greenshift = 0;
+static int COLOR_Greenmax = 0;
+static int COLOR_Blueshift = 0;
+static int COLOR_Bluemax = 0;
+static int COLOR_Graymax = 0;
 
   /* System palette static colors */
 
diff --git a/objects/cursoricon.c b/objects/cursoricon.c
index fcb553e..4dc22b2 100644
--- a/objects/cursoricon.c
+++ b/objects/cursoricon.c
@@ -33,6 +33,7 @@
 #include "stddebug.h"
 #include "debug.h"
 #include "xmalloc.h"
+#include "task.h"
 
 
 Cursor CURSORICON_XCursor = None;  /* Current X cursor */
@@ -411,6 +412,40 @@
     return hNew;
 }
 
+/***********************************************************************
+ *           CURSORICON_IconToCursor
+ *
+ * Should convert bitmap to mono and truncate if too large
+ * FIXME: if icon is passed returns a copy of OCR_DRAGOBJECT cursor
+ *	  but should actually convert icon to cursor.
+ */
+HCURSOR CURSORICON_IconToCursor(HICON hIcon)
+{
+ CURSORICONINFO *ptr = NULL;
+
+ if(hIcon)
+    if (!(ptr = (CURSORICONINFO*)GlobalLock( hIcon ))) return FALSE;
+       if (ptr->bPlanes * ptr->bBitsPerPixel == 1)
+          {
+            return hIcon; /* assuming it's a cursor */
+          }
+       else 
+	  {
+	   /* kludge */
+
+	   HTASK hTask = GetCurrentTask();
+	   TDB*  pTask = (TDB *)GlobalLock(hTask);
+
+	   if(!pTask) return 0;
+
+           fprintf( stdnimp, "IconToCursor: Icons are not supported, returning default!\n");
+	   return CURSORICON_Copy( pTask->hInstance ,
+				   CURSORICON_Load(0,MAKEINTRESOURCE(OCR_DRAGOBJECT),
+				                   SYSMETRICS_CXCURSOR, SYSMETRICS_CYCURSOR, 1, TRUE) );
+	  }
+
+ return 0;
+}
 
 /***********************************************************************
  *           LoadCursor    (USER.173)
@@ -453,7 +488,7 @@
 HICON CreateCursor( HANDLE hInstance, INT xHotSpot, INT yHotSpot,
                     INT nWidth, INT nHeight, LPSTR lpANDbits, LPSTR lpXORbits)
 {
-    CURSORICONINFO info = { { xHotSpot, yHotSpot }, nWidth, nHeight, 1, 1 };
+    CURSORICONINFO info = { { xHotSpot, yHotSpot }, nWidth, nHeight, 0, 1, 1 };
 
     dprintf_cursor( stddeb, "CreateCursor: %dx%d spot=%d,%d xor=%p and=%p\n",
                     nWidth, nHeight, xHotSpot, yHotSpot, lpXORbits, lpANDbits);
@@ -467,7 +502,7 @@
 HICON CreateIcon( HANDLE hInstance, INT nWidth, INT nHeight, BYTE bPlanes,
                   BYTE bBitsPixel, LPSTR lpANDbits, LPSTR lpXORbits)
 {
-    CURSORICONINFO info = { { 0, 0 }, nWidth, nHeight, bPlanes, bBitsPixel };
+    CURSORICONINFO info = { { 0, 0 }, nWidth, nHeight, 0, bPlanes, bBitsPixel };
 
     dprintf_icon( stddeb, "CreateIcon: %dx%dx%d, xor=%p, and=%p\n",
                   nWidth, nHeight, bPlanes * bBitsPixel, lpXORbits, lpANDbits);
@@ -584,16 +619,17 @@
 /***********************************************************************
  *           DumpIcon    (USER.459)
  */
-DWORD DumpIcon( CURSORICONINFO *info, WORD *lpLen,
-                LPSTR *lpXorBits, LPSTR *lpAndBits )
+DWORD DumpIcon( SEGPTR pInfo, WORD *lpLen,
+                SEGPTR *lpXorBits, SEGPTR *lpAndBits )
 {
+    CURSORICONINFO *info = PTR_SEG_TO_LIN( pInfo );
     int sizeAnd, sizeXor;
 
     if (!info) return 0;
     sizeXor = info->nHeight * info->nWidthBytes;
     sizeAnd = info->nHeight * ((info->nWidth + 15) / 16 * 2);
-    if (lpAndBits) *lpAndBits = (LPSTR)(info + 1);
-    if (lpXorBits) *lpXorBits = (LPSTR)(info + 1) + sizeAnd;
+    if (lpAndBits) *lpAndBits = pInfo + sizeof(CURSORICONINFO);
+    if (lpXorBits) *lpXorBits = pInfo + sizeof(CURSORICONINFO) + sizeAnd;
     if (lpLen) *lpLen = sizeof(CURSORICONINFO) + sizeAnd + sizeXor;
     return MAKELONG( sizeXor, sizeXor );
 }
diff --git a/objects/metafile.c b/objects/metafile.c
index e1d176e..6cc68b6 100644
--- a/objects/metafile.c
+++ b/objects/metafile.c
@@ -7,6 +7,7 @@
 */
 
 #include <string.h>
+#include <fcntl.h>
 #include "gdi.h"
 #include "bitmap.h"
 #include "metafile.h"
@@ -407,7 +408,7 @@
 	break;
 
     case META_RECTANGLE:
-	Ellipse(hdc, *(mr->rdParam + 3), *(mr->rdParam + 2),
+	Rectangle(hdc, *(mr->rdParam + 3), *(mr->rdParam + 2),
 		*(mr->rdParam + 1), *(mr->rdParam));
 	break;
 
@@ -575,7 +576,7 @@
     HANDLE hMem = mf->hMetaHdr;
     METAHEADER *mh = (METAHEADER *)GlobalLock(hMem);
 
-    dprintf_metafile(stddeb,"GetMetaFileBits: hmf in: %x\n", hmf);
+    dprintf_metafile(stddeb,"GetMetaFileBits: hmf in: "NPFMT"\n", hmf);
 
     /* can't get bits of disk based metafile */
     /* FIXME: should the disk file be loaded in this case? */
@@ -591,7 +592,7 @@
     GlobalUnlock(hMem);
     GlobalFree(hmf);
 
-    dprintf_metafile(stddeb,"GetMetaFileBits: hMem out: %x\n", hMem);
+    dprintf_metafile(stddeb,"GetMetaFileBits: hMem out: "NPFMT"\n", hMem);
 
     return hMem;
 }
@@ -607,7 +608,7 @@
     METAFILE *mf;
     METAHEADER *mh = (METAHEADER *)GlobalLock(hMem);
 
-    dprintf_metafile(stddeb,"SetMetaFileBits: hMem in: %x\n", hMem);
+    dprintf_metafile(stddeb,"SetMetaFileBits: hMem in: "NPFMT"\n", hMem);
 
     if (!mh) return FALSE;
 
@@ -626,12 +627,12 @@
     mf->hMetaHdr = hMem;
     mf->wMagic = METAFILE_MAGIC;
     mf->MetaOffset = mh->mtHeaderSize * 2;
-    mf->hFile = mf->hBuffer = (HANDLE) NULL;
+    mf->hFile = (int) (mf->hBuffer = (HANDLE) NULL);
 
     GlobalUnlock(hMem);
     GlobalUnlock(hmf);
 
-    dprintf_metafile(stddeb,"SetMetaFileBits: hmf out: %x\n", hmf);
+    dprintf_metafile(stddeb,"SetMetaFileBits: hmf out: "NPFMT"\n", hmf);
 
     return hmf;
 }
diff --git a/objects/oembitmap.c b/objects/oembitmap.c
index c850994..facd5b4 100644
--- a/objects/oembitmap.c
+++ b/objects/oembitmap.c
@@ -167,19 +167,31 @@
 #include "bitmaps/ocr_sizenesw"
 #include "bitmaps/ocr_sizewe"
 #include "bitmaps/ocr_sizens"
+#include "bitmaps/ocr_bummer"
+#include "bitmaps/ocr_dragobject"
 #if 0
 #include "bitmaps/ocr_sizeall"
 #include "bitmaps/ocr_icocur"
 #endif
 
 /* Cursor are not all contiguous (go figure...) */
+#define OCR_FIRST0 OCR_BUMMER
+#define OCR_LAST0  OCR_DRAGOBJECT
+#define OCR_BASE0	0
+
 #define OCR_FIRST1 OCR_NORMAL
 #define OCR_LAST1  OCR_UP
+#define OCR_BASE1	(OCR_BASE0 + OCR_LAST0 - OCR_FIRST0 + 1)
+
 #define OCR_FIRST2 OCR_SIZE
-#define OCR_LAST2  OCR_SIZENS  /* OCR_ICOCUR */
-#define NB_CURSORS (OCR_LAST2 - OCR_FIRST2 + 1 + OCR_LAST1 - OCR_FIRST1 + 1)
+#define OCR_LAST2  OCR_SIZENS 
+#define OCR_BASE2	(OCR_BASE1 + OCR_LAST1 - OCR_FIRST1 + 1)
+
+#define NB_CURSORS (OCR_BASE2 + OCR_LAST2 - OCR_FIRST2 + 1)
 static char **OBM_Cursors_Data[NB_CURSORS] = 
 {
+    ocr_bummer,	   /* OCR_BUMMER */
+    ocr_dragobject,/* OCR_DRAGOBJECT */ 
     ocr_normal,    /* OCR_NORMAL */
     ocr_ibeam,     /* OCR_IBEAM */
     ocr_wait,      /* OCR_WAIT */
@@ -389,9 +401,11 @@
     if (fCursor)
     {
         if ((id >= OCR_FIRST1) && (id <= OCR_LAST1))
-            id -= OCR_FIRST1;
+             id = OCR_BASE1 + id - OCR_FIRST1;
         else if ((id >= OCR_FIRST2) && (id <= OCR_LAST2))
-            id += (OCR_LAST1 - OCR_FIRST1 + 1) - OCR_FIRST2;
+                  id = OCR_BASE2 + id - OCR_FIRST2;
+	     else if ((id >= OCR_FIRST0) && (id <= OCR_LAST0))
+		       id = OCR_BASE0 + id - OCR_FIRST0;
         else return 0;
         if (OBM_Cursors[id]) return OBM_Cursors[id];
     }
diff --git a/objects/palette.c b/objects/palette.c
index ccd0b42..f49f066 100644
--- a/objects/palette.c
+++ b/objects/palette.c
@@ -135,8 +135,17 @@
  */
 BOOL ResizePalette(HPALETTE hPal, UINT cEntries)
 {
- fprintf(stdnimp,"ResizePalette: empty stub! \n");
- return FALSE;
+    fprintf(stdnimp,"ResizePalette: empty stub! \n");
+    return FALSE;
+}
+
+/***********************************************************************
+ *           AnimatePalette          (GDI.367)
+ */
+void AnimatePalette(HPALETTE hPal, UINT StartIndex, UINT NumEntries,
+		    LPPALETTEENTRY PaletteColors)
+{
+    fprintf(stdnimp,"AnimatePalette: empty stub! \n");
 }
 
 /***********************************************************************