Release 960314

Wed Mar 13 19:46:50 1996  Alexandre Julliard  <julliard@lrc.epfl.ch>

	* [controls/edit.c]
	Removed calls to memmove (not portable).

	* [debugger/dbg.y] [debugger/debug.l]
	Prefixed all token with 't' to avoid conflicts with type
	definitions.
	Added 'walk queue', 'walk class' and 'info class' commands.

	* [debugger/info.c]
	Moved queue and window information functions to windows/queue.c
	and windows/win.c respectively.

	* [loader/signal.c]
	Added SIGHUP handling to force entry into built-in debugger.
	Cleaned up a bit.

	* [misc/spy.c]
	General cleanup and performance improvements.

	* [windows/class.c]
	Added CLASS_DumpClass() and CLASS_WalkClasses() functions for
	debugger.

	* [windows/event.c]
	Pressing Ctrl-Alt-Return forces an entry into the debugger. Not
	sure if this key combination is a good choice...

	* [windows/message.c] [windows/queue.c] (New file)
	Moved message queue handling functions to windows/queue.c.

Tue Mar 12 14:55:16 1996  Onno Hovers  <onno@stack.urc.tue.nl>

	* [if1632/except.S] [include/except.h] [win32/except.c] (New files)
	Implemented Win32 exception functions: RaiseException(),
 	RtlUnwind(), SetUnhandledExceptionFilter() and
	UnhandledExceptionFilter().

Mon Mar 11 19:23:29 1996  Albrecht Kleine  <kleine@ak.sax.de>

	* [controls/listbox.c] [include/listbox.h]
	Special handling for COMBOLBOX styles introduced via extension of
 	HEADLIST structure: lphl->dwStyle.

Mon Mar 11 13:31:06 1996  Greg Kreider <kreider@natlab.research.philips.com>

	* [controls/combo.c]
	Any mouse movement within a small distance (defined by CBLMM_EDGE)
	of the top or bottom edge causes the window to scroll.  Also moved 
	some assignments so the routine works correctly.

	* [controls/listbox.c]
	Changing selection in ListBoxSetCurSel now updates PrevFocused.
	Added to LBSetFont and CreateListBoxStruct a fake hdc that tests 
	and sets the standard text height.

Sun Mar 10 08:39:23 1996  Alex Korobka <alex@phm30.pharm.sunysb.edu>

	* [windows/dce.c]
	Fixed memory leak in DCE_ClipWindows().
diff --git a/windows/class.c b/windows/class.c
index f148b38..527127e 100644
--- a/windows/class.c
+++ b/windows/class.c
@@ -23,6 +23,72 @@
 
 
 /***********************************************************************
+ *           CLASS_DumpClass
+ *
+ * Dump the content of a class structure to stderr.
+ */
+void CLASS_DumpClass( HCLASS hClass )
+{
+    CLASS *ptr;
+    char className[80];
+    int i;
+
+    if (!(ptr = CLASS_FindClassPtr( hClass )))
+    {
+        fprintf( stderr, "%04x is not a class handle\n", hClass );
+        return;
+    }
+    GlobalGetAtomName( ptr->atomName, className, sizeof(className) );
+
+    fprintf( stderr, "Class %04x:\n", hClass );
+    fprintf( stderr,
+             "next=%04x  name=%04x '%s'  style=%04x  wndProc=%08lx\n"
+             "inst=%04x  hdce=%04x  icon=%04x  cursor=%04x  bkgnd=%04x\n"
+             "clsExtra=%d  winExtra=%d  #windows=%d\n",
+             ptr->hNext, ptr->atomName, className, ptr->wc.style,
+             (DWORD)ptr->wc.lpfnWndProc, ptr->wc.hInstance, ptr->hdce,
+             ptr->wc.hIcon, ptr->wc.hCursor, ptr->wc.hbrBackground,
+             ptr->wc.cbClsExtra, ptr->wc.cbWndExtra, ptr->cWindows );
+    if (ptr->wc.cbClsExtra)
+    {
+        fprintf( stderr, "extra bytes:" );
+        for (i = 0; i < ptr->wc.cbClsExtra; i++)
+            fprintf( stderr, " %02x", *((BYTE *)ptr->wExtra+i) );
+        fprintf( stderr, "\n" );
+    }
+    fprintf( stderr, "\n" );
+}
+
+
+/***********************************************************************
+ *           CLASS_WalkClasses
+ *
+ * Walk the class list and print each class on stderr.
+ */
+void CLASS_WalkClasses(void)
+{
+    HCLASS hClass = firstClass;
+    CLASS *ptr;
+    char className[80];
+
+    fprintf( stderr, "Class  Name                Style WndProc\n" );
+    while (hClass)
+    {
+        if (!(ptr = CLASS_FindClassPtr( hClass )))
+        {
+            fprintf( stderr, "*** Bad class %04x in list\n", hClass );
+            return;
+        }
+        GlobalGetAtomName( ptr->atomName, className, sizeof(className) );
+        fprintf( stderr, "%04x  %-20.20s %04x %08lx\n",
+                 hClass, className, ptr->wc.style, (DWORD)ptr->wc.lpfnWndProc);
+        hClass = ptr->hNext;
+    }
+    fprintf( stderr, "\n" );
+}
+
+
+/***********************************************************************
  *           CLASS_FindClassByName
  *
  * Return a handle and a pointer to the class.