Optimized debugging API to reduce code size.

diff --git a/dlls/advapi32/registry.c b/dlls/advapi32/registry.c
index 3e49411..34feb67 100644
--- a/dlls/advapi32/registry.c
+++ b/dlls/advapi32/registry.c
@@ -13,6 +13,7 @@
  */
 
 #include <stdlib.h>
+#include <stdio.h>
 #include <unistd.h>
 
 #include "winbase.h"
@@ -25,7 +26,7 @@
 #include "server.h"
 #include "debugtools.h"
 
-DEFAULT_DEBUG_CHANNEL(reg)
+DEFAULT_DEBUG_CHANNEL(reg);
 
 
 /* Ansi->Unicode conversion without string delimiters */
diff --git a/dlls/comctl32/datetime.c b/dlls/comctl32/datetime.c
index 583598f..5bcc6a4 100644
--- a/dlls/comctl32/datetime.c
+++ b/dlls/comctl32/datetime.c
@@ -11,16 +11,17 @@
  *
  */
 
+#include <math.h>
+#include <string.h>
+#include <stdio.h>
+
 #include "winbase.h"
 #include "commctrl.h"
 #include "datetime.h"
 #include "monthcal.h"
 #include "debugtools.h"
 
-#include <math.h>
-#include <string.h>
-
-DEFAULT_DEBUG_CHANNEL(datetime)
+DEFAULT_DEBUG_CHANNEL(datetime);
 
 
 #define DATETIME_GetInfoPtr(hwnd) ((DATETIME_INFO *)GetWindowLongA (hwnd, 0))
diff --git a/dlls/comctl32/ipaddress.c b/dlls/comctl32/ipaddress.c
index e79c078..850cd32 100644
--- a/dlls/comctl32/ipaddress.c
+++ b/dlls/comctl32/ipaddress.c
@@ -23,6 +23,7 @@
 
 #include <ctype.h>
 #include <stdlib.h>
+#include <stdio.h>
 
 #include "winbase.h"
 #include "commctrl.h"
@@ -30,7 +31,7 @@
 #include "heap.h"
 #include "debugtools.h"
 
-DEFAULT_DEBUG_CHANNEL(ipaddress)
+DEFAULT_DEBUG_CHANNEL(ipaddress);
 
 #define IPADDRESS_GetInfoPtr(hwnd) ((IPADDRESS_INFO *)GetWindowLongA (hwnd, 0))
 
diff --git a/dlls/comctl32/trackbar.c b/dlls/comctl32/trackbar.c
index 7ed7670..6a172a3 100644
--- a/dlls/comctl32/trackbar.c
+++ b/dlls/comctl32/trackbar.c
@@ -23,13 +23,14 @@
 */
 
 
+#include <stdio.h>
 
 #include "winbase.h"
 #include "commctrl.h"
 #include "trackbar.h"
 #include "debugtools.h"
 
-DEFAULT_DEBUG_CHANNEL(trackbar)
+DEFAULT_DEBUG_CHANNEL(trackbar);
 
 
 #define TRACKBAR_GetInfoPtr(wndPtr) ((TRACKBAR_INFO *)GetWindowLongA (hwnd,0))
diff --git a/dlls/commdlg/filedlg95.c b/dlls/commdlg/filedlg95.c
index ff8745b..9d77447 100644
--- a/dlls/commdlg/filedlg95.c
+++ b/dlls/commdlg/filedlg95.c
@@ -4,6 +4,7 @@
  */
 #include <ctype.h>
 #include <stdlib.h>
+#include <stdio.h>
 #include <string.h>
 #include "winbase.h"
 #include "ldt.h"
@@ -20,7 +21,7 @@
 #include "filedlgbrowser.h"
 #include "wine/obj_contextmenu.h"
 
-DEFAULT_DEBUG_CHANNEL(commdlg)
+DEFAULT_DEBUG_CHANNEL(commdlg);
 
 /***********************************************************************
  * Data structure and global variables
diff --git a/dlls/dplayx/dplayx_global.c b/dlls/dplayx/dplayx_global.c
index accdee0..6d40302 100644
--- a/dlls/dplayx/dplayx_global.c
+++ b/dlls/dplayx/dplayx_global.c
@@ -10,6 +10,7 @@
  *       dplayx.dll data which is accessible from all processes.
  */ 
 
+#include <stdio.h>
 #include "debugtools.h"
 #include "winbase.h"
 #include "winerror.h"
@@ -17,7 +18,7 @@
 
 #include "dplayx_global.h"
 
-DEFAULT_DEBUG_CHANNEL(dplay)
+DEFAULT_DEBUG_CHANNEL(dplay);
 
 /* FIXME: Need to do all that fun other dll referencing type of stuff */
 /* FIXME: Need to allocate a giant static area */
diff --git a/dlls/dsound/dsound_main.c b/dlls/dsound/dsound_main.c
index 3785703..81b0b5d 100644
--- a/dlls/dsound/dsound_main.c
+++ b/dlls/dsound/dsound_main.c
@@ -54,6 +54,7 @@
 #include "config.h"
 #include <assert.h>
 #include <errno.h>
+#include <stdio.h>
 #include <sys/types.h>
 #include <sys/time.h>
 #include <sys/fcntl.h>
@@ -70,7 +71,7 @@
 #include "thread.h"
 #include "debugtools.h"
 
-DEFAULT_DEBUG_CHANNEL(dsound)
+DEFAULT_DEBUG_CHANNEL(dsound);
 
 
 /*****************************************************************************
@@ -1197,7 +1198,7 @@
 ) {
 	ICOM_THIS(IDirectSoundBufferImpl,iface);
 	FIXME("(%p,%p,%p):stub\n",This,dsound,dbsd);
-	printf("Re-Init!!!\n");
+	DPRINTF("Re-Init!!!\n");
 	return DSERR_ALREADYINITIALIZED;
 }
 
diff --git a/dlls/lzexpand/lzexpand_main.c b/dlls/lzexpand/lzexpand_main.c
index 72f1363..143a459 100644
--- a/dlls/lzexpand/lzexpand_main.c
+++ b/dlls/lzexpand/lzexpand_main.c
@@ -9,6 +9,8 @@
 
 #include <string.h>
 #include <ctype.h>
+#include <sys/types.h>
+#include <unistd.h>
 #include "windef.h"
 #include "winbase.h"
 #include "wine/winbase16.h"
@@ -18,7 +20,7 @@
 #include "lzexpand.h"
 #include "debugtools.h"
 
-DEFAULT_DEBUG_CHANNEL(file)
+DEFAULT_DEBUG_CHANNEL(file);
 
 
 /* The readahead length of the decompressor. Reading single bytes
diff --git a/dlls/ntdll/misc.c b/dlls/ntdll/misc.c
index 80403fe..514167c 100644
--- a/dlls/ntdll/misc.c
+++ b/dlls/ntdll/misc.c
@@ -40,13 +40,13 @@
 	}
 }
 
-LPSTR debugstr_as (PANSI_STRING us)
+LPCSTR debugstr_as (PANSI_STRING us)
 {
 	if (!us) return NULL;
 	return debugstr_an(us->Buffer, us->Length);
 }
 
-LPSTR debugstr_us (PUNICODE_STRING us)
+LPCSTR debugstr_us (PUNICODE_STRING us)
 {
 	if (!us) return NULL;
 	return debugstr_wn(us->Buffer, us->Length);
diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h
index 134aadf..c2e87c8 100644
--- a/dlls/ntdll/ntdll_misc.h
+++ b/dlls/ntdll/ntdll_misc.h
@@ -5,8 +5,8 @@
 #include "winnt.h"
 
 /* debug helper */
-extern LPSTR debugstr_as (PANSI_STRING us);
-extern LPSTR debugstr_us (PUNICODE_STRING us);
+extern LPCSTR debugstr_as (PANSI_STRING us);
+extern LPCSTR debugstr_us (PUNICODE_STRING us);
 extern void dump_ObjectAttributes (POBJECT_ATTRIBUTES ObjectAttributes);
 extern void dump_AnsiString(PANSI_STRING as, BOOLEAN showstring);
 extern void dump_UnicodeString(PUNICODE_STRING us, BOOLEAN showstring);
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
index 77dc065..8454fec 100644
--- a/dlls/ntdll/signal_i386.c
+++ b/dlls/ntdll/signal_i386.c
@@ -11,6 +11,7 @@
 #include <errno.h>
 #include <signal.h>
 #include <stdlib.h>
+#include <stdio.h>
 #include <unistd.h>
 
 #ifdef HAVE_SYS_PARAM_H
diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c
index 1dcb58b..fbe506a 100644
--- a/dlls/ole32/compobj.c
+++ b/dlls/ole32/compobj.c
@@ -31,6 +31,7 @@
 # include <netinet/in.h>
 #endif
 #include <stdlib.h>
+#include <stdio.h>
 #include <string.h>
 #include <time.h>
 #include <assert.h>
@@ -56,7 +57,8 @@
 #include "ifs.h"
 #include "compobj.h"
 
-DEFAULT_DEBUG_CHANNEL(ole)
+DEFAULT_DEBUG_CHANNEL(ole);
+
 /****************************************************************************
  *  COM External Lock structures and methods declaration
  *
@@ -1958,13 +1960,11 @@
 {
   COM_ExternalLock *current = elList.head;
 
-  printf("\nExternal lock list contains:\n");
+  DPRINTF("\nExternal lock list contains:\n");
 
   while ( current != EL_END_OF_LIST )
   {
-    printf( "\t%p with %lu references count.\n", 
-      current->pUnk, 
-      current->uRefCount);
+      DPRINTF( "\t%p with %lu references count.\n", current->pUnk, current->uRefCount);
  
     /* Skip to the next item */ 
     current = current->next;
diff --git a/dlls/ole32/compositemoniker.c b/dlls/ole32/compositemoniker.c
index a273f81..bfcace2 100644
--- a/dlls/ole32/compositemoniker.c
+++ b/dlls/ole32/compositemoniker.c
@@ -303,7 +303,7 @@
         res=OleLoadFromStream(pStm,&IID_IMoniker,(void**)&This->tabMoniker[This->tabLastIndex]);
 #endif
         res=ReadClassStm(pStm,&clsid);
-        printf("res=%ld",res);
+        DPRINTF("res=%ld",res);
         if (FAILED(res))
             break;
 
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index ad259ea..3058ed8 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -26,6 +26,7 @@
 
 #include <stdlib.h>
 #include <string.h>
+#include <stdio.h>
 #include <assert.h>
 #include "winerror.h"
 #include "winreg.h"         /* for HKEY_LOCAL_MACHINE */
@@ -40,8 +41,8 @@
 typedef struct ITypeLibVtbl *LPTYPELIB_VTABLE  ; 
 #include "typelib.h"
 
-DEFAULT_DEBUG_CHANNEL(ole)
-DECLARE_DEBUG_CHANNEL(typelib)
+DEFAULT_DEBUG_CHANNEL(ole);
+DECLARE_DEBUG_CHANNEL(typelib);
 
 /****************************************************************************
  *		QueryPathOfRegTypeLib16	[TYPELIB.14]
diff --git a/dlls/shell32/classes.c b/dlls/shell32/classes.c
index 349a569..6bfa2a3 100644
--- a/dlls/shell32/classes.c
+++ b/dlls/shell32/classes.c
@@ -6,6 +6,7 @@
  */
 #include <stdlib.h>
 #include <string.h>
+#include <stdio.h>
 #include "debugtools.h"
 #include "winerror.h"
 #include "winreg.h"
@@ -15,7 +16,7 @@
 #include "shlguid.h"
 #include "shresdef.h"
 
-DEFAULT_DEBUG_CHANNEL(shell)
+DEFAULT_DEBUG_CHANNEL(shell);
 
 #define MAX_EXTENSION_LENGTH 20
 
diff --git a/dlls/shell32/shellord.c b/dlls/shell32/shellord.c
index 3fbabf4..b8f5fff 100644
--- a/dlls/shell32/shellord.c
+++ b/dlls/shell32/shellord.c
@@ -6,6 +6,7 @@
  *           1998 Jürgen Schmied
  */
 #include <string.h>
+#include <stdio.h>
 #include "winerror.h"
 #include "winreg.h"
 #include "debugtools.h"
@@ -19,7 +20,7 @@
 #include "wine/undocshell.h"
 #include "shpolicy.h"
 
-DEFAULT_DEBUG_CHANNEL(shell)
+DEFAULT_DEBUG_CHANNEL(shell);
 
 /*************************************************************************
  * SHChangeNotifyRegister			[SHELL32.2]
diff --git a/dlls/version/install.c b/dlls/version/install.c
index 859d5fc..7745486 100644
--- a/dlls/version/install.c
+++ b/dlls/version/install.c
@@ -6,6 +6,7 @@
  */
 
 #include <stdlib.h>
+#include <stdio.h>
 #include <string.h>
 
 #include "windef.h"
@@ -17,7 +18,7 @@
 #include "xmalloc.h"
 #include "debugtools.h"
 
-DEFAULT_DEBUG_CHANNEL(ver)
+DEFAULT_DEBUG_CHANNEL(ver);
 
 
 /******************************************************************************
diff --git a/dlls/version/resource.c b/dlls/version/resource.c
index 9701ea8..e892718 100644
--- a/dlls/version/resource.c
+++ b/dlls/version/resource.c
@@ -8,6 +8,8 @@
 
 #include <stdlib.h>
 #include <string.h>
+#include <sys/types.h>
+#include <unistd.h>
 
 #include "neexe.h"
 #include "module.h"
@@ -15,7 +17,7 @@
 #include "lzexpand.h"
 #include "debugtools.h"
 
-DEFAULT_DEBUG_CHANNEL(ver)
+DEFAULT_DEBUG_CHANNEL(ver);
 
 
 /***********************************************************************
diff --git a/dlls/winaspi/winaspi16.c b/dlls/winaspi/winaspi16.c
index 66306b9..9800b35 100644
--- a/dlls/winaspi/winaspi16.c
+++ b/dlls/winaspi/winaspi16.c
@@ -8,6 +8,7 @@
 #include <memory.h>
 #include <unistd.h>
 #include <string.h>
+#include <stdio.h>
 
 #include "winbase.h"
 #include "aspi.h"
diff --git a/dlls/winmm/mcicda/mcicda.c b/dlls/winmm/mcicda/mcicda.c
index 8dfa95b..691c59f 100644
--- a/dlls/winmm/mcicda/mcicda.c
+++ b/dlls/winmm/mcicda/mcicda.c
@@ -8,6 +8,7 @@
  */
 
 #include "config.h"
+#include <stdio.h>
 #include "windef.h"
 #include "wingdi.h"
 #include "winuser.h"
diff --git a/dlls/winmm/mciseq/mcimidi.c b/dlls/winmm/mciseq/mcimidi.c
index 94a46f9..0d8b69a 100644
--- a/dlls/winmm/mciseq/mcimidi.c
+++ b/dlls/winmm/mciseq/mcimidi.c
@@ -16,6 +16,7 @@
  */
 
 #include <stdlib.h>
+#include <stdio.h>
 #include "windef.h"
 #include "wingdi.h"
 #include "winuser.h"
@@ -24,7 +25,7 @@
 #include "heap.h"
 #include "debugtools.h"
 
-DEFAULT_DEBUG_CHANNEL(mcimidi)
+DEFAULT_DEBUG_CHANNEL(mcimidi);
 
 #define MIDI_NOTEOFF             0x80
 #define MIDI_NOTEON              0x90
diff --git a/dlls/winmm/mmio.c b/dlls/winmm/mmio.c
index 9b637a2..fd28e2a 100644
--- a/dlls/winmm/mmio.c
+++ b/dlls/winmm/mmio.c
@@ -19,7 +19,7 @@
 #include "mmsystem.h"
 #include "debugtools.h"
 
-DEFAULT_DEBUG_CHANNEL(mmio)
+DEFAULT_DEBUG_CHANNEL(mmio);
 
 LPMMIOPROC16 MMIO_InstallIOProc(FOURCC, LPMMIOPROC16, DWORD, BOOL);
 
@@ -1114,11 +1114,12 @@
 {
 	LPMMIOINFO16 lpmminfo;
 	LRESULT result;
-	const char *msg = NULL;
 	struct IOProcList *pListNode;
 
-#ifdef DEBUG_RUNTIME
-	switch (uMessage) {
+        if (TRACE_ON(mmio))
+        {
+            const char *msg = NULL;
+            switch (uMessage) {
 #define msgname(x) case x: msg = #x; break;
 		msgname(MMIOM_OPEN);
 		msgname(MMIOM_CLOSE);
@@ -1128,15 +1129,14 @@
 		msgname(MMIOM_SEEK);
 		msgname(MMIOM_RENAME);
 #undef msgname
-	}
-#endif
-
-	if (msg)
+            }
+            if (msg)
 		TRACE("(%04X, %s, %ld, %ld)\n",
-					 hmmio, msg, lParam1, lParam2);
-	else
+                      hmmio, msg, lParam1, lParam2);
+            else
 		TRACE("(%04X, %u, %ld, %ld)\n",
-					 hmmio, uMessage, lParam1, lParam2);
+                      hmmio, uMessage, lParam1, lParam2);
+        }
 	
 	lpmminfo = (LPMMIOINFO16)GlobalLock16(hmmio);
 
diff --git a/dlls/winmm/wineoss/mixer.c b/dlls/winmm/wineoss/mixer.c
index f680c89..d29b39c 100644
--- a/dlls/winmm/wineoss/mixer.c
+++ b/dlls/winmm/wineoss/mixer.c
@@ -10,6 +10,7 @@
 #include "config.h"
 
 #include <stdlib.h>
+#include <stdio.h>
 #include <string.h>
 #include <unistd.h>
 #include <fcntl.h>
@@ -21,7 +22,7 @@
 #include "oss.h"
 #include "debugtools.h"
 
-DEFAULT_DEBUG_CHANNEL(mmaux)
+DEFAULT_DEBUG_CHANNEL(mmaux);
 
 #ifdef HAVE_OSS
 
diff --git a/dlls/wnaspi32/winaspi32.c b/dlls/wnaspi32/winaspi32.c
index ea8b7a3..ab47826 100644
--- a/dlls/wnaspi32/winaspi32.c
+++ b/dlls/wnaspi32/winaspi32.c
@@ -1,6 +1,7 @@
 #include "config.h"
 
 #include <stdlib.h>
+#include <stdio.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <errno.h>
@@ -17,7 +18,7 @@
 #include "ldt.h"
 #include "callback.h"
 
-DEFAULT_DEBUG_CHANNEL(aspi)
+DEFAULT_DEBUG_CHANNEL(aspi);
 
 /* FIXME!
  * 1) Residual byte length reporting not handled
diff --git a/files/file.c b/files/file.c
index e805994..2999730 100644
--- a/files/file.c
+++ b/files/file.c
@@ -16,6 +16,7 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <stdlib.h>
+#include <stdio.h>
 #include <string.h>
 #ifdef HAVE_SYS_ERRNO_H
 #include <sys/errno.h>
@@ -50,7 +51,7 @@
 
 #include "server.h"
 
-DEFAULT_DEBUG_CHANNEL(file)
+DEFAULT_DEBUG_CHANNEL(file);
 
 #if defined(MAP_ANONYMOUS) && !defined(MAP_ANON)
 #define MAP_ANON MAP_ANONYMOUS
diff --git a/graphics/ddraw.c b/graphics/ddraw.c
index 265e4d7..2472d51 100644
--- a/graphics/ddraw.c
+++ b/graphics/ddraw.c
@@ -55,6 +55,7 @@
 #include <fcntl.h>
 #include <string.h>
 #include <stdlib.h>
+#include <stdio.h>
 
 #include "gdi.h"
 #include "heap.h"
@@ -75,7 +76,7 @@
 #include "ddraw_private.h"
 #include "d3d_private.h"
 
-DEFAULT_DEBUG_CHANNEL(ddraw)
+DEFAULT_DEBUG_CHANNEL(ddraw);
 
 /* Restore signal handlers overwritten by XF86DGA 
  */
diff --git a/graphics/psdrv/afm.c b/graphics/psdrv/afm.c
index f7d095a..ce6ed4f 100644
--- a/graphics/psdrv/afm.c
+++ b/graphics/psdrv/afm.c
@@ -7,13 +7,14 @@
  */
 
 #include <string.h>
+#include <stdio.h>
 #include "winnt.h" /* HEAP_ZERO_MEMORY */
 #include "psdrv.h"
 #include "options.h"
 #include "debugtools.h"
 #include "heap.h"
 
-DEFAULT_DEBUG_CHANNEL(psdrv)
+DEFAULT_DEBUG_CHANNEL(psdrv);
 #include <ctype.h>
 
 /* ptr to fonts for which we have afm files */
diff --git a/graphics/psdrv/ppd.c b/graphics/psdrv/ppd.c
index 5d48945..68c3e6d 100644
--- a/graphics/psdrv/ppd.c
+++ b/graphics/psdrv/ppd.c
@@ -6,6 +6,7 @@
  */
 
 #include <string.h>
+#include <stdio.h>
 #include <ctype.h>
 #include "winnt.h" /* HEAP_ZERO_MEMORY */
 #include "heap.h"
@@ -13,7 +14,7 @@
 #include "psdrv.h"
 #include "winspool.h"
 
-DEFAULT_DEBUG_CHANNEL(psdrv)
+DEFAULT_DEBUG_CHANNEL(psdrv);
 
 typedef struct {
 char	*key;
diff --git a/graphics/psdrv/ps.c b/graphics/psdrv/ps.c
index 6550008..92f5ea7 100644
--- a/graphics/psdrv/ps.c
+++ b/graphics/psdrv/ps.c
@@ -6,12 +6,13 @@
  */
 
 #include <ctype.h>
+#include <stdio.h>
 #include <string.h>
 #include "psdrv.h"
 #include "winspool.h"
 #include "debugtools.h"
 
-DEFAULT_DEBUG_CHANNEL(psdrv)
+DEFAULT_DEBUG_CHANNEL(psdrv);
 
 static char psheader[] = /* title llx lly urx ury orientation */
 "%%!PS-Adobe-3.0\n"
diff --git a/if1632/builtin.c b/if1632/builtin.c
index 03408c4..e2fade8 100644
--- a/if1632/builtin.c
+++ b/if1632/builtin.c
@@ -7,6 +7,7 @@
 #include <assert.h>
 #include <ctype.h>
 #include <string.h>
+#include <stdio.h>
 #include "winbase.h"
 #include "wine/winbase16.h"
 #include "wine/winestring.h"
diff --git a/include/debugdefs.h b/include/debugdefs.h
index 16c7e05..86b8b6a 100644
--- a/include/debugdefs.h
+++ b/include/debugdefs.h
@@ -4,505 +4,354 @@
 
 #define DEBUG_CLASS_COUNT __DBCL_COUNT
 
-#ifdef DEBUG_RUNTIME
+static const char * const debug_cl_name[] = { "fixme", "err", "warn", "trace" };
 
-const char * const debug_cl_name[] = { "fixme", "err", "warn", "trace" };
-
-const int dbch_accel = 0;
-const int dbch_advapi = 1;
-const int dbch_animate = 2;
-const int dbch_aspi = 3;
-const int dbch_atom = 4;
-const int dbch_avifile = 5;
-const int dbch_bitblt = 6;
-const int dbch_bitmap = 7;
-const int dbch_caret = 8;
-const int dbch_cdrom = 9;
-const int dbch_class = 10;
-const int dbch_clipboard = 11;
-const int dbch_clipping = 12;
-const int dbch_combo = 13;
-const int dbch_comboex = 14;
-const int dbch_comm = 15;
-const int dbch_commctrl = 16;
-const int dbch_commdlg = 17;
-const int dbch_console = 18;
-const int dbch_crtdll = 19;
-const int dbch_cursor = 20;
-const int dbch_datetime = 21;
-const int dbch_dc = 22;
-const int dbch_ddeml = 23;
-const int dbch_ddraw = 24;
-const int dbch_debug = 25;
-const int dbch_debugstr = 26;
-const int dbch_delayhlp = 27;
-const int dbch_dialog = 28;
-const int dbch_dinput = 29;
-const int dbch_dll = 30;
-const int dbch_dosfs = 31;
-const int dbch_dosmem = 32;
-const int dbch_dplay = 33;
-const int dbch_driver = 34;
-const int dbch_dsound = 35;
-const int dbch_edit = 36;
-const int dbch_elfdll = 37;
-const int dbch_enhmetafile = 38;
-const int dbch_event = 39;
-const int dbch_exec = 40;
-const int dbch_file = 41;
-const int dbch_fixup = 42;
-const int dbch_font = 43;
-const int dbch_gdi = 44;
-const int dbch_global = 45;
-const int dbch_graphics = 46;
-const int dbch_header = 47;
-const int dbch_heap = 48;
-const int dbch_hook = 49;
-const int dbch_hotkey = 50;
-const int dbch_icmp = 51;
-const int dbch_icon = 52;
-const int dbch_imagehlp = 53;
-const int dbch_imagelist = 54;
-const int dbch_imm = 55;
-const int dbch_int = 56;
-const int dbch_int10 = 57;
-const int dbch_int16 = 58;
-const int dbch_int17 = 59;
-const int dbch_int19 = 60;
-const int dbch_int21 = 61;
-const int dbch_int31 = 62;
-const int dbch_io = 63;
-const int dbch_ipaddress = 64;
-const int dbch_key = 65;
-const int dbch_keyboard = 66;
-const int dbch_ldt = 67;
-const int dbch_listbox = 68;
-const int dbch_listview = 69;
-const int dbch_local = 70;
-const int dbch_mci = 71;
-const int dbch_mcianim = 72;
-const int dbch_mciavi = 73;
-const int dbch_mcicda = 74;
-const int dbch_mcimidi = 75;
-const int dbch_mciwave = 76;
-const int dbch_mdi = 77;
-const int dbch_menu = 78;
-const int dbch_message = 79;
-const int dbch_metafile = 80;
-const int dbch_midi = 81;
-const int dbch_mmaux = 82;
-const int dbch_mmio = 83;
-const int dbch_mmsys = 84;
-const int dbch_mmtime = 85;
-const int dbch_module = 86;
-const int dbch_monthcal = 87;
-const int dbch_mpr = 88;
-const int dbch_msacm = 89;
-const int dbch_msg = 90;
-const int dbch_msvideo = 91;
-const int dbch_nativefont = 92;
-const int dbch_nonclient = 93;
-const int dbch_ntdll = 94;
-const int dbch_odbc = 95;
-const int dbch_ole = 96;
-const int dbch_pager = 97;
-const int dbch_palette = 98;
-const int dbch_pidl = 99;
-const int dbch_print = 100;
-const int dbch_process = 101;
-const int dbch_profile = 102;
-const int dbch_progress = 103;
-const int dbch_prop = 104;
-const int dbch_propsheet = 105;
-const int dbch_psapi = 106;
-const int dbch_psdrv = 107;
-const int dbch_ras = 108;
-const int dbch_rebar = 109;
-const int dbch_reg = 110;
-const int dbch_region = 111;
-const int dbch_relay = 112;
-const int dbch_resource = 113;
-const int dbch_scroll = 114;
-const int dbch_security = 115;
-const int dbch_segment = 116;
-const int dbch_seh = 117;
-const int dbch_selector = 118;
-const int dbch_sendmsg = 119;
-const int dbch_server = 120;
-const int dbch_setupx = 121;
-const int dbch_shell = 122;
-const int dbch_snoop = 123;
-const int dbch_sound = 124;
-const int dbch_static = 125;
-const int dbch_statusbar = 126;
-const int dbch_storage = 127;
-const int dbch_stress = 128;
-const int dbch_string = 129;
-const int dbch_syscolor = 130;
-const int dbch_system = 131;
-const int dbch_tab = 132;
-const int dbch_tape = 133;
-const int dbch_tapi = 134;
-const int dbch_task = 135;
-const int dbch_text = 136;
-const int dbch_thread = 137;
-const int dbch_thunk = 138;
-const int dbch_timer = 139;
-const int dbch_toolbar = 140;
-const int dbch_toolhelp = 141;
-const int dbch_tooltips = 142;
-const int dbch_trackbar = 143;
-const int dbch_treeview = 144;
-const int dbch_ttydrv = 145;
-const int dbch_tweak = 146;
-const int dbch_typelib = 147;
-const int dbch_updown = 148;
-const int dbch_ver = 149;
-const int dbch_virtual = 150;
-const int dbch_vxd = 151;
-const int dbch_wave = 152;
-const int dbch_win = 153;
-const int dbch_win16drv = 154;
-const int dbch_win32 = 155;
-const int dbch_wing = 156;
-const int dbch_winsock = 157;
-const int dbch_winspool = 158;
-const int dbch_wnet = 159;
-const int dbch_x11 = 160;
-const int dbch_x11drv = 161;
+char dbch_accel[] = "\003accel";
+char dbch_advapi[] = "\003advapi";
+char dbch_animate[] = "\003animate";
+char dbch_aspi[] = "\003aspi";
+char dbch_atom[] = "\003atom";
+char dbch_avifile[] = "\003avifile";
+char dbch_bitblt[] = "\003bitblt";
+char dbch_bitmap[] = "\003bitmap";
+char dbch_caret[] = "\003caret";
+char dbch_cdrom[] = "\003cdrom";
+char dbch_class[] = "\003class";
+char dbch_clipboard[] = "\003clipboard";
+char dbch_clipping[] = "\003clipping";
+char dbch_combo[] = "\003combo";
+char dbch_comboex[] = "\003comboex";
+char dbch_comm[] = "\003comm";
+char dbch_commctrl[] = "\003commctrl";
+char dbch_commdlg[] = "\003commdlg";
+char dbch_console[] = "\003console";
+char dbch_crtdll[] = "\003crtdll";
+char dbch_cursor[] = "\003cursor";
+char dbch_datetime[] = "\003datetime";
+char dbch_dc[] = "\003dc";
+char dbch_ddeml[] = "\003ddeml";
+char dbch_ddraw[] = "\003ddraw";
+char dbch_debug[] = "\003debug";
+char dbch_debugstr[] = "\003debugstr";
+char dbch_delayhlp[] = "\003delayhlp";
+char dbch_dialog[] = "\003dialog";
+char dbch_dinput[] = "\003dinput";
+char dbch_dll[] = "\003dll";
+char dbch_dosfs[] = "\003dosfs";
+char dbch_dosmem[] = "\003dosmem";
+char dbch_dplay[] = "\003dplay";
+char dbch_driver[] = "\003driver";
+char dbch_dsound[] = "\003dsound";
+char dbch_edit[] = "\003edit";
+char dbch_elfdll[] = "\003elfdll";
+char dbch_enhmetafile[] = "\003enhmetafile";
+char dbch_event[] = "\003event";
+char dbch_exec[] = "\003exec";
+char dbch_file[] = "\003file";
+char dbch_fixup[] = "\003fixup";
+char dbch_font[] = "\003font";
+char dbch_gdi[] = "\003gdi";
+char dbch_global[] = "\003global";
+char dbch_graphics[] = "\003graphics";
+char dbch_header[] = "\003header";
+char dbch_heap[] = "\003heap";
+char dbch_hook[] = "\003hook";
+char dbch_hotkey[] = "\003hotkey";
+char dbch_icmp[] = "\003icmp";
+char dbch_icon[] = "\003icon";
+char dbch_imagehlp[] = "\003imagehlp";
+char dbch_imagelist[] = "\003imagelist";
+char dbch_imm[] = "\003imm";
+char dbch_int[] = "\003int";
+char dbch_int10[] = "\003int10";
+char dbch_int16[] = "\003int16";
+char dbch_int17[] = "\003int17";
+char dbch_int19[] = "\003int19";
+char dbch_int21[] = "\003int21";
+char dbch_int31[] = "\003int31";
+char dbch_io[] = "\003io";
+char dbch_ipaddress[] = "\003ipaddress";
+char dbch_key[] = "\003key";
+char dbch_keyboard[] = "\003keyboard";
+char dbch_ldt[] = "\003ldt";
+char dbch_listbox[] = "\003listbox";
+char dbch_listview[] = "\003listview";
+char dbch_local[] = "\003local";
+char dbch_mci[] = "\003mci";
+char dbch_mcianim[] = "\003mcianim";
+char dbch_mciavi[] = "\003mciavi";
+char dbch_mcicda[] = "\003mcicda";
+char dbch_mcimidi[] = "\003mcimidi";
+char dbch_mciwave[] = "\003mciwave";
+char dbch_mdi[] = "\003mdi";
+char dbch_menu[] = "\003menu";
+char dbch_message[] = "\003message";
+char dbch_metafile[] = "\003metafile";
+char dbch_midi[] = "\003midi";
+char dbch_mmaux[] = "\003mmaux";
+char dbch_mmio[] = "\003mmio";
+char dbch_mmsys[] = "\003mmsys";
+char dbch_mmtime[] = "\003mmtime";
+char dbch_module[] = "\003module";
+char dbch_monthcal[] = "\003monthcal";
+char dbch_mpr[] = "\003mpr";
+char dbch_msacm[] = "\003msacm";
+char dbch_msg[] = "\003msg";
+char dbch_msvideo[] = "\003msvideo";
+char dbch_nativefont[] = "\003nativefont";
+char dbch_nonclient[] = "\003nonclient";
+char dbch_ntdll[] = "\003ntdll";
+char dbch_odbc[] = "\003odbc";
+char dbch_ole[] = "\003ole";
+char dbch_pager[] = "\003pager";
+char dbch_palette[] = "\003palette";
+char dbch_pidl[] = "\003pidl";
+char dbch_print[] = "\003print";
+char dbch_process[] = "\003process";
+char dbch_profile[] = "\003profile";
+char dbch_progress[] = "\003progress";
+char dbch_prop[] = "\003prop";
+char dbch_propsheet[] = "\003propsheet";
+char dbch_psapi[] = "\003psapi";
+char dbch_psdrv[] = "\003psdrv";
+char dbch_ras[] = "\003ras";
+char dbch_rebar[] = "\003rebar";
+char dbch_reg[] = "\003reg";
+char dbch_region[] = "\003region";
+char dbch_relay[] = "\003relay";
+char dbch_resource[] = "\003resource";
+char dbch_scroll[] = "\003scroll";
+char dbch_security[] = "\003security";
+char dbch_segment[] = "\003segment";
+char dbch_seh[] = "\003seh";
+char dbch_selector[] = "\003selector";
+char dbch_sendmsg[] = "\003sendmsg";
+char dbch_server[] = "\003server";
+char dbch_setupx[] = "\003setupx";
+char dbch_shell[] = "\003shell";
+char dbch_snoop[] = "\003snoop";
+char dbch_sound[] = "\003sound";
+char dbch_static[] = "\003static";
+char dbch_statusbar[] = "\003statusbar";
+char dbch_storage[] = "\003storage";
+char dbch_stress[] = "\003stress";
+char dbch_string[] = "\003string";
+char dbch_syscolor[] = "\003syscolor";
+char dbch_system[] = "\003system";
+char dbch_tab[] = "\003tab";
+char dbch_tape[] = "\003tape";
+char dbch_tapi[] = "\003tapi";
+char dbch_task[] = "\003task";
+char dbch_text[] = "\003text";
+char dbch_thread[] = "\003thread";
+char dbch_thunk[] = "\003thunk";
+char dbch_timer[] = "\003timer";
+char dbch_toolbar[] = "\003toolbar";
+char dbch_toolhelp[] = "\003toolhelp";
+char dbch_tooltips[] = "\003tooltips";
+char dbch_trackbar[] = "\003trackbar";
+char dbch_treeview[] = "\003treeview";
+char dbch_ttydrv[] = "\003ttydrv";
+char dbch_tweak[] = "\003tweak";
+char dbch_typelib[] = "\003typelib";
+char dbch_updown[] = "\003updown";
+char dbch_ver[] = "\003ver";
+char dbch_virtual[] = "\003virtual";
+char dbch_vxd[] = "\003vxd";
+char dbch_wave[] = "\003wave";
+char dbch_win[] = "\003win";
+char dbch_win16drv[] = "\003win16drv";
+char dbch_win32[] = "\003win32";
+char dbch_wing[] = "\003wing";
+char dbch_winsock[] = "\003winsock";
+char dbch_winspool[] = "\003winspool";
+char dbch_wnet[] = "\003wnet";
+char dbch_x11[] = "\003x11";
+char dbch_x11drv[] = "\003x11drv";
 
 #define DEBUG_CHANNEL_COUNT 162
 
-char __debug_msg_enabled[DEBUG_CHANNEL_COUNT][DEBUG_CLASS_COUNT] = {
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0},
-{1, 1, 0, 0}
+static char * const debug_channels[DEBUG_CHANNEL_COUNT] = {
+    dbch_accel,
+    dbch_advapi,
+    dbch_animate,
+    dbch_aspi,
+    dbch_atom,
+    dbch_avifile,
+    dbch_bitblt,
+    dbch_bitmap,
+    dbch_caret,
+    dbch_cdrom,
+    dbch_class,
+    dbch_clipboard,
+    dbch_clipping,
+    dbch_combo,
+    dbch_comboex,
+    dbch_comm,
+    dbch_commctrl,
+    dbch_commdlg,
+    dbch_console,
+    dbch_crtdll,
+    dbch_cursor,
+    dbch_datetime,
+    dbch_dc,
+    dbch_ddeml,
+    dbch_ddraw,
+    dbch_debug,
+    dbch_debugstr,
+    dbch_delayhlp,
+    dbch_dialog,
+    dbch_dinput,
+    dbch_dll,
+    dbch_dosfs,
+    dbch_dosmem,
+    dbch_dplay,
+    dbch_driver,
+    dbch_dsound,
+    dbch_edit,
+    dbch_elfdll,
+    dbch_enhmetafile,
+    dbch_event,
+    dbch_exec,
+    dbch_file,
+    dbch_fixup,
+    dbch_font,
+    dbch_gdi,
+    dbch_global,
+    dbch_graphics,
+    dbch_header,
+    dbch_heap,
+    dbch_hook,
+    dbch_hotkey,
+    dbch_icmp,
+    dbch_icon,
+    dbch_imagehlp,
+    dbch_imagelist,
+    dbch_imm,
+    dbch_int,
+    dbch_int10,
+    dbch_int16,
+    dbch_int17,
+    dbch_int19,
+    dbch_int21,
+    dbch_int31,
+    dbch_io,
+    dbch_ipaddress,
+    dbch_key,
+    dbch_keyboard,
+    dbch_ldt,
+    dbch_listbox,
+    dbch_listview,
+    dbch_local,
+    dbch_mci,
+    dbch_mcianim,
+    dbch_mciavi,
+    dbch_mcicda,
+    dbch_mcimidi,
+    dbch_mciwave,
+    dbch_mdi,
+    dbch_menu,
+    dbch_message,
+    dbch_metafile,
+    dbch_midi,
+    dbch_mmaux,
+    dbch_mmio,
+    dbch_mmsys,
+    dbch_mmtime,
+    dbch_module,
+    dbch_monthcal,
+    dbch_mpr,
+    dbch_msacm,
+    dbch_msg,
+    dbch_msvideo,
+    dbch_nativefont,
+    dbch_nonclient,
+    dbch_ntdll,
+    dbch_odbc,
+    dbch_ole,
+    dbch_pager,
+    dbch_palette,
+    dbch_pidl,
+    dbch_print,
+    dbch_process,
+    dbch_profile,
+    dbch_progress,
+    dbch_prop,
+    dbch_propsheet,
+    dbch_psapi,
+    dbch_psdrv,
+    dbch_ras,
+    dbch_rebar,
+    dbch_reg,
+    dbch_region,
+    dbch_relay,
+    dbch_resource,
+    dbch_scroll,
+    dbch_security,
+    dbch_segment,
+    dbch_seh,
+    dbch_selector,
+    dbch_sendmsg,
+    dbch_server,
+    dbch_setupx,
+    dbch_shell,
+    dbch_snoop,
+    dbch_sound,
+    dbch_static,
+    dbch_statusbar,
+    dbch_storage,
+    dbch_stress,
+    dbch_string,
+    dbch_syscolor,
+    dbch_system,
+    dbch_tab,
+    dbch_tape,
+    dbch_tapi,
+    dbch_task,
+    dbch_text,
+    dbch_thread,
+    dbch_thunk,
+    dbch_timer,
+    dbch_toolbar,
+    dbch_toolhelp,
+    dbch_tooltips,
+    dbch_trackbar,
+    dbch_treeview,
+    dbch_ttydrv,
+    dbch_tweak,
+    dbch_typelib,
+    dbch_updown,
+    dbch_ver,
+    dbch_virtual,
+    dbch_vxd,
+    dbch_wave,
+    dbch_win,
+    dbch_win16drv,
+    dbch_win32,
+    dbch_wing,
+    dbch_winsock,
+    dbch_winspool,
+    dbch_wnet,
+    dbch_x11,
+    dbch_x11drv
 };
 
-const char * const debug_ch_name[DEBUG_CHANNEL_COUNT] = {
-"accel",
-"advapi",
-"animate",
-"aspi",
-"atom",
-"avifile",
-"bitblt",
-"bitmap",
-"caret",
-"cdrom",
-"class",
-"clipboard",
-"clipping",
-"combo",
-"comboex",
-"comm",
-"commctrl",
-"commdlg",
-"console",
-"crtdll",
-"cursor",
-"datetime",
-"dc",
-"ddeml",
-"ddraw",
-"debug",
-"debugstr",
-"delayhlp",
-"dialog",
-"dinput",
-"dll",
-"dosfs",
-"dosmem",
-"dplay",
-"driver",
-"dsound",
-"edit",
-"elfdll",
-"enhmetafile",
-"event",
-"exec",
-"file",
-"fixup",
-"font",
-"gdi",
-"global",
-"graphics",
-"header",
-"heap",
-"hook",
-"hotkey",
-"icmp",
-"icon",
-"imagehlp",
-"imagelist",
-"imm",
-"int",
-"int10",
-"int16",
-"int17",
-"int19",
-"int21",
-"int31",
-"io",
-"ipaddress",
-"key",
-"keyboard",
-"ldt",
-"listbox",
-"listview",
-"local",
-"mci",
-"mcianim",
-"mciavi",
-"mcicda",
-"mcimidi",
-"mciwave",
-"mdi",
-"menu",
-"message",
-"metafile",
-"midi",
-"mmaux",
-"mmio",
-"mmsys",
-"mmtime",
-"module",
-"monthcal",
-"mpr",
-"msacm",
-"msg",
-"msvideo",
-"nativefont",
-"nonclient",
-"ntdll",
-"odbc",
-"ole",
-"pager",
-"palette",
-"pidl",
-"print",
-"process",
-"profile",
-"progress",
-"prop",
-"propsheet",
-"psapi",
-"psdrv",
-"ras",
-"rebar",
-"reg",
-"region",
-"relay",
-"resource",
-"scroll",
-"security",
-"segment",
-"seh",
-"selector",
-"sendmsg",
-"server",
-"setupx",
-"shell",
-"snoop",
-"sound",
-"static",
-"statusbar",
-"storage",
-"stress",
-"string",
-"syscolor",
-"system",
-"tab",
-"tape",
-"tapi",
-"task",
-"text",
-"thread",
-"thunk",
-"timer",
-"toolbar",
-"toolhelp",
-"tooltips",
-"trackbar",
-"treeview",
-"ttydrv",
-"tweak",
-"typelib",
-"updown",
-"ver",
-"virtual",
-"vxd",
-"wave",
-"win",
-"win16drv",
-"win32",
-"wing",
-"winsock",
-"winspool",
-"wnet",
-"x11",
-"x11drv"
-};
+int dbg_header_err( const char *dbg_channel, const char *func )
+{
+    return dbg_printf( "err:%s:%s ", dbg_channel + 1, func );
+}
 
-#endif /*DEBUG_RUNTIME*/
+int dbg_header_fixme( const char *dbg_channel, const char *func )
+{
+    return dbg_printf( "fixme:%s:%s ", dbg_channel + 1, func );
+}
 
-/* end of automatically generated debug.h */
+int dbg_header_warn( const char *dbg_channel, const char *func )
+{
+    return dbg_printf( "warn:%s:%s ", dbg_channel + 1, func );
+}
+
+int dbg_header_trace( const char *dbg_channel, const char *func )
+{
+    return dbg_printf( "trace:%s:%s ", dbg_channel + 1, func );
+}
diff --git a/include/debugtools.h b/include/debugtools.h
index 3071ec2..3624b4b 100644
--- a/include/debugtools.h
+++ b/include/debugtools.h
@@ -5,97 +5,91 @@
 #ifdef __WINE__  /* Debugging interface is internal to Wine */
 
 #include <stdarg.h>
-#include <stdio.h>
 #include "config.h"
 #include "windef.h"
 
-#define DEBUG_RUNTIME
-
 struct _GUID;
 
 /* Internal definitions (do not use these directly) */
 
 enum __DEBUG_CLASS { __DBCL_FIXME, __DBCL_ERR, __DBCL_WARN, __DBCL_TRACE, __DBCL_COUNT };
 
-extern char __debug_msg_enabled[][__DBCL_COUNT];
+#ifndef NO_TRACE_MSGS
+# define __GET_DEBUGGING_trace(dbch) ((dbch)[0] & (1 << __DBCL_TRACE))
+#else
+# define __GET_DEBUGGING_trace(dbch) 0
+#endif
 
-extern const char * const debug_cl_name[__DBCL_COUNT];
-extern const char * const debug_ch_name[];
+#ifndef NO_DEBUG_MSGS
+# define __GET_DEBUGGING_warn(dbch)  ((dbch)[0] & (1 << __DBCL_WARN))
+# define __GET_DEBUGGING_fixme(dbch) ((dbch)[0] & (1 << __DBCL_FIXME))
+#else
+# define __GET_DEBUGGING_warn(dbch)  0
+# define __GET_DEBUGGING_fixme(dbch) 0
+#endif
 
-#define __GET_DEBUGGING(dbcl,dbch)    (__debug_msg_enabled[(dbch)][(dbcl)])
-#define __SET_DEBUGGING(dbcl,dbch,on) (__debug_msg_enabled[(dbch)][(dbcl)] = (on))
+/* define error macro regardless of what is configured */
+#define __GET_DEBUGGING_err(dbch)  ((dbch)[0] & (1 << __DBCL_ERR))
+
+#define __GET_DEBUGGING(dbcl,dbch)  __GET_DEBUGGING_##dbcl(dbch)
+#define __SET_DEBUGGING(dbcl,dbch,on) \
+    ((on) ? ((dbch)[0] |= 1 << (dbcl)) : ((dbch)[0] &= ~(1 << (dbcl))))
 
 #ifndef __GNUC__
 #define __FUNCTION__ ""
 #endif
 
 #define __DPRINTF(dbcl,dbch) \
-  (!__GET_DEBUGGING(dbcl,dbch) || \
-     (dbg_printf("%s:%s:%s ", debug_cl_name[(dbcl)], debug_ch_name[(dbch)], __FUNCTION__),0)) \
-    ? 0 : dbg_printf
-
-#define __DUMMY_DPRINTF 1 ? (void)0 : (void)((int (*)(char *, ...)) NULL)
-
+  (!__GET_DEBUGGING(dbcl,(dbch)) || (dbg_header_##dbcl((dbch),__FUNCTION__),0)) ? \
+     (void)0 : (void)dbg_printf
 
 /* Exported definitions and macros */
 
 /* These function return a printable version of a string, including
    quotes.  The string will be valid for some time, but not indefinitely
    as strings are re-used.  */
-extern LPSTR debugstr_an (LPCSTR s, int n);
-extern LPSTR debugstr_a (LPCSTR s);
-extern LPSTR debugstr_wn (LPCWSTR s, int n);
-extern LPSTR debugstr_w (LPCWSTR s);
-extern LPSTR debugres_a (LPCSTR res);
-extern LPSTR debugres_w (LPCWSTR res);
-extern LPSTR debugstr_guid( const struct _GUID *id );
-extern LPSTR debugstr_hex_dump (const void *ptr, int len);
+extern LPCSTR debugstr_an (LPCSTR s, int n);
+extern LPCSTR debugstr_wn (LPCWSTR s, int n);
+extern LPCSTR debugres_a (LPCSTR res);
+extern LPCSTR debugres_w (LPCWSTR res);
+extern LPCSTR debugstr_guid( const struct _GUID *id );
+extern LPCSTR debugstr_hex_dump (const void *ptr, int len);
+extern int dbg_header_err( const char *dbg_channel, const char *func );
+extern int dbg_header_warn( const char *dbg_channel, const char *func );
+extern int dbg_header_fixme( const char *dbg_channel, const char *func );
+extern int dbg_header_trace( const char *dbg_channel, const char *func );
 extern int dbg_vprintf( const char *format, va_list args );
 
+static inline LPCSTR debugstr_a( LPCSTR s )  { return debugstr_an( s, 80 ); }
+static inline LPCSTR debugstr_w( LPCWSTR s ) { return debugstr_wn( s, 80 ); }
+
 #ifdef __GNUC__
 extern int dbg_printf(const char *format, ...) __attribute__((format (printf,1,2)));
 #else
 extern int dbg_printf(const char *format, ...);
 #endif
 
-/* use configure to allow user to compile out debugging messages */
-#ifndef NO_TRACE_MSGS
-#define TRACE        __DPRINTF(__DBCL_TRACE,*DBCH_DEFAULT)
-#define TRACE_(ch)   __DPRINTF(__DBCL_TRACE,dbch_##ch)
-#define TRACE_ON(ch) __GET_DEBUGGING(__DBCL_TRACE,dbch_##ch)
-#else
-#define TRACE        __DUMMY_DPRINTF
-#define TRACE_(ch)   __DUMMY_DPRINTF
-#define TRACE_ON(ch) 0
-#endif /* NO_TRACE_MSGS */
+#define TRACE        __DPRINTF(trace,__dbch_default)
+#define TRACE_(ch)   __DPRINTF(trace,dbch_##ch)
+#define TRACE_ON(ch) __GET_DEBUGGING(trace,dbch_##ch)
 
-#ifndef NO_DEBUG_MSGS
-#define WARN         __DPRINTF(__DBCL_WARN,*DBCH_DEFAULT)
-#define WARN_(ch)    __DPRINTF(__DBCL_WARN,dbch_##ch)
-#define WARN_ON(ch)  __GET_DEBUGGING(__DBCL_WARN,dbch_##ch)
-#define FIXME        __DPRINTF(__DBCL_FIXME,*DBCH_DEFAULT)
-#define FIXME_(ch)   __DPRINTF(__DBCL_FIXME,dbch_##ch)
-#define FIXME_ON(ch) __GET_DEBUGGING(__DBCL_FIXME,dbch_##ch)
-#else
-#define WARN         __DUMMY_DPRINTF
-#define WARN_(ch)    __DUMMY_DPRINTF
-#define WARN_ON(ch)  0
-#define FIXME        __DUMMY_DPRINTF
-#define FIXME_(ch)   __DUMMY_DPRINTF
-#define FIXME_ON(ch) 0
-#endif /* NO_DEBUG_MSGS */
+#define WARN         __DPRINTF(warn,__dbch_default)
+#define WARN_(ch)    __DPRINTF(warn,dbch_##ch)
+#define WARN_ON(ch)  __GET_DEBUGGING(warn,dbch_##ch)
 
-/* define error macro regardless of what is configured */
-/* Solaris got an 'ERR' define in <sys/reg.h> */
-#undef ERR
-#define ERR        __DPRINTF(__DBCL_ERR,*DBCH_DEFAULT)
-#define ERR_(ch)   __DPRINTF(__DBCL_ERR,dbch_##ch)
-#define ERR_ON(ch) __GET_DEBUGGING(__DBCL_ERR,dbch_##ch)
+#define FIXME        __DPRINTF(fixme,__dbch_default)
+#define FIXME_(ch)   __DPRINTF(fixme,dbch_##ch)
+#define FIXME_ON(ch) __GET_DEBUGGING(fixme,dbch_##ch)
+
+#undef ERR  /* Solaris got an 'ERR' define in <sys/reg.h> */
+#define ERR          __DPRINTF(err,__dbch_default)
+#define ERR_(ch)     __DPRINTF(err,dbch_##ch)
+#define ERR_ON(ch)   __GET_DEBUGGING(err,dbch_##ch)
 
 #define DECLARE_DEBUG_CHANNEL(ch) \
-    extern const int dbch_##ch;
+    extern char dbch_##ch[];
 #define DEFAULT_DEBUG_CHANNEL(ch) \
-    extern const int dbch_##ch; static const int *const DBCH_DEFAULT = &dbch_##ch;
+    extern char dbch_##ch[]; static char * const __dbch_default = dbch_##ch;
 
 #define DPRINTF dbg_printf
 #define MESSAGE dbg_printf
diff --git a/include/miscemu.h b/include/miscemu.h
index 3f72c4d..fbc2787 100644
--- a/include/miscemu.h
+++ b/include/miscemu.h
@@ -218,7 +218,7 @@
      (!seg || IS_SELECTOR_SYSTEM(seg))? (void *)off : PTR_SEG_OFF_TO_LIN(seg,off&0xffff))
 
 #define INT_BARF(context,num) \
-    fprintf( stderr, "int%x: unknown/not implemented parameters:\n" \
+    ERR( "int%x: unknown/not implemented parameters:\n" \
                      "int%x: AX %04x, BX %04x, CX %04x, DX %04x, " \
                      "SI %04x, DI %04x, DS %04x, ES %04x\n", \
              (num), (num), AX_reg(context), BX_reg(context), CX_reg(context), \
diff --git a/memory/global.c b/memory/global.c
index d8b05bb..5cecdf4 100644
--- a/memory/global.c
+++ b/memory/global.c
@@ -7,6 +7,7 @@
 
 #include <sys/types.h>
 #include <stdlib.h>
+#include <stdio.h>
 #include <unistd.h>
 #include <string.h>
 
@@ -21,7 +22,7 @@
 #include "debugtools.h"
 #include "winerror.h"
 
-DEFAULT_DEBUG_CHANNEL(global)
+DEFAULT_DEBUG_CHANNEL(global);
 
   /* Global arena block */
 typedef struct
diff --git a/memory/heap.c b/memory/heap.c
index 161cccb..9f3307c 100644
--- a/memory/heap.c
+++ b/memory/heap.c
@@ -7,6 +7,7 @@
 
 #include <assert.h>
 #include <stdlib.h>
+#include <stdio.h>
 #include <string.h>
 #include "wine/winbase16.h"
 #include "wine/winestring.h"
@@ -19,7 +20,7 @@
 #include "toolhelp.h"
 #include "debugtools.h"
 
-DEFAULT_DEBUG_CHANNEL(heap)
+DEFAULT_DEBUG_CHANNEL(heap);
 
 /* Note: the heap data structures are based on what Pietrek describes in his
  * book 'Windows 95 System Programming Secrets'. The layout is not exactly
diff --git a/memory/ldt.c b/memory/ldt.c
index 8130fea..0607f3b 100644
--- a/memory/ldt.c
+++ b/memory/ldt.c
@@ -8,12 +8,13 @@
 #include "config.h"
 
 #include <stdlib.h>
+#include <stdio.h>
 #include <string.h>
 #include <errno.h>
 #include "ldt.h"
 #include "debugtools.h"
 
-DEFAULT_DEBUG_CHANNEL(ldt)
+DEFAULT_DEBUG_CHANNEL(ldt);
 
 #ifdef __i386__
 
diff --git a/memory/virtual.c b/memory/virtual.c
index 7cb6c25..c29c7f5 100644
--- a/memory/virtual.c
+++ b/memory/virtual.c
@@ -14,6 +14,7 @@
 #include <fcntl.h>
 #include <unistd.h>
 #include <stdlib.h>
+#include <stdio.h>
 #include <string.h>
 #include <sys/types.h>
 #ifdef HAVE_SYS_MMAN_H
@@ -28,7 +29,7 @@
 #include "server.h"
 #include "debugtools.h"
 
-DEFAULT_DEBUG_CHANNEL(virtual)
+DEFAULT_DEBUG_CHANNEL(virtual);
 
 #ifndef MS_SYNC
 #define MS_SYNC 0
diff --git a/misc/cpu.c b/misc/cpu.c
index f8fd090..eb27bfa 100644
--- a/misc/cpu.c
+++ b/misc/cpu.c
@@ -7,6 +7,7 @@
 
 #include <ctype.h>
 #include <string.h>
+#include <stdio.h>
 #include "winbase.h"
 #include "wine/winbase16.h"
 #include "wine/winestring.h"
@@ -16,7 +17,7 @@
 #include "winerror.h"
 #include "debugtools.h"
 
-DEFAULT_DEBUG_CHANNEL(reg)
+DEFAULT_DEBUG_CHANNEL(reg);
 
 static BYTE PF[64] = {0,};
 
diff --git a/misc/debugstr.c b/misc/debugstr.c
index eb17938..242d0f3 100644
--- a/misc/debugstr.c
+++ b/misc/debugstr.c
@@ -52,8 +52,7 @@
 
 /* ---------------------------------------------------------------------- */
 
-LPSTR
-debugstr_an (LPCSTR src, int n)
+LPCSTR debugstr_an (LPCSTR src, int n)
 {
   LPSTR dst, res;
 
@@ -96,16 +95,7 @@
 
 /* ---------------------------------------------------------------------- */
 
-LPSTR
-debugstr_a (LPCSTR s)
-{
-  return debugstr_an (s, 80);
-}
-
-/* ---------------------------------------------------------------------- */
-
-LPSTR
-debugstr_wn (LPCWSTR src, int n)
+LPCSTR debugstr_wn (LPCWSTR src, int n)
 {
   LPSTR dst, res;
 
@@ -147,36 +137,30 @@
 }
 
 /* ---------------------------------------------------------------------- */
-
-LPSTR
-debugstr_w (LPCWSTR s)
-{
-  return debugstr_wn (s, 80);
-}
-
-/* ---------------------------------------------------------------------- */
 /* This routine returns a nicely formated name of the resource res
    If the resource name is a string, it will return '<res-name>'
    If it is a number, it will return #<4-digit-hex-number> */
-LPSTR debugres_a( LPCSTR res )
+LPCSTR debugres_a( LPCSTR res )
 {
-    char resname[10];
+    char *resname;
     if (HIWORD(res)) return debugstr_a(res);
-    sprintf(resname, "#%04x", LOWORD(res));
-    return debugstr_a (resname);
+    resname = gimme1(6);
+    sprintf(resname, "#%04x", LOWORD(res) );
+    return resname;
 }
 
-LPSTR debugres_w( LPCWSTR res )
+LPCSTR debugres_w( LPCWSTR res )
 {
-    char resname[10];
+    char *resname;
     if (HIWORD(res)) return debugstr_w(res);
-    sprintf(resname, "#%04x", LOWORD(res));
-    return debugstr_a (resname);
+    resname = gimme1(6);
+    sprintf( resname, "#%04x", LOWORD(res) );
+    return resname;
 }
 
 /* ---------------------------------------------------------------------- */
 
-LPSTR debugstr_guid( const GUID *id )
+LPCSTR debugstr_guid( const GUID *id )
 {
     LPSTR str;
 
@@ -232,7 +216,6 @@
 }
 
 
-
 /*--< Function >---------------------------------------------------------
 **  
 **              debugstr_hex_dump
@@ -252,8 +235,7 @@
 **  TRACE("struct dump is \n%s", debugstr_hex_dump(&x, sizeof(x)));
 **          
 **-------------------------------------------------------------------------*/
-LPSTR 
-debugstr_hex_dump (const void *ptr, int len)
+LPCSTR debugstr_hex_dump (const void *ptr, int len)
 {
     /* Locals */
     char          dumpbuf[59];
diff --git a/misc/error.c b/misc/error.c
index b1a706b..49ed983 100644
--- a/misc/error.c
+++ b/misc/error.c
@@ -5,6 +5,7 @@
  */
 
 #include <stdlib.h>
+#include <stdio.h>
 #include <string.h>
 
 #include "windef.h"
diff --git a/misc/main.c b/misc/main.c
index 22645cb..f061ff0 100644
--- a/misc/main.c
+++ b/misc/main.c
@@ -104,6 +104,7 @@
     FALSE,          /* Perfect graphics */
     FALSE,          /* No DGA */
     FALSE,          /* No XSHM */
+    FALSE,          /* DXGrab */
     NULL,           /* Alternate config file name */
     0               /* screenDepth */
 };
@@ -194,7 +195,7 @@
   int l, cls, dotracerelay = TRACE_ON(relay);
 
   l = strlen(options);
-  if (l<3)
+  if (l<2)
     return FALSE;
   if (options[l-1]=='\n') options[l-1]='\0';
   do
@@ -226,7 +227,7 @@
 	for (i=0; i<DEBUG_CHANNEL_COUNT; i++)
 	  for(j=0; j<DEBUG_CLASS_COUNT; j++)
 	    if(cls == -1 || cls == j)
-                __SET_DEBUGGING( j, i, (*options=='+') );
+                __SET_DEBUGGING( j, debug_channels[i], (*options=='+') );
       }
     else if (!lstrncmpiA(options+1, "relay=", 6) ||
 	     !lstrncmpiA(options+1, "snoop=", 6))
@@ -235,10 +236,11 @@
 	char *s, *s2, ***output, c;
 
 	for (i=0; i<DEBUG_CHANNEL_COUNT; i++)
-	  if (debug_ch_name && (!lstrncmpiA(debug_ch_name[i],options+1,5))){
+	  if (!strncasecmp( debug_channels[i] + 1, options + 1, 5))
+          {
 	    for(j=0; j<DEBUG_CLASS_COUNT; j++)
 	      if(cls == -1 || cls == j)
-                  __SET_DEBUGGING( j, i, 1 );
+                  __SET_DEBUGGING( j, debug_channels[i], 1 );
 	    break;
 	  }
 	/* should never happen, maybe assert(i!=DEBUG_CHANNEL_COUNT)? */
@@ -277,10 +279,11 @@
       {
 	int i, j;
 	for (i=0; i<DEBUG_CHANNEL_COUNT; i++)
-	  if (debug_ch_name && (!lstrncmpiA(options+1,debug_ch_name[i],l-1))){
+          if (!strncasecmp( debug_channels[i] + 1, options + 1, l - 1) && !debug_channels[i][l])
+          {
 	    for(j=0; j<DEBUG_CLASS_COUNT; j++)
 	      if(cls == -1 || cls == j)
-                  __SET_DEBUGGING( j, i, (*options=='+') );
+                  __SET_DEBUGGING( j, debug_channels[i], (*options=='+') );
 	    break;
 	  }
 	if (i==DEBUG_CHANNEL_COUNT)
@@ -316,8 +319,7 @@
   MESSAGE("Available message types:\n");
   MESSAGE("%-9s ","all");
   for(i=0;i<DEBUG_CHANNEL_COUNT;i++)
-    if(debug_ch_name[i])
-      MESSAGE("%-9s%c",debug_ch_name[i],
+      MESSAGE("%-9s%c",debug_channels[i] + 1,
 	  (((i+2)%8==0)?'\n':' '));
   MESSAGE("\n\n");
   ExitProcess(1);
diff --git a/misc/registry.c b/misc/registry.c
index d66cd5b..5c7751e 100644
--- a/misc/registry.c
+++ b/misc/registry.c
@@ -23,6 +23,7 @@
 
 #include <stdlib.h>
 #include <string.h>
+#include <stdio.h>
 #include <unistd.h>
 #include <ctype.h>
 #include <errno.h>
@@ -49,7 +50,7 @@
 #include "server.h"
 #include "services.h"
 
-DEFAULT_DEBUG_CHANNEL(reg)
+DEFAULT_DEBUG_CHANNEL(reg);
 
 static void REGISTRY_Init(void);
 /* FIXME: following defines should be configured global ... */
diff --git a/msdos/dpmi.c b/msdos/dpmi.c
index e5c19d4..cd7819b 100644
--- a/msdos/dpmi.c
+++ b/msdos/dpmi.c
@@ -22,7 +22,7 @@
 #include "callback.h"
 #include "debugtools.h"
 
-DEFAULT_DEBUG_CHANNEL(int31)
+DEFAULT_DEBUG_CHANNEL(int31);
 
 #define DOS_GET_DRIVE(reg) ((reg) ? (reg) - 1 : DRIVE_GetCurrentDrive())
 
diff --git a/msdos/int2a.c b/msdos/int2a.c
index ecef77a..e49a0dc 100644
--- a/msdos/int2a.c
+++ b/msdos/int2a.c
@@ -7,6 +7,8 @@
 #include "miscemu.h"
 #include "debugtools.h"
 
+DEFAULT_DEBUG_CHANNEL(int);
+
 /**********************************************************************
  *	    INT_Int2aHandler
  *
diff --git a/msdos/int3d.c b/msdos/int3d.c
index 768e260..90d9ba3 100644
--- a/msdos/int3d.c
+++ b/msdos/int3d.c
@@ -6,9 +6,10 @@
 #include <stdlib.h>
 #include "msdos.h"
 #include "miscemu.h"
-/* #define DEBUG_INT */
 #include "debugtools.h"
 
+DEFAULT_DEBUG_CHANNEL(int);
+
 /**********************************************************************
  *          INT_Int3dHandler
  *
diff --git a/msdos/int41.c b/msdos/int41.c
index 76f3554..905218a 100644
--- a/msdos/int41.c
+++ b/msdos/int41.c
@@ -6,6 +6,9 @@
 
 #include <stdio.h>
 #include "miscemu.h"
+#include "debugtools.h"
+
+DEFAULT_DEBUG_CHANNEL(int);
 
 /***********************************************************************
  *           INT_Int41Handler
diff --git a/msdos/int4b.c b/msdos/int4b.c
index 6103b95..64215e9 100644
--- a/msdos/int4b.c
+++ b/msdos/int4b.c
@@ -4,6 +4,9 @@
 
 #include <stdio.h>
 #include "miscemu.h"
+#include "debugtools.h"
+
+DEFAULT_DEBUG_CHANNEL(int);
 
 /***********************************************************************
  *           INT_Int4bHandler
diff --git a/msdos/ioports.c b/msdos/ioports.c
index 29e2329..3862af9 100644
--- a/msdos/ioports.c
+++ b/msdos/ioports.c
@@ -13,6 +13,7 @@
 
 #include <ctype.h>
 #include <stdlib.h>
+#include <stdio.h>
 #include <string.h>
 #include <time.h>
 #include <unistd.h>
diff --git a/relay32/snoop.c b/relay32/snoop.c
index ade7ae3..00c8a54 100644
--- a/relay32/snoop.c
+++ b/relay32/snoop.c
@@ -7,6 +7,7 @@
 #include "config.h"
 
 #include <assert.h>
+#include <stdio.h>
 #include <string.h>
 #include "winbase.h"
 #include "winnt.h"
diff --git a/tools/make_debug b/tools/make_debug
index a7d8bb9..e5a59f0 100755
--- a/tools/make_debug
+++ b/tools/make_debug
@@ -21,16 +21,14 @@
 
 #define DEBUG_CLASS_COUNT __DBCL_COUNT
 
-#ifdef DEBUG_RUNTIME
-
-const char * const debug_cl_name[] = { "fixme", "err", "warn", "trace" };
+static const char * const debug_cl_name[] = { "fixme", "err", "warn", "trace" };
 
 EOF
 
 chno=0
 for ch in $DEBUG_CHANNELS
 do
-    echo "const int dbch_$ch = $chno;"
+    echo "char dbch_$ch[] = \"\\003$ch\";"
     chno=`expr $chno + 1`
 done
 echo
@@ -38,35 +36,25 @@
 
 count=1
 echo
-echo 'char __debug_msg_enabled[DEBUG_CHANNEL_COUNT][DEBUG_CLASS_COUNT] = {'
+echo 'static char * const debug_channels[DEBUG_CHANNEL_COUNT] = {'
 for ch in $DEBUG_CHANNELS
 do
     if [ "${count}" != "${chno}" ]; then
-	echo "{1, 1, 0, 0},"
+	echo "    dbch_${ch},"
     else
-	echo "{1, 1, 0, 0}"
+	echo "    dbch_${ch}"
     fi
     count=`expr $count + 1`
 done
 echo '};'
 
-count=1
-echo
-echo 'const char * const debug_ch_name[DEBUG_CHANNEL_COUNT] = {'
-for ch in $DEBUG_CHANNELS
+for cls in err fixme warn trace
 do
-    if [ "${count}" != "${chno}" ]; then
-	echo "\"${ch}\",";
-    else
-    echo "\"${ch}\"";
-    fi
-    count=`expr $count + 1`
-done
-echo '};'
+    cat <<EOF
 
-cat <<EOF
-
-#endif /*DEBUG_RUNTIME*/
-
-/* end of automatically generated debug.h */
+int dbg_header_$cls( const char *dbg_channel, const char *func )
+{
+    return dbg_printf( "$cls:%s:%s ", dbg_channel + 1, func );
+}
 EOF
+done
diff --git a/win32/kernel32.c b/win32/kernel32.c
index ba7404c..654bfd1 100644
--- a/win32/kernel32.c
+++ b/win32/kernel32.c
@@ -7,6 +7,8 @@
  */
 
 #include <string.h>
+#include <sys/types.h>
+#include <unistd.h>
 
 #include "windef.h"
 #include "winbase.h"
@@ -26,9 +28,8 @@
 #include "syslevel.h"
 #include "winerror.h"
 
-DECLARE_DEBUG_CHANNEL(thunk)
-DECLARE_DEBUG_CHANNEL(dosmem)
-DECLARE_DEBUG_CHANNEL(win32)
+DEFAULT_DEBUG_CHANNEL(thunk);
+DECLARE_DEBUG_CHANNEL(win32);
 
 
 /***********************************************************************
@@ -42,7 +43,7 @@
  */
 void WINAPI LogApiThk( LPSTR func )
 {
-    TRACE_(thunk)( "%s\n", debugstr_a(func) );
+    TRACE( "%s\n", debugstr_a(func) );
 }
 
 /***********************************************************************
@@ -52,7 +53,7 @@
  */
 void WINAPI LogApiThkLSF( LPSTR func, CONTEXT86 *context )
 {
-    TRACE_(thunk)( "%s\n", debugstr_a(func) );
+    TRACE( "%s\n", debugstr_a(func) );
 }
 
 /***********************************************************************
@@ -62,7 +63,7 @@
  */
 void WINAPI LogApiThkSL( LPSTR func, CONTEXT86 *context )
 {
-    TRACE_(thunk)( "%s\n", debugstr_a(func) );
+    TRACE( "%s\n", debugstr_a(func) );
 }
 
 /***********************************************************************
@@ -72,7 +73,7 @@
  */
 void WINAPI LogCBThkSL( LPSTR func, CONTEXT86 *context )
 {
-    TRACE_(thunk)( "%s\n", debugstr_a(func) );
+    TRACE( "%s\n", debugstr_a(func) );
 }
 
 /***********************************************************************
@@ -135,7 +136,7 @@
 
     if ((hmod = LoadLibrary16(module)) <= 32) 
     {
-        ERR_(thunk)("(%s, %s, %s): Unable to load '%s', error %d\n",
+        ERR("(%s, %s, %s): Unable to load '%s', error %d\n",
                    module, func, module32, module, hmod);
         return 0;
     }
@@ -143,14 +144,14 @@
     if (   !(ordinal = NE_GetOrdinal(hmod, func))
         || !(TD16 = PTR_SEG_TO_LIN(NE_GetEntryPointEx(hmod, ordinal, FALSE))))
     {
-        ERR_(thunk)("(%s, %s, %s): Unable to find '%s'\n",
+        ERR("(%s, %s, %s): Unable to find '%s'\n",
                    module, func, module32, func);
         return 0;
     }
 
     if (TD32 && memcmp(TD16->magic, TD32->magic, 4))
     {
-        ERR_(thunk)("(%s, %s, %s): Bad magic %c%c%c%c (should be %c%c%c%c)\n",
+        ERR("(%s, %s, %s): Bad magic %c%c%c%c (should be %c%c%c%c)\n",
                    module, func, module32, 
                    TD16->magic[0], TD16->magic[1], TD16->magic[2], TD16->magic[3],
                    TD32->magic[0], TD32->magic[1], TD32->magic[2], TD32->magic[3]);
@@ -159,14 +160,14 @@
 
     if (TD32 && TD16->checksum != TD32->checksum)
     {
-        ERR_(thunk)("(%s, %s, %s): Wrong checksum %08lx (should be %08lx)\n",
+        ERR("(%s, %s, %s): Wrong checksum %08lx (should be %08lx)\n",
                    module, func, module32, TD16->checksum, TD32->checksum);
         return 0;
     }
 
     if (!TD32 && checksum && checksum != *(LPDWORD)TD16)
     {
-        ERR_(thunk)("(%s, %s, %s): Wrong checksum %08lx (should be %08lx)\n",
+        ERR("(%s, %s, %s): Wrong checksum %08lx (should be %08lx)\n",
                    module, func, module32, *(LPDWORD)TD16, checksum);
         return 0;
     }
@@ -209,19 +210,19 @@
     {
         directionSL = TRUE;
 
-        TRACE_(thunk)("SL01 thunk %s (%lx) <- %s (%s), Reason: %ld\n",
+        TRACE("SL01 thunk %s (%lx) <- %s (%s), Reason: %ld\n",
                      module32, (DWORD)TD, module16, thunkfun16, dwReason);
     }
     else if (!strncmp(TD->magic, "LS01", 4))
     {
         directionSL = FALSE;
 
-        TRACE_(thunk)("LS01 thunk %s (%lx) -> %s (%s), Reason: %ld\n",
+        TRACE("LS01 thunk %s (%lx) -> %s (%s), Reason: %ld\n",
                      module32, (DWORD)TD, module16, thunkfun16, dwReason);
     }
     else
     {
-        ERR_(thunk)("Invalid magic %c%c%c%c\n", 
+        ERR("Invalid magic %c%c%c%c\n", 
                    TD->magic[0], TD->magic[1], TD->magic[2], TD->magic[3]);
         return 0;
     }
@@ -242,7 +243,7 @@
 
                 if (SL16->fpData == NULL)
                 {
-                    ERR_(thunk)("ThunkConnect16 was not called!\n");
+                    ERR("ThunkConnect16 was not called!\n");
                     return 0;
                 }
 
@@ -255,7 +256,7 @@
                 tdb->next = SL32->data->targetDB;   /* FIXME: not thread-safe! */
                 SL32->data->targetDB = tdb;
 
-                TRACE_(thunk)("Process %08lx allocated TargetDB entry for ThunkDataSL %08lx\n", 
+                TRACE("Process %08lx allocated TargetDB entry for ThunkDataSL %08lx\n", 
                              (DWORD)PROCESS_Current(), (DWORD)SL32->data);
             }
             else
@@ -806,7 +807,7 @@
  */
 BOOL WINAPI SSOnBigStack()
 {
-    TRACE_(thunk)("Yes, thunking is initialized\n");
+    TRACE("Yes, thunking is initialized\n");
     return TRUE;
 }
 
@@ -874,12 +875,12 @@
     case 48:	ret = fun(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11]);
 		break;
     default:
-	WARN_(thunk)("Unsupported nr of arguments, %ld\n",nr);
+	WARN("Unsupported nr of arguments, %ld\n",nr);
 	ret = 0;
 	break;
 
     }
-    TRACE_(thunk)(" returning %ld ...\n",ret);
+    TRACE(" returning %ld ...\n",ret);
     return ret;
 }
 
@@ -998,7 +999,7 @@
 		return FALSE;
 	}
 	if (mzh.e_magic!=IMAGE_DOS_SIGNATURE) {
-		WARN_(dosmem)("File has not got dos signature!\n");
+		WARN("File has not got dos signature!\n");
 		_lclose(hf);
 		return FALSE;
 	}
@@ -1051,7 +1052,7 @@
       char *stack32 = (char *)NtCurrentTeb()->cur_stack - argSize;
       STACK16FRAME *frame16 = (STACK16FRAME *)stack16 - 1;
 
-      TRACE_(thunk)("before SYSTHUNK hack: EBP: %08lx ESP: %08lx cur_stack: %08lx\n",
+      TRACE("before SYSTHUNK hack: EBP: %08lx ESP: %08lx cur_stack: %08lx\n",
                    EBP_reg(context), ESP_reg(context), NtCurrentTeb()->cur_stack);
 
       memset(frame16, '\0', sizeof(STACK16FRAME));
@@ -1064,7 +1065,7 @@
       ESP_reg(context) = (DWORD)stack32 + 4;
       EBP_reg(context) = ESP_reg(context) + argSize;
 
-      TRACE_(thunk)("after  SYSTHUNK hack: EBP: %08lx ESP: %08lx cur_stack: %08lx\n",
+      TRACE("after  SYSTHUNK hack: EBP: %08lx ESP: %08lx cur_stack: %08lx\n",
                    EBP_reg(context), ESP_reg(context), NtCurrentTeb()->cur_stack);
    }
 
@@ -1092,7 +1093,7 @@
 
       DWORD nArgsPopped = ESP_reg(context) - (DWORD)stack32;
 
-      TRACE_(thunk)("before SYSTHUNK hack: EBP: %08lx ESP: %08lx cur_stack: %08lx\n",
+      TRACE("before SYSTHUNK hack: EBP: %08lx ESP: %08lx cur_stack: %08lx\n",
                    EBP_reg(context), ESP_reg(context), NtCurrentTeb()->cur_stack);
 
       NtCurrentTeb()->cur_stack = (DWORD)frame16->frame32;
@@ -1100,7 +1101,7 @@
       ESP_reg(context) = (DWORD)stack16 + nArgsPopped;
       EBP_reg(context) = frame16->ebp;
 
-      TRACE_(thunk)("after  SYSTHUNK hack: EBP: %08lx ESP: %08lx cur_stack: %08lx\n",
+      TRACE("after  SYSTHUNK hack: EBP: %08lx ESP: %08lx cur_stack: %08lx\n",
                    EBP_reg(context), ESP_reg(context), NtCurrentTeb()->cur_stack);
    }
 }
diff --git a/windows/x11drv/event.c b/windows/x11drv/event.c
index 04fd21c..f1e4f43 100644
--- a/windows/x11drv/event.c
+++ b/windows/x11drv/event.c
@@ -43,8 +43,8 @@
 #include "windef.h"
 #include "x11drv.h"
 
-DEFAULT_DEBUG_CHANNEL(event)
-DECLARE_DEBUG_CHANNEL(win)
+DEFAULT_DEBUG_CHANNEL(event);
+DECLARE_DEBUG_CHANNEL(win);
   
 /* X context to associate a hwnd to an X window */
 extern XContext winContext;
@@ -1005,20 +1005,19 @@
         }
     }
 
-#ifdef DEBUG_RUNTIME
-{
-    int i;
-    for ( i = 0; i < cTargets; i++)
+    if (TRACE_ON(event))
     {
-        if (targets[i])
+        int i;
+        for ( i = 0; i < cTargets; i++)
         {
-          char *itemFmtName = TSXGetAtomName(display, targets[i]);
-          TRACE("\tAtom# %d:  Type %s\n", i, itemFmtName);
-          TSXFree(itemFmtName);
+            if (targets[i])
+            {
+                char *itemFmtName = TSXGetAtomName(display, targets[i]);
+                TRACE("\tAtom# %d:  Type %s\n", i, itemFmtName);
+                TSXFree(itemFmtName);
+            }
         }
     }
-}
-#endif
     
     /* Update the X property */
     TRACE("\tUpdating property %s...", TSXGetAtomName(display, rprop));
diff --git a/windows/x11drv/main.c b/windows/x11drv/main.c
index 45db8fa..bbc752c 100644
--- a/windows/x11drv/main.c
+++ b/windows/x11drv/main.c
@@ -258,16 +258,7 @@
   if (X11DRV_USER_GetResource( db, ".debugoptions", &value))
     MAIN_ParseDebugOptions((char*)value.addr);
   if (X11DRV_USER_GetResource( db, ".debugmsg", &value))
-    {
-#ifndef DEBUG_RUNTIME
-      MESSAGE("%s: Option \"-debugmsg\" not implemented.\n" \
-          "    Recompile with DEBUG_RUNTIME in include/debugtools.h defined.\n",
-	  argv[0]);
-      exit(1);
-#else
-      MAIN_ParseDebugOptions((char*)value.addr);
-#endif
-    }
+    MAIN_ParseDebugOptions((char*)value.addr);
   
   if (X11DRV_USER_GetResource( db, ".dll", &value))
   {