diff --git a/gui/CustomFilter.cpp b/gui/CustomFilter.cpp
new file mode 100644
index 0000000..9fe03f0
--- /dev/null
+++ b/gui/CustomFilter.cpp
@@ -0,0 +1,44 @@
+/* Copyright (C) 2010-2012 kaosu (qiupf2000@gmail.com)
+ * This file is part of the Interactive Text Hooker.
+
+ * Interactive Text Hooker is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "CustomFilter.h"
+
+void CustomFilter::Insert(WORD number)
+{
+ set.insert(number);
+}
+
+void CustomFilter::Erase(WORD number)
+{
+ set.erase(number);
+}
+
+bool CustomFilter::Find(WORD number) const
+{
+ return set.find(number) != set.end();
+}
+
+void CustomFilter::Clear()
+{
+ set.clear();
+}
+
+void CustomFilter::Traverse(CustomFilterCallBack callback, PVOID param)
+{
+ for (auto ch = set.begin(); ch != set.end(); ++ch)
+ callback(*ch, param);
+}
diff --git a/gui/CustomFilter.h b/gui/CustomFilter.h
new file mode 100644
index 0000000..4bdcbc4
--- /dev/null
+++ b/gui/CustomFilter.h
@@ -0,0 +1,33 @@
+/* Copyright (C) 2010-2012 kaosu (qiupf2000@gmail.com)
+ * This file is part of the Interactive Text Hooker.
+
+ * Interactive Text Hooker is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+#include "ITH.h"
+
+typedef void (*CustomFilterCallBack) (WORD, PVOID);
+
+class CustomFilter
+{
+public:
+ bool Find(WORD number) const;
+ void Insert(WORD number);
+ void Erase(WORD number);
+ void Clear();
+ void Traverse(CustomFilterCallBack callback, PVOID param);
+private:
+ std::set set;
+};
diff --git a/gui/ITH.h b/gui/ITH.h
new file mode 100644
index 0000000..0873862
--- /dev/null
+++ b/gui/ITH.h
@@ -0,0 +1,37 @@
+/* Copyright (C) 2010-2012 kaosu (qiupf2000@gmail.com)
+ * This file is part of the Interactive Text Hooker.
+
+ * Interactive Text Hooker is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include