Index: /trunk/MFCtooling/userlog/filters.txt
===================================================================
--- /trunk/MFCtooling/userlog/filters.txt	(revision 48)
+++ /trunk/MFCtooling/userlog/filters.txt	(revision 48)
@@ -0,0 +1,106 @@
+Code for an inverse filter:
+
+	// inverse filter: defined messages will be filtered, all else just passes through
+	// may be replaced with a lookup-table to improve perfomance
+	// upon completion of the rules, i.e., when it is clear which messages are required,
+	// this should be changed to a "normal" filter.
+	switch(msg->message) {
+		case WM_NULL:
+		case WM_MOVE:
+		case WM_SIZE:
+		case WM_GETTEXT:
+		case WM_GETTEXTLENGTH:
+		case WM_PAINT:
+		case WM_ERASEBKGND:
+		case WM_SHOWWINDOW:
+		case WM_CANCELMODE:
+		case WM_SETCURSOR:
+		case WM_GETMINMAXINFO:
+		case WM_GETFONT:
+		case WM_WINDOWPOSCHANGING:
+		case WM_WINDOWPOSCHANGED:
+		case WM_NOTIFY:
+		case WM_STYLECHANGING:
+		case WM_STYLECHANGED:
+		case WM_GETICON:
+		case WM_NCCREATE:
+		case WM_NCDESTROY:
+		case WM_NCCALCSIZE:
+		case WM_NCHITTEST:
+		case WM_NCPAINT:
+		case WM_GETDLGCODE:
+		case 0x0090: // WM_UAHDESTROYWINDOW
+		case 0x0091: // WM_UAHDRAWMENU
+		case 0x0092: // WM_UADRAWMENUITEM
+		case 0x0093: // WM_UAHINITMENU
+		case 0x0094: // WM_UAHMEASUREMENUITEM
+		case 0x0095: // WM_UAHNCPAINTMENUPOPUP
+		case WM_NCMOUSEMOVE:
+		case WM_TIMER:
+		case WM_ENTERIDLE:
+		case WM_CTLCOLORMSGBOX:
+		case WM_CTLCOLOREDIT:
+		case WM_CTLCOLORLISTBOX:
+		case WM_CTLCOLORBTN:
+		case WM_CTLCOLORDLG:
+		case WM_CTLCOLORSCROLLBAR:
+		case WM_CTLCOLORSTATIC:
+		case WM_MOUSEMOVE:
+		case WM_PARENTNOTIFY:
+		case WM_MDIGETACTIVE:
+		case WM_IME_NOTIFY:
+		case WM_IME_SETCONTEXT:
+		case WM_AFXFIRST:
+		case WM_AFXFIRST+1:
+		case WM_AFXFIRST+2:
+		case WM_AFXFIRST+3:
+		case WM_AFXFIRST+4:
+		case WM_AFXFIRST+5:
+		case WM_AFXFIRST+6:
+		case WM_AFXFIRST+7:
+		case WM_AFXFIRST+8:
+		case WM_AFXFIRST+9:
+		case WM_AFXFIRST+10:
+		case WM_AFXFIRST+11:
+		case WM_AFXFIRST+12:
+		case WM_AFXFIRST+13:
+		case WM_AFXFIRST+14:
+		case WM_AFXFIRST+15:
+		case WM_AFXFIRST+16:
+		case WM_AFXFIRST+17:
+		case WM_AFXFIRST+18:
+		case WM_AFXFIRST+19:
+		case WM_AFXFIRST+20:
+		case WM_AFXFIRST+21:
+		case WM_AFXFIRST+22:
+		case WM_AFXFIRST+23:
+		case WM_AFXFIRST+24:
+		case WM_AFXFIRST+25:
+		case WM_AFXFIRST+26:
+		case WM_AFXFIRST+27:
+		case WM_AFXFIRST+28:
+		case WM_AFXFIRST+29:
+		case WM_AFXFIRST+30:
+		case WM_AFXLAST:
+		case 1025:
+		case 1031:
+		case 1142:
+		case 2024:
+		case 4100:
+		case 4101:
+		case 4103:
+		case 4352:
+		case 4362:
+		case 4363:
+		case 4364:
+		case 4365:
+		case 4372:
+		case 4613:
+			break;
+		default:
+			// exclude messages 0xC000-0xFFFF
+			if( !(msg->message>=0xC000 && msg->message<=0xFFFF) ) {
+				// CODE HERE!
+			}
+			break;
+	}
Index: /trunk/MFCtooling/userlog/helpers.cpp
===================================================================
--- /trunk/MFCtooling/userlog/helpers.cpp	(revision 48)
+++ /trunk/MFCtooling/userlog/helpers.cpp	(revision 48)
@@ -0,0 +1,84 @@
+#include "stdafx.h"
+#include "helpers.h"
+
+bool MessageEquals(const MSG & msg1, const MSG & msg2) {
+	bool retVal = false;
+	if( (msg1.time==-1 && msg1.pt.x==-1 && msg1.pt.y==-1) || (msg2.time==-1 && msg2.pt.x==-1 && msg2.pt.y==-1) ) {
+		retVal = msg1.hwnd==msg2.hwnd && msg1.message==msg2.message && msg1.lParam==msg2.lParam &&
+			msg1.wParam==msg2.wParam;
+	} else {
+		retVal = msg1.hwnd==msg2.hwnd && msg1.message==msg2.message && msg1.lParam==msg2.lParam &&
+			msg1.wParam==msg2.wParam && msg1.time==msg2.time && msg1.pt.x==msg2.pt.x && msg1.pt.y==msg2.pt.y;
+	}
+	return retVal;
+}
+
+int replaceWithXmlEntitiesWString(const wchar_t * source, wchar_t ** target, size_t sourceLength) {
+	size_t j=0;
+	size_t extraLength = 0;
+	size_t bufsize = 300;
+	wchar_t * tmpTarget = new wchar_t[sourceLength+bufsize];
+	size_t i;
+	for( i=0; i<sourceLength && j<sourceLength+bufsize-5; i++ ) {
+		switch (source[i]) {
+			case L'&':
+				tmpTarget[j] = L'&';
+				tmpTarget[j+1]=L'a';
+				tmpTarget[j+2]=L'm';
+				tmpTarget[j+3]=L'p';
+				tmpTarget[j+4]=L';';
+				j += 5;
+				extraLength += 4;
+				break;
+			case L'<':
+				tmpTarget[j] = L'&';
+				tmpTarget[j+1]=L'l';
+				tmpTarget[j+2]=L't';
+				tmpTarget[j+3]=L';';
+				j += 4;
+				extraLength += 3;
+				break;
+			case L'>':
+				tmpTarget[j] = L'&';
+				tmpTarget[j+1]=L'g';
+				tmpTarget[j+2]=L't';
+				tmpTarget[j+3]=L';';
+				j += 4;
+				extraLength += 3;
+				break;
+			case L'\"':
+				tmpTarget[j] = L'&';
+				tmpTarget[j+1]=L'q';
+				tmpTarget[j+2]=L'u';
+				tmpTarget[j+3]=L'o';
+				tmpTarget[j+4]=L't';
+				tmpTarget[j+5]=L';';
+				j += 6;
+				extraLength += 5;
+				break;
+			case L'\'':
+				tmpTarget[j] = L'&';
+				tmpTarget[j+1]=L'a';
+				tmpTarget[j+2]=L'p';
+				tmpTarget[j+3]=L'o';
+				tmpTarget[j+4]=L's';
+				tmpTarget[j+5]=L';';
+				j += 6;
+				extraLength += 5;
+				break;
+			case L'%':
+				tmpTarget[j] = L'\\';
+				tmpTarget[j+1] = L'%';
+				j += 2;
+				extraLength += 1;
+				break;
+			default:
+				tmpTarget[j] = source[i];
+				j++;
+		}
+	}
+	*target = new wchar_t[j+1];
+	memcpy(*target,tmpTarget,j*sizeof(wchar_t));
+	(*target)[j] = '\0';
+	return j;
+}
Index: /trunk/MFCtooling/userlog/helpers.h
===================================================================
--- /trunk/MFCtooling/userlog/helpers.h	(revision 48)
+++ /trunk/MFCtooling/userlog/helpers.h	(revision 48)
@@ -0,0 +1,13 @@
+#ifndef __HELPERS_H__
+#define __HELPERS_H__
+
+int replaceWithXmlEntitiesWString(const wchar_t * source, wchar_t ** target, size_t sourceLength);
+
+/**
+ * Compares two messages parameter-wise. 
+ * TODO: Check if this works better, if MSG.time and MSG.pt are ignored in the comparison, as they are missing in CWPSTRUCT.
+ * TODO: In case of CWPSTRICT both values are per default -1. 
+ */
+bool MessageEquals(const MSG & msg1, const MSG & msg2);
+
+#endif // __HELPERS_H__
Index: /trunk/MFCtooling/userlog/userlog.cpp
===================================================================
--- /trunk/MFCtooling/userlog/userlog.cpp	(revision 47)
+++ /trunk/MFCtooling/userlog/userlog.cpp	(revision 48)
@@ -4,4 +4,6 @@
 #include <map>
 #include <cstdio>
+
+#include "helpers.h"
 
 #ifdef __USING_MTRACE__
@@ -233,111 +235,4 @@
 	}
 
-	/* Source code for an inverse filter
-
-	// inverse filter: defined messages will be filtered, all else just passes through
-	// may be replaced with a lookup-table to improve perfomance
-	// upon completion of the rules, i.e., when it is clear which messages are required,
-	// this should be changed to a "normal" filter.
-	switch(msg->message) {
-		case WM_NULL:
-		case WM_MOVE:
-		case WM_SIZE:
-		case WM_GETTEXT:
-		case WM_GETTEXTLENGTH:
-		case WM_PAINT:
-		case WM_ERASEBKGND:
-		case WM_SHOWWINDOW:
-		case WM_CANCELMODE:
-		case WM_SETCURSOR:
-		case WM_GETMINMAXINFO:
-		case WM_GETFONT:
-		case WM_WINDOWPOSCHANGING:
-		case WM_WINDOWPOSCHANGED:
-		case WM_NOTIFY:
-		case WM_STYLECHANGING:
-		case WM_STYLECHANGED:
-		case WM_GETICON:
-		case WM_NCCREATE:
-		case WM_NCDESTROY:
-		case WM_NCCALCSIZE:
-		case WM_NCHITTEST:
-		case WM_NCPAINT:
-		case WM_GETDLGCODE:
-		case 0x0090: // WM_UAHDESTROYWINDOW
-		case 0x0091: // WM_UAHDRAWMENU
-		case 0x0092: // WM_UADRAWMENUITEM
-		case 0x0093: // WM_UAHINITMENU
-		case 0x0094: // WM_UAHMEASUREMENUITEM
-		case 0x0095: // WM_UAHNCPAINTMENUPOPUP
-		case WM_NCMOUSEMOVE:
-		case WM_TIMER:
-		case WM_ENTERIDLE:
-		case WM_CTLCOLORMSGBOX:
-		case WM_CTLCOLOREDIT:
-		case WM_CTLCOLORLISTBOX:
-		case WM_CTLCOLORBTN:
-		case WM_CTLCOLORDLG:
-		case WM_CTLCOLORSCROLLBAR:
-		case WM_CTLCOLORSTATIC:
-		case WM_MOUSEMOVE:
-		case WM_PARENTNOTIFY:
-		case WM_MDIGETACTIVE:
-		case WM_IME_NOTIFY:
-		case WM_IME_SETCONTEXT:
-		case WM_AFXFIRST:
-		case WM_AFXFIRST+1:
-		case WM_AFXFIRST+2:
-		case WM_AFXFIRST+3:
-		case WM_AFXFIRST+4:
-		case WM_AFXFIRST+5:
-		case WM_AFXFIRST+6:
-		case WM_AFXFIRST+7:
-		case WM_AFXFIRST+8:
-		case WM_AFXFIRST+9:
-		case WM_AFXFIRST+10:
-		case WM_AFXFIRST+11:
-		case WM_AFXFIRST+12:
-		case WM_AFXFIRST+13:
-		case WM_AFXFIRST+14:
-		case WM_AFXFIRST+15:
-		case WM_AFXFIRST+16:
-		case WM_AFXFIRST+17:
-		case WM_AFXFIRST+18:
-		case WM_AFXFIRST+19:
-		case WM_AFXFIRST+20:
-		case WM_AFXFIRST+21:
-		case WM_AFXFIRST+22:
-		case WM_AFXFIRST+23:
-		case WM_AFXFIRST+24:
-		case WM_AFXFIRST+25:
-		case WM_AFXFIRST+26:
-		case WM_AFXFIRST+27:
-		case WM_AFXFIRST+28:
-		case WM_AFXFIRST+29:
-		case WM_AFXFIRST+30:
-		case WM_AFXLAST:
-		case 1025:
-		case 1031:
-		case 1142:
-		case 2024:
-		case 4100:
-		case 4101:
-		case 4103:
-		case 4352:
-		case 4362:
-		case 4363:
-		case 4364:
-		case 4365:
-		case 4372:
-		case 4613:
-			break;
-		default:
-			// exclude messages 0xC000-0xFFFF
-			if( !(msg->message>=0xC000 && msg->message<=0xFFFF) ) {
-				// CODE HERE!
-			}
-			break;
-	} */
-
 #ifdef __TIMING__
 	GetSystemTime( &systemTime );
@@ -354,91 +249,4 @@
 	}
 #endif // __TIMING__
-}
-
-
-///////////////////////////////////////////////////////////
-// 2 Byte character functions
-///////////////////////////////////////////////////////////
-
-bool MessageEquals(const MSG & msg1, const MSG & msg2) {
-	bool retVal = false;
-	if( (msg1.time==-1 && msg1.pt.x==-1 && msg1.pt.y==-1) || (msg2.time==-1 && msg2.pt.x==-1 && msg2.pt.y==-1) ) {
-		retVal = msg1.hwnd==msg2.hwnd && msg1.message==msg2.message && msg1.lParam==msg2.lParam &&
-			msg1.wParam==msg2.wParam;
-	} else {
-		retVal = msg1.hwnd==msg2.hwnd && msg1.message==msg2.message && msg1.lParam==msg2.lParam &&
-			msg1.wParam==msg2.wParam && msg1.time==msg2.time && msg1.pt.x==msg2.pt.x && msg1.pt.y==msg2.pt.y;
-	}
-	return retVal;
-}
-
-int replaceWithXmlEntitiesWString(const wchar_t * source, wchar_t ** target, size_t sourceLength) {
-	size_t j=0;
-	size_t extraLength = 0;
-	size_t bufsize = 300;
-	wchar_t * tmpTarget = new wchar_t[sourceLength+bufsize];
-	size_t i;
-	for( i=0; i<sourceLength && j<sourceLength+bufsize-5; i++ ) {
-		switch (source[i]) {
-			case L'&':
-				tmpTarget[j] = L'&';
-				tmpTarget[j+1]=L'a';
-				tmpTarget[j+2]=L'm';
-				tmpTarget[j+3]=L'p';
-				tmpTarget[j+4]=L';';
-				j += 5;
-				extraLength += 4;
-				break;
-			case L'<':
-				tmpTarget[j] = L'&';
-				tmpTarget[j+1]=L'l';
-				tmpTarget[j+2]=L't';
-				tmpTarget[j+3]=L';';
-				j += 4;
-				extraLength += 3;
-				break;
-			case L'>':
-				tmpTarget[j] = L'&';
-				tmpTarget[j+1]=L'g';
-				tmpTarget[j+2]=L't';
-				tmpTarget[j+3]=L';';
-				j += 4;
-				extraLength += 3;
-				break;
-			case L'\"':
-				tmpTarget[j] = L'&';
-				tmpTarget[j+1]=L'q';
-				tmpTarget[j+2]=L'u';
-				tmpTarget[j+3]=L'o';
-				tmpTarget[j+4]=L't';
-				tmpTarget[j+5]=L';';
-				j += 6;
-				extraLength += 5;
-				break;
-			case L'\'':
-				tmpTarget[j] = L'&';
-				tmpTarget[j+1]=L'a';
-				tmpTarget[j+2]=L'p';
-				tmpTarget[j+3]=L'o';
-				tmpTarget[j+4]=L's';
-				tmpTarget[j+5]=L';';
-				j += 6;
-				extraLength += 5;
-				break;
-			case L'%':
-				tmpTarget[j] = L'\\';
-				tmpTarget[j+1] = L'%';
-				j += 2;
-				extraLength += 1;
-				break;
-			default:
-				tmpTarget[j] = source[i];
-				j++;
-		}
-	}
-	*target = new wchar_t[j+1];
-	memcpy(*target,tmpTarget,j*sizeof(wchar_t));
-	(*target)[j] = '\0';
-	return j;
 }
 
Index: /trunk/MFCtooling/userlog/userlog.h
===================================================================
--- /trunk/MFCtooling/userlog/userlog.h	(revision 47)
+++ /trunk/MFCtooling/userlog/userlog.h	(revision 48)
@@ -1,2 +1,5 @@
+#ifndef __USERLOG_H__
+#define __USERLOG_H__
+
 #ifdef USERLOG_EXPORTS
 #define USERLOG_API __declspec(dllexport)
@@ -72,14 +75,5 @@
 void HookProc(int nFrom, int nCode, PMSG msg);
 
-/**
- * Compares two messages parameter-wise. 
- * TODO: Check if this works better, if MSG.time and MSG.pt are ignored in the comparison, as they are missing in CWPSTRUCT.
- * TODO: In case of CWPSTRICT both values are per default -1. 
- */
-bool MessageEquals(const MSG & msg1, const MSG & msg2);
-
 void WriteLogentryWString(PMSG msg, int nFrom);
-
-int replaceWithXmlEntitiesWString(const wchar_t * source, wchar_t ** target, size_t sourceLength);
 
 #ifdef __USING_COSTUMLOG__
@@ -88,2 +82,4 @@
 void CloseLogfile();
 #endif
+
+#endif // __USERLOG_H__
