summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/IEHistory/IEHistory.sln26
-rw-r--r--plugins/IEHistory/IEHistory.suobin0 -> 54272 bytes
-rw-r--r--plugins/IEHistory/IEHistory/IEHistory.apsbin0 -> 23692 bytes
-rw-r--r--plugins/IEHistory/IEHistory/IEHistory.cpp131
-rw-r--r--plugins/IEHistory/IEHistory/IEHistory.rc162
-rw-r--r--plugins/IEHistory/IEHistory/IEHistory.vcproj465
-rw-r--r--plugins/IEHistory/IEHistory/commonheaders.h84
-rw-r--r--plugins/IEHistory/IEHistory/dlgHandlers.cpp798
-rw-r--r--plugins/IEHistory/IEHistory/dlgHandlers.h50
-rw-r--r--plugins/IEHistory/IEHistory/events.cpp88
-rw-r--r--plugins/IEHistory/IEHistory/events.h35
-rw-r--r--plugins/IEHistory/IEHistory/history (old).icobin0 -> 2238 bytes
-rw-r--r--plugins/IEHistory/IEHistory/history.icobin0 -> 2550 bytes
-rw-r--r--plugins/IEHistory/IEHistory/mirandaMem.cpp42
-rw-r--r--plugins/IEHistory/IEHistory/mirandaMem.h33
-rw-r--r--plugins/IEHistory/IEHistory/resource.h45
-rw-r--r--plugins/IEHistory/IEHistory/services.cpp62
-rw-r--r--plugins/IEHistory/IEHistory/services.h32
-rw-r--r--plugins/IEHistory/IEHistory/stdafx.cpp25
-rw-r--r--plugins/IEHistory/IEHistory/stdafx.h47
-rw-r--r--plugins/IEHistory/IEHistory/utils.cpp330
-rw-r--r--plugins/IEHistory/IEHistory/utils.h97
-rw-r--r--plugins/IEHistory/IEHistory/version.apsbin0 -> 19956 bytes
-rw-r--r--plugins/IEHistory/IEHistory/version.h53
-rw-r--r--plugins/IEHistory/IEHistory/version.rc100
-rw-r--r--plugins/IEHistory/docs/IEHistory_readme.txt121
-rw-r--r--plugins/IEHistory/files_release.txt2
-rw-r--r--plugins/IEHistory/files_source.txt4
-rw-r--r--plugins/IEHistory/history.icobin0 -> 2238 bytes
-rw-r--r--plugins/IEHistory/pack source.bat8
-rw-r--r--plugins/IEHistory/pack symbols.bat8
-rw-r--r--plugins/IEHistory/pack.bat10
-rw-r--r--plugins/IEHistory/symbols_exclude.txt1
33 files changed, 2859 insertions, 0 deletions
diff --git a/plugins/IEHistory/IEHistory.sln b/plugins/IEHistory/IEHistory.sln
new file mode 100644
index 0000000000..a9ac33420a
--- /dev/null
+++ b/plugins/IEHistory/IEHistory.sln
@@ -0,0 +1,26 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IEHistory", "IEHistory\IEHistory.vcproj", "{7F5EA8BC-8F2B-478E-8F05-0ED4B691B776}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug UNICODE|Win32 = Debug UNICODE|Win32
+ Debug|Win32 = Debug|Win32
+ Release UNICODE|Win32 = Release UNICODE|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {7F5EA8BC-8F2B-478E-8F05-0ED4B691B776}.Debug UNICODE|Win32.ActiveCfg = Debug UNICODE|Win32
+ {7F5EA8BC-8F2B-478E-8F05-0ED4B691B776}.Debug UNICODE|Win32.Build.0 = Debug UNICODE|Win32
+ {7F5EA8BC-8F2B-478E-8F05-0ED4B691B776}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7F5EA8BC-8F2B-478E-8F05-0ED4B691B776}.Debug|Win32.Build.0 = Debug|Win32
+ {7F5EA8BC-8F2B-478E-8F05-0ED4B691B776}.Release UNICODE|Win32.ActiveCfg = Release UNICODE|Win32
+ {7F5EA8BC-8F2B-478E-8F05-0ED4B691B776}.Release UNICODE|Win32.Build.0 = Release UNICODE|Win32
+ {7F5EA8BC-8F2B-478E-8F05-0ED4B691B776}.Release|Win32.ActiveCfg = Release|Win32
+ {7F5EA8BC-8F2B-478E-8F05-0ED4B691B776}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/plugins/IEHistory/IEHistory.suo b/plugins/IEHistory/IEHistory.suo
new file mode 100644
index 0000000000..507be3ffb8
--- /dev/null
+++ b/plugins/IEHistory/IEHistory.suo
Binary files differ
diff --git a/plugins/IEHistory/IEHistory/IEHistory.aps b/plugins/IEHistory/IEHistory/IEHistory.aps
new file mode 100644
index 0000000000..549106e9ea
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/IEHistory.aps
Binary files differ
diff --git a/plugins/IEHistory/IEHistory/IEHistory.cpp b/plugins/IEHistory/IEHistory/IEHistory.cpp
new file mode 100644
index 0000000000..33e892992f
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/IEHistory.cpp
@@ -0,0 +1,131 @@
+/*
+IEView history viewer plugin for Miranda IM
+
+Copyright © 2005-2006 Cristian Libotean
+
+This program 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 2
+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, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#include "stdafx.h"
+
+#include "commonheaders.h"
+#include "services.h"
+
+char ModuleName[] = "IEHistory";
+HICON hIcon;
+HINSTANCE hInstance;
+HANDLE hOpenWindowsList = NULL;
+
+PLUGINLINK *pluginLink;
+
+HMODULE hUxTheme = 0;
+BOOL (WINAPI *MyEnableThemeDialogTexture)(HANDLE, DWORD) = NULL;
+
+#ifdef _UNICODE
+#define IEHISTORY_PLUGININFO_SUFFIX " (Unicode)"
+#else
+#define IEHISTORY_PLUGININFO_SUFFIX ""
+#endif
+
+PLUGININFOEX pluginInfo = {
+ sizeof(PLUGININFOEX),
+ __PLUGIN_DISPLAY_NAME,
+ VERSION,
+ __DESC,
+ __AUTHOR,
+ __AUTHOREMAIL,
+ __COPYRIGHT,
+ __AUTHORWEB,
+ UNICODE_AWARE,
+ DEFMOD_UIHISTORY,
+#ifdef _UNICODE
+ {0x2f093b88, 0xf389, 0x44f1, {0x9e, 0x2a, 0x37, 0xc2, 0x91, 0x94, 0x20, 0x3a}} //{2f093b88-f389-44f1-9e2a-37c29194203a}
+#else
+ {0x2f997250, 0xbc2f, 0x46f0, {0xa3, 0x3e, 0x65, 0xf0, 0x62, 0x83, 0xbe, 0x5d}} //{2f997250-bc2f-46f0-a33e-65f06283be5d}
+#endif
+};
+
+OLD_MIRANDAPLUGININFO_SUPPORT;
+
+extern "C" __declspec(dllexport) PLUGININFOEX *MirandaPluginInfoEx(DWORD mirandaVersion)
+{
+ Log("%s", "Entering function " __FUNCTION__);
+ Log("%s", "Leaving function " __FUNCTION__);
+ return &pluginInfo;
+}
+
+static const MUUID interfaces[] = {MIID_UIHISTORY, MIID_LAST};
+
+extern "C" __declspec(dllexport) const MUUID *MirandaPluginInterfaces()
+{
+ return interfaces;
+}
+
+#include <commctrl.h>
+
+extern "C" int __declspec(dllexport) Load(PLUGINLINK *link)
+{
+ INITCOMMONCONTROLSEX icex;
+
+ icex.dwSize = sizeof(icex);
+ icex.dwICC = ICC_DATE_CLASSES;
+
+ InitCommonControlsEx(&icex);
+
+ if((hUxTheme = LoadLibraryA("uxtheme.dll")) != 0)
+ {
+ MyEnableThemeDialogTexture = (BOOL (WINAPI *)(HANDLE, DWORD))GetProcAddress(hUxTheme, "EnableThemeDialogTexture");
+ }
+
+ Log("%s", "Entering function " __FUNCTION__);
+ pluginLink = link;
+ //all initialization here
+ hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_HISTORYICON));
+ InitializeMirandaMemFunctions();
+
+ Log("%s", "Creating service functions ...");
+ InitServices();
+
+ Log("%s", "Hooking events ...");
+ HookEvents();
+ Log("%s", "Leaving function " __FUNCTION__);
+ return 0;
+}
+
+extern "C" int __declspec(dllexport) Unload()
+{
+ Log("%s", "Entering function " __FUNCTION__);
+ Log("%s", "Unhooking events ...");
+
+ Log("%s", "Destroying service functions ...");
+ DestroyServices();
+
+ Log("%s", "Closing all open windows ...");
+ WindowList_Broadcast(hOpenWindowsList, WM_CLOSE, 0, 0);
+
+ Log("%s", "Leaving function " __FUNCTION__);
+ return 0;
+}
+
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
+{
+ hInstance = hinstDLL;
+ if (fdwReason == DLL_PROCESS_ATTACH)
+ {
+ DisableThreadLibraryCalls(hinstDLL);
+ LogInit();
+ }
+ return TRUE;
+}
diff --git a/plugins/IEHistory/IEHistory/IEHistory.rc b/plugins/IEHistory/IEHistory/IEHistory.rc
new file mode 100644
index 0000000000..91354d63a3
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/IEHistory.rc
@@ -0,0 +1,162 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_HISTORY DIALOGEX 0, 0, 416, 313
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
+EXSTYLE WS_EX_APPWINDOW
+CAPTION "Dialog"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ PUSHBUTTON "Close",IDC_CLOSE,362,283,50,14
+ CONTROL "",IDC_IEVIEW_PLACEHOLDER,"Static",SS_BLACKFRAME,4,4,408,275,WS_EX_TRANSPARENT
+ PUSHBUTTON "&Prev",IDC_PREV,4,283,50,14
+ PUSHBUTTON "&Next",IDC_NEXT,58,283,50,14
+ PUSHBUTTON "&Search",IDC_SEARCH,310,283,50,14
+END
+
+IDD_OPT_HISTORY DIALOGEX 0, 0, 252, 119
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CONTROL | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Dialog"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ GROUPBOX "Number of events to load",IDC_EVENTSNO_GROUPBOX,7,7,238,68
+ CONTROL "Load all events",IDC_LOAD_ALL,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,15,22,224,10
+ CONTROL "Load only ",IDC_LOAD_NUMBER,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,15,35,79,10
+ EDITTEXT IDC_EVENTS_COUNT,96,33,40,14,ES_AUTOHSCROLL | ES_NUMBER
+ LTEXT "events per page.",IDC_LOAD_NUMBER_STATIC,143,36,96,8
+ CONTROL "Show last page first",IDC_SHOW_LAST_FIRST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,49,214,10
+ GROUPBOX "Other options",IDC_MISC_GROUPBOX,7,79,238,33
+ CONTROL "Load items in background",IDC_LOAD_BACKGROUND,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,15,63,223,10
+ CONTROL "RTL is default text direction.",IDC_ENABLE_RTL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,94,221,10
+END
+
+IDD_SEARCH DIALOGEX 0, 0, 210, 82
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Search"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ EDITTEXT IDC_SEARCH_TEXT,39,30,155,15,ES_AUTOHSCROLL
+ DEFPUSHBUTTON "&Find next",IDC_FIND_NEXT,99,64,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,153,64,50,14
+ CONTROL "",IDC_TABS,"SysTabControl32",0x0,7,7,196,48
+ CONTROL "Text :",IDC_SEARCH_TEXT_STATIC,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,14,33,24,8,WS_EX_TRANSPARENT
+ GROUPBOX "Direction",IDC_DIRECTION_GROUPBOX,7,57,88,21
+ CONTROL "Up",IDC_DIRECTION_UP,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,9,65,34,10
+ CONTROL "Down",IDC_DIRECTION_DOWN,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,47,65,45,10
+ CONTROL "",IDC_SEARCH_DATE,"SysDateTimePick32",DTS_RIGHTALIGN | DTS_SHOWNONE | NOT WS_VISIBLE | WS_TABSTOP,111,30,83,15
+ CONTROL "",IDC_SEARCH_TIME,"SysDateTimePick32",DTS_RIGHTALIGN | DTS_UPDOWN | DTS_SHOWNONE | NOT WS_VISIBLE | WS_TABSTOP | 0x8,39,30,69,15
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO
+BEGIN
+ IDD_HISTORY, DIALOG
+ BEGIN
+ LEFTMARGIN, 4
+ RIGHTMARGIN, 412
+ TOPMARGIN, 4
+ BOTTOMMARGIN, 309
+ HORZGUIDE, 283
+ END
+
+ IDD_OPT_HISTORY, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 245
+ VERTGUIDE, 15
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 112
+ END
+
+ IDD_SEARCH, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 203
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 78
+ HORZGUIDE, 75
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_HISTORYICON ICON "history.ico"
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/plugins/IEHistory/IEHistory/IEHistory.vcproj b/plugins/IEHistory/IEHistory/IEHistory.vcproj
new file mode 100644
index 0000000000..cb488a940f
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/IEHistory.vcproj
@@ -0,0 +1,465 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="IEHistory"
+ ProjectGUID="{7F5EA8BC-8F2B-478E-8F05-0ED4B691B776}"
+ RootNamespace="IEHistory"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="..\..\..\..\cvs\test miranda\Plugins"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;_USRDLL;IEHISTORY_EXPORTS;_USE_32BIT_TIME_T"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ BrowseInformation="1"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="comctl32.lib"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ BaseAddress="0x2F020000"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="0"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;_USRDLL;IEHISTORY_EXPORTS;_USE_32BIT_TIME_T"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="comctl32.lib"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ BaseAddress="0x2F040000"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release UNICODE|Win32"
+ OutputDirectory="Release UNICODE"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;_USRDLL;IEHISTORY_EXPORTS;_USE_32BIT_TIME_T"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="comctl32.lib"
+ OutputFile="$(OutDir)\IEHistoryW.dll"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ BaseAddress="0x2F040000"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug UNICODE|Win32"
+ OutputDirectory="..\..\..\..\cvs\test miranda unicode\Plugins"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;_USRDLL;IEHISTORY_EXPORTS;_USE_32BIT_TIME_T"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="comctl32.lib"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ BaseAddress="0x2F020000"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\dlgHandlers.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\events.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\IEHistory.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\mirandaMem.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\services.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\stdafx.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release UNICODE|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug UNICODE|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\utils.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath=".\commonheaders.h"
+ >
+ </File>
+ <File
+ RelativePath=".\dlgHandlers.h"
+ >
+ </File>
+ <File
+ RelativePath=".\events.h"
+ >
+ </File>
+ <File
+ RelativePath=".\mirandaMem.h"
+ >
+ </File>
+ <File
+ RelativePath=".\resource.h"
+ >
+ </File>
+ <File
+ RelativePath=".\services.h"
+ >
+ </File>
+ <File
+ RelativePath=".\stdafx.h"
+ >
+ </File>
+ <File
+ RelativePath=".\utils.h"
+ >
+ </File>
+ <File
+ RelativePath=".\version.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ <File
+ RelativePath=".\history.ico"
+ >
+ </File>
+ <File
+ RelativePath=".\IEHistory.rc"
+ >
+ </File>
+ <File
+ RelativePath=".\version.rc"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\docs\IEHistory_readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/plugins/IEHistory/IEHistory/commonheaders.h b/plugins/IEHistory/IEHistory/commonheaders.h
new file mode 100644
index 0000000000..e687a27f02
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/commonheaders.h
@@ -0,0 +1,84 @@
+/*
+IEView history viewer plugin for Miranda IM
+
+Copyright © 2005-2006 Cristian Libotean
+
+This program 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 2
+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, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#ifndef M_COMMON_HEADERS_H
+#define M_COMMON_HEADERS_H
+
+
+#define EVENTTYPE_STATUS 25368 //tabsrmm status events
+
+#include "stdafx.h"
+#include <malloc.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <uxtheme.h>
+
+#include "resource.h"
+#include "version.h"
+
+#include "utils.h"
+#include "mirandaMem.h"
+#include "events.h"
+#include "dlgHandlers.h"
+
+#include "../../../include/newpluginapi.h"
+#include "../../../include/m_database.h"
+#include "../../../include/m_utils.h"
+#include "../../../include/m_system.h"
+#include "../../../include/m_skin.h"
+#include "../../../include/m_options.h"
+#include "../../../include/m_clist.h"
+#include "../../../include/m_langpack.h"
+#include "../../../include/m_history.h"
+#include "../../../include/m_contacts.h"
+//#include "../../../include/m_utils.h"
+#include "../../../include/m_popup.h"
+#include "../../../include/m_ieview.h"
+#include "../../../include/m_updater.h"
+
+
+extern HICON hIcon; //history icon
+extern char ModuleName[];
+extern HINSTANCE hInstance; //dll instance
+extern HANDLE hOpenWindowsList;
+
+extern PLUGININFOEX pluginInfo;
+
+extern BOOL (WINAPI *MyEnableThemeDialogTexture)(HANDLE, DWORD);
+
+#define OLD_MIRANDAPLUGININFO_SUPPORT PLUGININFO oldPluginInfo = { \
+ sizeof(PLUGININFO), \
+ pluginInfo.shortName, \
+ pluginInfo.version, \
+ pluginInfo.description, \
+ pluginInfo.author, \
+ pluginInfo.authorEmail, \
+ pluginInfo.copyright, \
+ pluginInfo.homepage, \
+ pluginInfo.flags, \
+ pluginInfo.replacesDefaultModule \
+}; \
+\
+extern "C" __declspec(dllexport) PLUGININFO *MirandaPluginInfo(DWORD mirandaVersion) \
+{ \
+ return &oldPluginInfo; \
+}
+
+#endif \ No newline at end of file
diff --git a/plugins/IEHistory/IEHistory/dlgHandlers.cpp b/plugins/IEHistory/IEHistory/dlgHandlers.cpp
new file mode 100644
index 0000000000..a9d4734abe
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/dlgHandlers.cpp
@@ -0,0 +1,798 @@
+/*
+IEView history viewer plugin for Miranda IM
+
+Copyright © 2005-2006 Cristian Libotean
+
+This program 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 2
+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, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#include "dlgHandlers.h"
+#include "math.h"
+#include <commctrl.h>
+
+#define GAP_SIZE 2
+#define MIN_HISTORY_WIDTH 350
+#define MIN_HISTORY_HEIGHT 100
+
+struct WorkerThreadData{
+ HWND hWnd;
+ HistoryWindowData *data;
+ IEVIEWEVENT ieEvent;
+};
+
+int LoadName(HWND hWnd);
+int CalcIEViewPos(IEVIEWWINDOW *ieWnd, HWND hMainWindow);
+int LoadIEView(HWND hWnd);
+int MoveIEView(HWND hWnd);
+int DestroyIEView(HWND hWnd);
+int LoadEvents(HWND hWnd);
+int LoadPage(HWND hWnd, HANDLE hFirstEvent, long index, long shiftCount, long readCount, int direction);
+int LoadNext(HWND hWnd);
+int LoadPrev(HWND hWnd);
+int ScrollToBottom(HWND hWnd);
+
+void RefreshButtonStates(HWND hWnd);
+
+HANDLE GetNeededEvent(HANDLE hLastFirstEvent, int index, int direction);
+
+int CalcIEViewPos(IEVIEWWINDOW *ieWnd, HWND hMainWindow)
+{
+ RECT rect;
+ GetWindowRect(GetDlgItem(hMainWindow, IDC_IEVIEW_PLACEHOLDER), &rect);
+ ScreenToClient(hMainWindow, &rect);
+
+ ieWnd->x = rect.left + GAP_SIZE;
+ ieWnd->y = rect.top + GAP_SIZE;
+ ieWnd->cx = rect.right - rect.left - (2 * GAP_SIZE);
+ ieWnd->cy = rect.bottom - rect.top - (2 * GAP_SIZE);
+ return 0;
+}
+
+int LoadName(HWND hWnd)
+{
+ HistoryWindowData *data = (HistoryWindowData *) GetWindowLong(hWnd, DWL_USER);
+ HANDLE hEvent = (HANDLE) CallService(MS_DB_EVENT_FINDFIRST, (WPARAM) data->hContact, 0);
+ DBEVENTINFO event = {0};
+ event.cbSize = sizeof(event);
+ CallService(MS_DB_EVENT_GET, (WPARAM) hEvent, (LPARAM) &event); //to get the protocol
+ TCHAR *szOther = GetContactName(data->hContact, event.szModule);
+ TCHAR buffer[1024];
+ _sntprintf(buffer, 1024, _T("%s: IEHistory"), szOther);
+ SetWindowText(hWnd, buffer);
+ free(szOther);
+ return 0;
+}
+
+int LoadIEView(HWND hWnd)
+{
+ IEVIEWWINDOW ieWnd = {0};
+ ieWnd.cbSize = sizeof(ieWnd);
+ ieWnd.iType = IEW_CREATE;
+ ieWnd.dwMode = IEWM_HISTORY;
+ ieWnd.dwFlags = 0;
+ ieWnd.parent = hWnd;
+ CalcIEViewPos(&ieWnd, hWnd);
+
+ CallService(MS_IEVIEW_WINDOW, 0, (LPARAM) &ieWnd);
+ HistoryWindowData *data = (HistoryWindowData *) GetWindowLong(hWnd, DWL_USER);
+ data->hIEView = ieWnd.hwnd;
+ SetWindowPos(GetDlgItem(hWnd, IDC_IEVIEW_PLACEHOLDER), HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
+ //ShowWindow(GetDlgItem(hWnd, IDC_IEVIEW_PLACEHOLDER), SW_HIDE);
+ return 0;
+}
+
+int MoveIeView(HWND hWnd)
+{
+ HistoryWindowData *data = (HistoryWindowData *) GetWindowLong(hWnd, DWL_USER);
+ if (data)
+ {
+ IEVIEWWINDOW ieWnd = {0};
+ ieWnd.cbSize = sizeof(ieWnd);
+ ieWnd.parent = hWnd;
+ ieWnd.hwnd = data->hIEView;
+ ieWnd.iType = IEW_SETPOS;
+ CalcIEViewPos(&ieWnd, hWnd);
+ CallService(MS_IEVIEW_WINDOW, 0, (LPARAM) &ieWnd);
+ }
+ return 0;
+}
+
+int DestroyIEView(HWND hWnd)
+{
+ HistoryWindowData *data = (HistoryWindowData *) GetWindowLong(hWnd, DWL_USER);
+ IEVIEWWINDOW ieWnd = {0};
+ ieWnd.cbSize = sizeof(ieWnd);
+ ieWnd.parent = hWnd;
+ ieWnd.hwnd = data->hIEView;
+ ieWnd.iType = IEW_DESTROY;
+ CallService(MS_IEVIEW_WINDOW, 0, (LPARAM) &ieWnd);
+ return 0;
+}
+
+void FillIEViewInfo(IEVIEWEVENTDATA *fillData, DBEVENTINFO dbInfo, PBYTE blob)
+{
+ switch (dbInfo.eventType)
+ {
+ case EVENTTYPE_MESSAGE:
+ fillData->iType = IEED_EVENT_MESSAGE;
+ break;
+ case EVENTTYPE_STATUS:
+ fillData->iType = IEED_EVENT_STATUSCHANGE;
+ break;
+ case EVENTTYPE_FILE:
+ fillData->iType = IEED_EVENT_FILE;
+ break;
+ case EVENTTYPE_URL:
+ fillData->iType = IEED_EVENT_URL;
+ break;
+ }
+ fillData->pszNick = "<nick here>";
+ fillData->bIsMe = (dbInfo.flags & DBEF_SENT);
+ fillData->dwFlags = (dbInfo.flags & DBEF_SENT) ? IEEDF_SENT : 0;
+ fillData->time = dbInfo.timestamp;
+ unsigned int len = strlen((char *) blob) + 1;
+ PBYTE pos;
+
+ fillData->pszText = (char *) blob;
+// fillData.pszText2 = (char *) blob;
+ if (len < dbInfo.cbBlob)
+ {
+ pos = blob + len;
+ fillData->pszTextW = (wchar_t *) pos;
+// fillData->pszText2W = (wchar_t *) pos;
+ fillData->dwFlags |= IEEDF_UNICODE_TEXT;
+ }
+}
+
+DWORD WINAPI WorkerThread(LPVOID lpvData)
+{
+ Log("%s", "Inside worker thread ...");
+ WorkerThreadData *data = (WorkerThreadData *) lpvData;
+ EnableWindow(GetDlgItem(data->hWnd, IDC_CLOSE), FALSE);
+ const int LOAD_COUNT = 10;
+ int count = 0;
+ int target = data->ieEvent.count;
+ int cLoad = LOAD_COUNT;
+ int i;
+ IEVIEWEVENT ieEvent = {0};
+ IEVIEWEVENTDATA ieData[LOAD_COUNT] = {0};
+ PBYTE messages[LOAD_COUNT] = {0};
+ HANDLE dbEvent = data->ieEvent.hDbEventFirst;
+ for (i = 0; i < LOAD_COUNT; i++)
+ {
+ ieData[i].cbSize = sizeof(IEVIEWEVENTDATA); //set the cbsize here, no need to do it every time
+ ieData[i].next = &ieData[i + 1]; //it's a vector, so v[i]'s next element is v[i + 1]
+ }
+ ieData[LOAD_COUNT - 1].next = NULL;
+ ieEvent = data->ieEvent;
+ ieEvent.iType = IEE_LOG_MEM_EVENTS;
+ ieEvent.eventData = ieData;
+ DBEVENTINFO dbInfo = {0};
+ dbInfo.cbSize = sizeof(DBEVENTINFO);
+ PBYTE buffer = NULL;
+ int newSize, oldSize = 0;
+ while (count < target)
+ {
+ cLoad = (count + LOAD_COUNT > target) ? target - count : LOAD_COUNT;
+ ieEvent.count = -1;
+
+ for (i = 0; i < cLoad; i++)
+ {
+ newSize = CallService(MS_DB_EVENT_GETBLOBSIZE, (WPARAM) dbEvent, 0);
+ if (newSize > oldSize)
+ {
+ buffer = (PBYTE) realloc(buffer, newSize);
+ dbInfo.pBlob = buffer;
+ oldSize = newSize;
+ }
+ messages[i] = (PBYTE) realloc(messages[i], newSize);
+ dbInfo.cbBlob = newSize;
+ if (!CallService(MS_DB_EVENT_GET, (WPARAM) dbEvent, (LPARAM) &dbInfo))
+ {
+ memmove(messages[i], dbInfo.pBlob, newSize);
+ FillIEViewInfo(&ieData[i], dbInfo, messages[i]);
+ }
+ //FillIEViewEventData(&ieData[i], dbEvent);
+ dbEvent = (HANDLE) CallService(MS_DB_EVENT_FINDNEXT, (WPARAM) dbEvent, 0);
+ }
+ ieData[cLoad - 1].next = NULL; //cLoad < LOAD_COUNT will only happen once, at the end
+ CallService(MS_IEVIEW_EVENT, 0, (LPARAM) &ieEvent);
+ count += cLoad;
+ }
+ for (i = 0; i < LOAD_COUNT; i++)
+ {
+ free(messages[i]);
+ }
+ free(buffer);
+ EnableWindow(GetDlgItem(data->hWnd, IDC_CLOSE), TRUE);
+ free(data);
+ //RefreshButtonStates(data->hWnd);
+ Log("%s", "WorkerThread finished ... returning");
+ return 0;
+}
+
+int DoLoadEvents(HWND hWnd, HistoryWindowData *data, IEVIEWEVENT ieEvent)
+{
+ ieEvent.iType = IEE_CLEAR_LOG;
+ CallService(MS_IEVIEW_EVENT, 0, (LPARAM) &ieEvent);
+ if (data->loadMethod == LOAD_IN_BACKGROUND)
+ {
+ WorkerThreadData *threadData = (WorkerThreadData *) malloc(sizeof(WorkerThreadData));
+ threadData->data = data;
+ threadData->hWnd = hWnd;
+ threadData->ieEvent = ieEvent;
+ WorkerThread(threadData);
+ /*
+ DWORD threadID;
+ HANDLE thread = CreateThread(NULL, 0, WorkerThread, threadData, 0, &threadID);
+ if (!thread)
+ {
+ MessageBox(hWnd, TranslateT("An error occured while trying to create the worker thread (%m)"), TranslateT("Error"), MB_OK | MB_ICONERROR);
+ } */
+ }
+ else{
+ ieEvent.iType = IEE_LOG_DB_EVENTS;
+ CallService(MS_IEVIEW_EVENT, 0, (LPARAM) &ieEvent);
+ ScrollToBottom(hWnd);
+
+ TCHAR buffer[256];
+ _itot(data->index + 1, buffer, 10);
+ SendDlgItemMessage(hWnd, IDC_STATUSBAR, SB_SETTEXT, 0 | SBT_POPOUT, (LPARAM) buffer);
+ _itot(data->index + ieEvent.count, buffer, 10);
+ SendDlgItemMessage(hWnd, IDC_STATUSBAR, SB_SETTEXT, 1 | SBT_POPOUT, (LPARAM) buffer);
+ _itot(data->count, buffer, 10);
+ SendDlgItemMessage(hWnd, IDC_STATUSBAR, SB_SETTEXT, 3 | SBT_POPOUT, (LPARAM) buffer);
+ RefreshButtonStates(hWnd);
+ }
+ return 0;
+}
+
+int LoadEvents(HWND hWnd)
+{
+ HistoryWindowData *data = (HistoryWindowData *) GetWindowLong(hWnd, DWL_USER);
+ int count = CallService(MS_DB_EVENT_GETCOUNT, (WPARAM) data->hContact, 0);
+ int bLastFirst = DBGetContactSettingByte(NULL, ModuleName, "ShowLastPageFirst", 0);
+ int bRTL = DBGetContactSettingByte(NULL, ModuleName, "EnableRTL", 0);
+ bRTL = DBGetContactSettingByte(data->hContact, "Tab_SRMsg", "RTL", bRTL);
+ data->bEnableRTL = bRTL;
+ data->count = count;
+ if (data->itemsPerPage > count)
+ {
+ data->itemsPerPage = count;
+ }
+ IEVIEWEVENT ieEvent = {0};
+ ieEvent.cbSize = sizeof(ieEvent);
+ ieEvent.hwnd = data->hIEView;
+ ieEvent.hContact = data->hContact;
+ ieEvent.count = (data->itemsPerPage <= 0) ? count : data->itemsPerPage;
+
+ HANDLE hFirstEvent = (HANDLE) CallService(MS_DB_EVENT_FINDFIRST, (WPARAM) data->hContact, 0);
+ int index = 0;
+ if ((data->itemsPerPage > 0) && (bLastFirst))
+ {
+ index = data->count - data->itemsPerPage;
+ hFirstEvent = GetNeededEvent(hFirstEvent, index, DIRECTION_FORWARD);
+ }
+ data->index = index;
+ data->hLastFirstEvent = hFirstEvent;
+ ieEvent.hDbEventFirst = hFirstEvent;
+ if (data->bEnableRTL)
+ {
+ ieEvent.dwFlags |= IEEF_RTL;
+ }
+ DoLoadEvents(hWnd, data, ieEvent);
+ return 0;
+}
+
+int LoadPage(HWND hWnd, HANDLE hFirstEvent, long index, long shiftCount, long readCount, int direction)
+{
+ HistoryWindowData *data = (HistoryWindowData *) GetWindowLong(hWnd, DWL_USER);
+ int count = shiftCount;
+ int newIndex = index;
+ IEVIEWEVENT ieEvent = {0};
+ ieEvent.cbSize = sizeof(ieEvent);
+ ieEvent.hwnd = data->hIEView;
+ ieEvent.hContact = data->hContact;
+
+ if (direction == DIRECTION_BACK)
+ {
+ newIndex -= shiftCount;
+ if (newIndex < 0)
+ {
+ newIndex = 0;
+ count = index;
+ }
+ }
+ else{
+ newIndex += shiftCount;
+ if (newIndex + readCount > data->count)
+ {
+ count = data->count - newIndex;
+ newIndex = data->count - readCount;
+ }
+ }
+ data->index = newIndex;
+ HANDLE hEvent = GetNeededEvent(hFirstEvent, count, direction);
+ data->hLastFirstEvent = hEvent;
+ ieEvent.hDbEventFirst = hEvent;
+ ieEvent.count = readCount;
+ if (data->bEnableRTL)
+ {
+ ieEvent.dwFlags |= IEEF_RTL;
+ }
+ DoLoadEvents(hWnd, data, ieEvent);
+ return 0;
+}
+
+int LoadPrev(HWND hWnd)
+{
+ HistoryWindowData *data = (HistoryWindowData *) GetWindowLong(hWnd, DWL_USER);
+ LoadPage(hWnd, data->hLastFirstEvent, data->index, data->itemsPerPage, data->itemsPerPage, DIRECTION_BACK);
+ int finish = data->index <= 0;
+ return finish;
+}
+
+int LoadNext(HWND hWnd)
+{
+ HistoryWindowData *data = (HistoryWindowData *) GetWindowLong(hWnd, DWL_USER);
+ LoadPage(hWnd, data->hLastFirstEvent, data->index, data->itemsPerPage, data->itemsPerPage, DIRECTION_FORWARD);
+ int finish = data->index + data->itemsPerPage >= data->count;
+ return finish;
+}
+
+int ScrollToBottom(HWND hWnd)
+{
+ HistoryWindowData *data = (HistoryWindowData *) GetWindowLong(hWnd, DWL_USER);
+ IEVIEWWINDOW ieWnd = {0};
+ ieWnd.cbSize = sizeof(ieWnd);
+ ieWnd.iType = IEW_SCROLLBOTTOM;
+ ieWnd.hwnd = data->hIEView;
+ ieWnd.parent = hWnd;
+ CallService(MS_IEVIEW_WINDOW, 0, (LPARAM) &ieWnd);
+ return 0;
+}
+
+void AddAnchorWindowToDeferList(HDWP &hdWnds, HWND window, RECT *rParent, WINDOWPOS *wndPos, int anchors)
+{
+ RECT rChild = AnchorCalcPos(window, rParent, wndPos, anchors);
+ hdWnds = DeferWindowPos(hdWnds, window, HWND_NOTOPMOST, rChild.left, rChild.top, rChild.right - rChild.left, rChild.bottom - rChild.top, SWP_NOZORDER);
+}
+
+void RefreshButtonStates(HWND hWnd)
+{
+ HistoryWindowData *data = (HistoryWindowData *) GetWindowLong(hWnd, DWL_USER);
+ int bPrev = data->index > 0;
+ int bNext = data->index + data->itemsPerPage < data->count;
+ EnableWindow(GetDlgItem(hWnd, IDC_PREV), bPrev);
+ EnableWindow(GetDlgItem(hWnd, IDC_NEXT), bNext);
+}
+
+
+
+BOOL CALLBACK HistoryDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch (msg)
+ {
+ case WM_INITDIALOG:
+ {
+ Log("Inside WM_INITDIALOG ...");
+ TranslateDialogDefault(hWnd);
+ SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM) hIcon);
+ //SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
+ int bRTL = DBGetContactSettingByte(NULL, ModuleName, "EnableRTL", 0);
+ if (bRTL)
+ {
+ SetWindowLong(hWnd, GWL_EXSTYLE, WS_EX_RTLREADING);
+ }
+ //InitCommonControls();
+ HWND hStatusBar = CreateWindow(STATUSCLASSNAME, //class
+ _T("-"), //title
+ WS_CHILD | WS_VISIBLE | SBARS_TOOLTIPS | SBARS_SIZEGRIP, //style
+ 0, 0, //x, y
+ 0, 0, //width, height
+ hWnd, //parent
+ (HMENU) IDC_STATUSBAR, //menu
+ hInstance, //instance
+ NULL); //lpParam
+ int x;
+ int widths[] = {x = 50, x += 50, x += 150, -1};
+ int count = sizeof(widths) / sizeof(widths[0]);
+ SendMessage(hStatusBar, SB_SETPARTS, count, (LPARAM) widths);
+ //SendMessage(hStatusBar, SB_SETTIPTEXT, 1, (LPARAM) TranslateT("First event shown in page"));
+ //SendMessage(hStatusBar, SB_SETTIPTEXT, 2, (LPARAM) TranslateT("Last event shown in page"));
+ SendMessage(hStatusBar, SB_SETTEXT, 2 | SBT_POPOUT, (LPARAM) TranslateT("Out of a total of"));
+ return TRUE;
+ break;
+ }
+ case WM_SHOWWINDOW:
+ {
+ Log("Inside WM_SHOWWINDOW ...");
+ LoadName(hWnd);
+ LoadIEView(hWnd);
+ LoadEvents(hWnd);
+
+ HistoryWindowData *data = (HistoryWindowData *) GetWindowLong(hWnd, DWL_USER);
+ bool bAll = (data->itemsPerPage <= 0) || (data->itemsPerPage >= data->count);
+ int bLastFirst = DBGetContactSettingByte(NULL, ModuleName, "ShowLastPageFirst", 0);
+ if (!bLastFirst)
+ {
+ EnableWindow(GetDlgItem(hWnd, IDC_PREV), FALSE);
+ EnableWindow(GetDlgItem(hWnd, IDC_NEXT), !bAll);
+ }
+ else{
+ EnableWindow(GetDlgItem(hWnd, IDC_PREV), !bAll);
+ EnableWindow(GetDlgItem(hWnd, IDC_NEXT), FALSE);
+ }
+ //ShowWindow(GetDlgItem(hWnd, IDC_PAGE_NUMBER), !bAll);
+ EnableWindow(GetDlgItem(hWnd, IDC_SEARCH), !bAll);
+
+ break;
+ }
+ case WM_DESTROY:
+ {
+ HistoryWindowData *data = (HistoryWindowData *) GetWindowLong(hWnd, DWL_USER);
+ DestroyIEView(hWnd);
+ free(data);
+ WindowList_Remove(hOpenWindowsList, hWnd);
+ break;
+ }
+ case WM_CLOSE:
+ {
+ if (IsWindowEnabled(GetDlgItem(hWnd, IDC_CLOSE)))
+ {
+ DestroyWindow(hWnd);
+ }
+ else{
+ MessageBox(hWnd, TranslateT("You can't close the window now, wait for all events to load."), TranslateT("Error"), MB_OK | MB_ICONERROR);
+ }
+ break;
+ }
+ case WM_WINDOWPOSCHANGING:
+ {
+ HDWP hdWnds = BeginDeferWindowPos(6);
+ RECT rParent;
+ HWND hStatusBar = GetDlgItem(hWnd, IDC_STATUSBAR);
+ WINDOWPOS *wndPos = (WINDOWPOS *) lParam;
+ GetWindowRect(hWnd, &rParent);
+
+ //hdWnds = DeferWindowPos(hdWnds, hStatusBar, HWND_NOTOPMOST, wndPos->x, wndPos->y + wndPos->cy - statusHeight, statusWidth, statusHeight, SWP_NOZORDER);
+ SendMessage(hStatusBar, WM_SIZE, 0, 0);
+ if (wndPos->cx < MIN_HISTORY_WIDTH)
+ {
+ wndPos->cx = MIN_HISTORY_WIDTH;
+ }
+ if (wndPos->cy < MIN_HISTORY_HEIGHT)
+ {
+ wndPos->cy = MIN_HISTORY_HEIGHT;
+ }
+ //MoveWindow(hStatusBar, wndPos->x, wndPos->y + wndPos->cy - statusHeight - 2, statusWidth - 2, statusHeight, TRUE);
+ AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_STATUSBAR), &rParent, wndPos, ANCHOR_BOTTOM);
+ AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_CLOSE), &rParent, wndPos, ANCHOR_RIGHT | ANCHOR_BOTTOM);
+ AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_IEVIEW_PLACEHOLDER), &rParent, wndPos, ANCHOR_ALL);
+ AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_PREV), &rParent, wndPos, ANCHOR_LEFT | ANCHOR_BOTTOM);
+ AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_NEXT), &rParent, wndPos, ANCHOR_LEFT | ANCHOR_BOTTOM);
+ //AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_PAGE_NUMBER), &rParent, wndPos, ANCHOR_LEFT | ANCHOR_BOTTOM);
+ AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_SEARCH), &rParent, wndPos, ANCHOR_RIGHT | ANCHOR_BOTTOM);
+
+ EndDeferWindowPos(hdWnds);
+ MoveIeView(hWnd);
+ break;
+ }
+ case WM_COMMAND:
+ {
+ switch (LOWORD(wParam))
+ {
+ case IDC_CLOSE:
+ {
+ SendMessage(hWnd, WM_CLOSE, 0, 0);
+ break;
+ }
+ case IDC_PREV:
+ {
+ int finished = LoadPrev(hWnd);
+ //EnableWindow(GetDlgItem(hWnd, IDC_PREV), !finished);
+ //EnableWindow(GetDlgItem(hWnd, IDC_NEXT), TRUE);
+ break;
+ }
+ case IDC_NEXT:
+ {
+ int finished = LoadNext(hWnd);
+ //EnableWindow(GetDlgItem(hWnd, IDC_NEXT), !finished);
+ //EnableWindow(GetDlgItem(hWnd, IDC_PREV), TRUE);
+ break;
+ }
+ case IDC_SEARCH:
+ {
+ HWND hSearch = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_SEARCH), hWnd, SearchDlgProc);
+ if (hSearch == NULL)
+ {
+ char buffer[1024];
+ sprintf(buffer, "Error #%d", GetLastError());
+ MessageBoxA(0, buffer, "Error", MB_OK);
+ }
+ HistoryWindowData *data = (HistoryWindowData *) GetWindowLong(hWnd, DWL_USER);
+ SearchWindowData *searchData = (SearchWindowData *) malloc(sizeof(SearchWindowData));
+ searchData->hContact = data->hContact;
+ searchData->hHistoryWindow = hWnd;
+ searchData->hLastFoundEvent = NULL;
+ searchData->index = 0;
+ SetWindowLong(hSearch, DWL_USER, (LONG) searchData);
+ ShowWindow(hSearch, SW_SHOW);
+ //sprintf(buffer, "Error #%d", GetLastError());
+ //MessageBoxA(0, buffer, "Error", MB_OK);
+ break;
+ }
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ return 0;
+}
+
+#include "prsht.h" //PSN_APPLY
+
+BOOL CALLBACK OptionsDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch (msg)
+ {
+ case WM_INITDIALOG:
+ {
+ TranslateDialogDefault(hWnd);
+ int count = DBGetContactSettingDword(NULL, ModuleName, "EventsToLoad", 0);
+ EnableWindow(GetDlgItem(hWnd, IDC_EVENTS_COUNT), count > 0);
+ EnableWindow(GetDlgItem(hWnd, IDC_SHOW_LAST_FIRST), count > 0);
+
+ CheckDlgButton(hWnd, IDC_LOAD_ALL, count <= 0);
+ CheckDlgButton(hWnd, IDC_LOAD_NUMBER, count > 0);
+ CheckDlgButton(hWnd, IDC_ENABLE_RTL, (BOOL) DBGetContactSettingByte(NULL, ModuleName, "EnableRTL", 0));
+ CheckDlgButton(hWnd, IDC_SHOW_LAST_FIRST, (BOOL) DBGetContactSettingByte(NULL, ModuleName, "ShowLastPageFirst", 0));
+ CheckDlgButton(hWnd, IDC_LOAD_BACKGROUND, (BOOL) DBGetContactSettingByte(NULL, ModuleName, "UseWorkerThread", 0));
+ TCHAR buffer[1024];
+ _itot(count, buffer, 10);
+ SetWindowText(GetDlgItem(hWnd, IDC_EVENTS_COUNT), buffer);
+
+ break;
+ }
+ case WM_COMMAND:
+ {
+ switch (LOWORD(wParam))
+ {
+ case IDC_LOAD_ALL:
+ {
+ EnableWindow(GetDlgItem(hWnd, IDC_EVENTS_COUNT), FALSE);
+ EnableWindow(GetDlgItem(hWnd, IDC_SHOW_LAST_FIRST), FALSE);
+ SendMessage(GetParent(hWnd), PSM_CHANGED, 0, 0);
+ break;
+ }
+ case IDC_LOAD_NUMBER:
+ {
+ EnableWindow(GetDlgItem(hWnd, IDC_EVENTS_COUNT), TRUE);
+ EnableWindow(GetDlgItem(hWnd, IDC_SHOW_LAST_FIRST), TRUE);
+ SendMessage(GetParent(hWnd), PSM_CHANGED, 0, 0);
+ break;
+ }
+ case IDC_ENABLE_RTL:
+ case IDC_SHOW_LAST_FIRST:
+ case IDC_EVENTS_COUNT:
+ case IDC_LOAD_BACKGROUND:
+ {
+ SendMessage(GetParent(hWnd), PSM_CHANGED, 0, 0);
+ break;
+ }
+ }
+ break;
+ }
+ case WM_NOTIFY:
+ {
+ switch(((LPNMHDR)lParam)->idFrom)
+ {
+ case 0:
+ {
+ switch (((LPNMHDR)lParam)->code)
+ {
+ case PSN_APPLY:
+ {
+ long count;
+ if (IsDlgButtonChecked(hWnd, IDC_LOAD_ALL))
+ {
+ count = 0;
+ }
+ else{
+ TCHAR buffer[1024];
+ GetWindowText(GetDlgItem(hWnd, IDC_EVENTS_COUNT), buffer, sizeof(buffer));
+ count = _tstol(buffer);
+ count = (count < 0) ? 0 : count;
+ }
+ DBWriteContactSettingByte(NULL, ModuleName, "ShowLastPageFirst", IsDlgButtonChecked(hWnd, IDC_SHOW_LAST_FIRST));
+ DBWriteContactSettingByte(NULL, ModuleName, "EnableRTL", IsDlgButtonChecked(hWnd, IDC_ENABLE_RTL));
+ DBWriteContactSettingByte(NULL, ModuleName, "UseWorkerThread", IsDlgButtonChecked(hWnd, IDC_LOAD_BACKGROUND));
+ DBWriteContactSettingDword(NULL, ModuleName, "EventsToLoad", count);
+
+ break;
+ }
+ }
+ break;
+ }
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ return 0;
+}
+
+
+#include "commctrl.h" //tab control
+
+BOOL CALLBACK SearchDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch (msg)
+ {
+ case WM_INITDIALOG:
+ {
+ if (MyEnableThemeDialogTexture)
+ {
+ MyEnableThemeDialogTexture((HWND) hWnd, ETDT_ENABLETAB);
+ }
+ TranslateDialogDefault(hWnd);
+ TCITEM tabItem = {0};
+ tabItem.pszText = TranslateT("Text search");
+ tabItem.mask = TCIF_TEXT;
+ //MessageBoxA(0, "Before TCM_INSERTITEM 1", "Error", MB_OK);
+ SendMessage(GetDlgItem(hWnd, IDC_TABS), TCM_INSERTITEM, 0, (LPARAM) &tabItem);
+ tabItem.pszText = TranslateT("Time search");
+ //MessageBoxA(0, "Before TCM_INSERTITEM 2", "Error", MB_OK);
+ SendMessage(GetDlgItem(hWnd, IDC_TABS), TCM_INSERTITEM, 1, (LPARAM) &tabItem);
+ //SendMessage(GetDlgItem(hWnd, IDC_SEARCH_TIME), DTM_SETFORMAT, 0, (LPARAM) "HH:mm");
+ //MessageBoxA(0, "Before CheckDlgButton", "Error", MB_OK);
+ CheckDlgButton(hWnd, IDC_DIRECTION_DOWN, TRUE);
+ return TRUE;
+ break;
+ }
+ case WM_SHOWWINDOW:
+ {
+ SetFocus(GetDlgItem(hWnd, IDC_SEARCH_TEXT));
+ break;
+ }
+ case WM_DESTROY:
+ {
+ SearchWindowData *data = (SearchWindowData *) GetWindowLong(hWnd, DWL_USER);
+ free(data);
+ //DestroyWindow(hWnd);
+ break;
+ }
+ case WM_CLOSE:
+ {
+ DestroyWindow(hWnd);
+ break;
+ }
+ case WM_NOTIFY:
+ {
+ switch (((LPNMHDR) lParam)->idFrom)
+ {
+ case IDC_SEARCH_DATE:
+ case IDC_SEARCH_TIME:
+ {
+ SearchWindowData *data = (SearchWindowData *) GetWindowLong(hWnd, DWL_USER);
+ data->hLastFoundEvent = NULL; //start from top if changes occur
+ break;
+ }
+ case IDC_TABS:
+ {
+ switch (((LPNMHDR) lParam)->code)
+ {
+ case TCN_SELCHANGE:
+ {
+ int tab = SendMessage(GetDlgItem(hWnd, IDC_TABS), TCM_GETCURSEL, 0, 0);
+ ShowWindow(GetDlgItem(hWnd, IDC_SEARCH_DATE), (tab == 1) ? SW_SHOW : SW_HIDE);
+ ShowWindow(GetDlgItem(hWnd, IDC_SEARCH_TIME), (tab == 1) ? SW_SHOW : SW_HIDE);
+ ShowWindow(GetDlgItem(hWnd, IDC_SEARCH_TEXT), (tab == 0) ? SW_SHOW : SW_HIDE);
+ SendMessage(GetDlgItem(hWnd, IDC_SEARCH_TEXT_STATIC), WM_SETTEXT, 0, (LPARAM) ((tab == 0) ? _T("Text :") : _T("Time :")));
+ break;
+ }
+ }
+ break;
+ }
+ }
+ break;
+ }
+ case WM_COMMAND:
+ {
+ switch (LOWORD(wParam))
+ {
+ case IDC_SEARCH_TEXT:
+ {
+ switch (HIWORD(wParam))
+ {
+ case EN_CHANGE:
+ {
+ SearchWindowData *data = (SearchWindowData *) GetWindowLong(hWnd, DWL_USER);
+ data->hLastFoundEvent = NULL; //start from top if changes occur
+ break;
+ }
+ }
+ break;
+ }
+ case IDCANCEL:
+ {
+ SendMessage(hWnd, WM_CLOSE, 0, 0);
+ break;
+ }
+ case IDC_FIND_NEXT:
+ {
+ SearchWindowData *data = (SearchWindowData *) GetWindowLong(hWnd, DWL_USER);
+ const HistoryWindowData *histData = (HistoryWindowData *) GetWindowLong(data->hHistoryWindow, DWL_USER);
+ int direction = IsDlgButtonChecked(hWnd, IDC_DIRECTION_UP) ? DIRECTION_BACK : DIRECTION_FORWARD;
+ int tab = SendMessage(GetDlgItem(hWnd, IDC_TABS), TCM_GETCURSEL, 0, 0);
+ int type = (tab == 0) ? SEARCH_TEXT : SEARCH_TIME;
+ SearchResult searchResult;
+ if (data->hLastFoundEvent == NULL)
+ {
+ data->index = (direction == DIRECTION_FORWARD) ? 0 : histData->count;
+ }
+ else{
+ data->hLastFoundEvent = GetNeededEvent(data->hLastFoundEvent, 1, direction);
+ }
+
+ if (type == SEARCH_TEXT) //text search
+ {
+ TCHAR text[2048]; //TODO buffer overrun
+ SendMessage(GetDlgItem(hWnd, IDC_SEARCH_TEXT), WM_GETTEXT, 2048, (LPARAM) text);
+ searchResult = SearchHistory(data->hContact, data->hLastFoundEvent, text, direction, type);
+ }
+ else{//time search
+ TimeSearchData tsData = {0};
+ SYSTEMTIME date = {0}, time = {0};
+ int res = SendMessage(GetDlgItem(hWnd, IDC_SEARCH_DATE), DTM_GETSYSTEMTIME, 0, (LPARAM) &date);
+ tsData.flags = (res == GDT_VALID) ? TSDF_DATE_SET : 0;
+ res = SendMessage(GetDlgItem(hWnd, IDC_SEARCH_TIME), DTM_GETSYSTEMTIME, 0, (LPARAM) &time);
+ if (res == GDT_VALID)
+ {
+ tsData.flags |= TSDF_TIME_SET;
+ date.wHour = time.wHour;
+ date.wMinute = time.wMinute;
+ date.wSecond = time.wSecond;
+ date.wMilliseconds = time.wMilliseconds;
+ }
+ tsData.time = date;
+ searchResult = SearchHistory(data->hContact, data->hLastFoundEvent, &tsData, direction, type);
+ }
+ if (searchResult.hEvent)
+ {
+ //char buffer[1024];
+ //sprintf(buffer, "Found it: index = %ld hEvent = %p", searchResult.index, searchResult.hEvent);
+ //MessageBox(0, buffer, "Yupppi", 0);
+ data->index += (direction == DIRECTION_BACK) ? -searchResult.index : searchResult.index;
+ LoadPage(data->hHistoryWindow, searchResult.hEvent, data->index, histData->itemsPerPage / 2, histData->itemsPerPage, DIRECTION_BACK);
+ }
+ else{
+ MessageBox(0, TranslateT("Search finished. No more entries ..."), TranslateT("Information"), MB_OK | MB_ICONINFORMATION);
+ }
+ data->hLastFoundEvent = searchResult.hEvent;
+ break;
+ }
+ }
+ break;
+ }
+ }
+ return 0;
+} \ No newline at end of file
diff --git a/plugins/IEHistory/IEHistory/dlgHandlers.h b/plugins/IEHistory/IEHistory/dlgHandlers.h
new file mode 100644
index 0000000000..343b208c6e
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/dlgHandlers.h
@@ -0,0 +1,50 @@
+/*
+IEView history viewer plugin for Miranda IM
+
+Copyright © 2005-2006 Cristian Libotean
+
+This program 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 2
+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, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#ifndef M_HISTORY_DLG_HANDLERS_H
+#define M_HISTORY_DLG_HANDLERS_H
+
+#include "commonheaders.h"
+
+#define LOAD_IN_BACKGROUND 0x00000001
+
+struct HistoryWindowData{
+ HANDLE hContact;
+ long count;
+ long index;
+ short loadMethod;
+ int itemsPerPage;
+ int bEnableRTL;
+ HWND hIEView;
+ HANDLE hLastFirstEvent;
+};
+
+struct SearchWindowData{
+ long index;
+ HANDLE hContact;
+ HWND hHistoryWindow;
+ HANDLE hLastFoundEvent;
+};
+
+BOOL CALLBACK HistoryDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
+BOOL CALLBACK OptionsDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
+BOOL CALLBACK SearchDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
+
+#endif //M_HISTORY_DLG_HANDLERS_H \ No newline at end of file
diff --git a/plugins/IEHistory/IEHistory/events.cpp b/plugins/IEHistory/IEHistory/events.cpp
new file mode 100644
index 0000000000..90b36b1b63
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/events.cpp
@@ -0,0 +1,88 @@
+/*
+IEView history viewer plugin for Miranda IM
+
+Copyright © 2005-2006 Cristian Libotean
+
+This program 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 2
+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, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#include "events.h"
+
+HANDLE hModulesLoaded;
+HANDLE hOptionsInitialize;
+
+int HookEvents()
+{
+ hModulesLoaded = HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoaded);
+ hOptionsInitialize = HookEvent(ME_OPT_INITIALISE, OnOptionsInitialize);
+ return 0;
+}
+
+int UnhookEvents()
+{
+ UnhookEvent(hModulesLoaded);
+ UnhookEvent(hOptionsInitialize);
+ return 0;
+}
+
+int OnModulesLoaded(WPARAM wParam, LPARAM lParam)
+{
+ Log("%s", "Entering function " __FUNCTION__);
+ CLISTMENUITEM menuItem = {0};
+ menuItem.cbSize = sizeof(CLISTMENUITEM);
+ menuItem.flags = 0;
+ menuItem.pszContactOwner = NULL; //all contacts
+ menuItem.hIcon = hIcon;
+
+ menuItem.position = 1000090000;
+
+ menuItem.pszName = Translate("View contact's history");
+ menuItem.pszService = MS_HISTORY_SHOWCONTACTHISTORY;
+
+ Log("%s", "Adding first menu (view contact's history)");
+ CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (WPARAM) &menuItem);
+
+ menuItem.ptszName = TranslateT("View system history");
+ //CallService(MS_CLIST_ADDMAINMENUITEM, 0, (WPARAM) &menuItem);
+ //PLUGININFO pInfo = pluginInfo;
+ //pInfo.shortName = "IEView History Viewer";
+ Log("%s", "Adding plugin to updater list");
+ CallService(MS_UPDATE_REGISTERFL, (WPARAM) 2553, (LPARAM) &pluginInfo);
+ Log("%s", "Creating the open windows list");
+ hOpenWindowsList = (HANDLE) CallService(MS_UTILS_ALLOCWINDOWLIST, 0, 0);
+
+ Log("%s", "Leaving function " __FUNCTION__);
+ return 0;
+}
+
+int OnOptionsInitialize(WPARAM wParam, LPARAM lParam)
+{
+ Log("%s", "Entering function " __FUNCTION__);
+ OPTIONSDIALOGPAGE odp = { 0 };
+
+ odp.cbSize = sizeof(odp);
+ odp.position = 100000000;
+ odp.hInstance = hInstance;
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_HISTORY);
+ odp.pszTitle = Translate("IEHistory");
+ odp.pszGroup = Translate("Message Sessions");
+ odp.groupPosition = 910000000;
+ odp.flags=ODPF_BOLDGROUPS;
+ odp.pfnDlgProc = OptionsDlgProc;
+ CallService(MS_OPT_ADDPAGE, wParam, (LPARAM)&odp);
+
+ return 0;
+ Log("%s", "Leaving function " __FUNCTION__);
+} \ No newline at end of file
diff --git a/plugins/IEHistory/IEHistory/events.h b/plugins/IEHistory/IEHistory/events.h
new file mode 100644
index 0000000000..b19b14fced
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/events.h
@@ -0,0 +1,35 @@
+/*
+IEView history viewer plugin for Miranda IM
+
+Copyright © 2005-2006 Cristian Libotean
+
+This program 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 2
+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, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#ifndef M_HISTORY_HOOKED_EVENTS_H
+#define M_HISTORY_HOOKED_EVENTS_H
+
+#include "commonheaders.h"
+
+extern HANDLE hModulesLoaded;
+extern HANDLE hOptionsInitialize;
+
+int HookEvents();
+int UnhookEvents();
+
+int OnModulesLoaded(WPARAM wParam, LPARAM lParam);
+int OnOptionsInitialize(WPARAM wParam, LPARAM lParam);
+
+#endif //M_HISTORY_HOOKED_EVENTS_H \ No newline at end of file
diff --git a/plugins/IEHistory/IEHistory/history (old).ico b/plugins/IEHistory/IEHistory/history (old).ico
new file mode 100644
index 0000000000..eb627fa6b0
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/history (old).ico
Binary files differ
diff --git a/plugins/IEHistory/IEHistory/history.ico b/plugins/IEHistory/IEHistory/history.ico
new file mode 100644
index 0000000000..b85c00bd5e
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/history.ico
Binary files differ
diff --git a/plugins/IEHistory/IEHistory/mirandaMem.cpp b/plugins/IEHistory/IEHistory/mirandaMem.cpp
new file mode 100644
index 0000000000..8ef20cb2e1
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/mirandaMem.cpp
@@ -0,0 +1,42 @@
+/*
+IEView history viewer plugin for Miranda IM
+
+Copyright © 2005-2006 Cristian Libotean
+
+This program 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 2
+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, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#include "mirandaMem.h"
+
+void *(*MirandaMalloc)(size_t size) = NULL;
+void *(*MirandaRealloc)(void *data, size_t newSize) = NULL;
+void (*MirandaFree) (void *data) = NULL;
+
+void InitializeMirandaMemFunctions()
+{
+ MM_INTERFACE mmi = {0};
+ mmi.cbSize = sizeof(MM_INTERFACE);
+ CallService(MS_SYSTEM_GET_MMI, 0, (LPARAM) &mmi);
+ MirandaMalloc = mmi.mmi_malloc;
+ MirandaRealloc = mmi.mmi_realloc;
+ MirandaFree = mmi.mmi_free;
+}
+
+void DestroyMirandaMemFunctions()
+{
+ MirandaMalloc = NULL;
+ MirandaRealloc = NULL;
+ MirandaFree = NULL;
+} \ No newline at end of file
diff --git a/plugins/IEHistory/IEHistory/mirandaMem.h b/plugins/IEHistory/IEHistory/mirandaMem.h
new file mode 100644
index 0000000000..7428278000
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/mirandaMem.h
@@ -0,0 +1,33 @@
+/*
+IEView history viewer plugin for Miranda IM
+
+Copyright © 2005 Cristian Libotean
+
+This program 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 2
+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, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#ifndef M_FOLDERS_MIRANDA_MEM_H
+#define M_FOLDERS_MIRANDA_MEM_H
+
+#include "commonheaders.h"
+
+extern void *(*MirandaMalloc)(size_t size);
+extern void *(*MirandaRealloc)(void *data, size_t newSize);
+extern void (*MirandaFree) (void *data);
+
+void InitializeMirandaMemFunctions();
+void DestroyMirandaMemFunctions();
+
+#endif \ No newline at end of file
diff --git a/plugins/IEHistory/IEHistory/resource.h b/plugins/IEHistory/IEHistory/resource.h
new file mode 100644
index 0000000000..b240d149db
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/resource.h
@@ -0,0 +1,45 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by IEHistory.rc
+//
+#define IDD_HISTORY 101
+#define IDI_HISTORYICON 102
+#define IDD_OPT_HISTORY 103
+#define IDD_SEARCH 104
+#define IDC_CLOSE 1001
+#define IDC_IEVIEW_PLACEHOLDER 1010
+#define IDC_EVENTSNO_GROUPBOX 1011
+#define IDC_LOAD_ALL 1012
+#define IDC_LOAD_NUMBER 1013
+#define IDC_EVENTS_COUNT 1014
+#define IDC_LOAD_NUMBER_STATIC 1015
+#define IDC_PREV 1016
+#define IDC_NEXT 1017
+#define IDC_PAGE_NUMBER 1018
+#define IDC_STATUSBAR 1019
+#define IDC_SHOW_LAST_FIRST 1021
+#define IDC_MISC_GROUPBOX 1022
+#define IDC_ENABLE_RTL 1023
+#define IDC_FIND_NEXT 1024
+#define IDC_TABS 1025
+#define IDC_SEARCH 1026
+#define IDC_SEARCH_TEXT_STATIC 1027
+#define IDC_SEARCH_TEXT 1028
+#define IDC_DIRECTION_GROUPBOX 1032
+#define IDC_DIRECTION_UP 1033
+#define IDC_DIRECTION_DOWN 1034
+#define IDC_SEARCH_DATE 1035
+#define IDC_SEARCH_TIME 1038
+#define IDC_WORKER_THREAD 1039
+#define IDC_LOAD_BACKGROUND 1039
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 105
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1040
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/plugins/IEHistory/IEHistory/services.cpp b/plugins/IEHistory/IEHistory/services.cpp
new file mode 100644
index 0000000000..5683eecda8
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/services.cpp
@@ -0,0 +1,62 @@
+/*
+IEView history viewer plugin for Miranda IM
+
+Copyright © 2005-2006 Cristian Libotean
+
+This program 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 2
+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, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#include "services.h"
+
+HANDLE hShowHistory;
+
+int InitServices()
+{
+ hShowHistory = CreateServiceFunction(MS_HISTORY_SHOWCONTACTHISTORY, ShowContactHistoryService);
+ return 0;
+}
+
+int DestroyServices()
+{
+ DestroyServiceFunction(hShowHistory);
+ return 0;
+}
+
+int ShowContactHistoryService(WPARAM wParam, LPARAM lParam)
+{
+ Log("%s", "Entering function " __FUNCTION__);
+ HWND historyDlg;
+ HWND parent = NULL;
+ historyDlg = WindowList_Find(hOpenWindowsList, (HANDLE) wParam);
+ if (historyDlg == NULL)
+ {
+ int count = DBGetContactSettingDword(NULL, ModuleName, "EventsToLoad", 0);
+ int loadInBackground = DBGetContactSettingByte(NULL, ModuleName, "UseWorkerThread", 0);
+ HistoryWindowData *data;
+ data = (HistoryWindowData *) malloc(sizeof(HistoryWindowData));
+ data->hContact = (HANDLE) wParam;
+ data->hIEView = NULL;
+ data->itemsPerPage = count;
+ data->index = 0;
+ data->count = 0;
+ data->loadMethod = (loadInBackground) ? LOAD_IN_BACKGROUND : 0;
+ historyDlg = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_HISTORY), parent, HistoryDlgProc);
+ SetWindowLong(historyDlg, DWL_USER, (LONG) data);
+
+ WindowList_Add(hOpenWindowsList, historyDlg, (HANDLE) wParam);
+ }
+ ShowWindow(historyDlg, SW_SHOW);
+ return 0;
+} \ No newline at end of file
diff --git a/plugins/IEHistory/IEHistory/services.h b/plugins/IEHistory/IEHistory/services.h
new file mode 100644
index 0000000000..40e680a04e
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/services.h
@@ -0,0 +1,32 @@
+/*
+IEView history viewer plugin for Miranda IM
+
+Copyright © 2005-2006 Cristian Libotean
+
+This program 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 2
+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, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#ifndef M_IEHISTORY_PROVIDED_SERVICES_H
+#define M_IEHISTORY_PROVIDED_SERVICES_H
+
+#include "commonheaders.h"
+#include "dlgHandlers.h"
+
+int InitServices();
+int DestroyServices();
+
+int ShowContactHistoryService(WPARAM wParam, LPARAM lParam);
+
+#endif //M_IEHISTORY_PROVIDED_SERVICES_H \ No newline at end of file
diff --git a/plugins/IEHistory/IEHistory/stdafx.cpp b/plugins/IEHistory/IEHistory/stdafx.cpp
new file mode 100644
index 0000000000..2731c2b8c3
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/stdafx.cpp
@@ -0,0 +1,25 @@
+/*
+IEView history viewer plugin for Miranda IM
+
+Copyright © 2005-2006 Cristian Libotean
+
+This program 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 2
+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, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
diff --git a/plugins/IEHistory/IEHistory/stdafx.h b/plugins/IEHistory/IEHistory/stdafx.h
new file mode 100644
index 0000000000..fe90144550
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/stdafx.h
@@ -0,0 +1,47 @@
+/*
+IEView history viewer plugin for Miranda IM
+
+Copyright © 2005-2006 Cristian Libotean
+
+This program 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 2
+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, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#pragma once
+
+// Modify the following defines if you have to target a platform prior to the ones specified below.
+// Refer to MSDN for the latest info on corresponding values for different platforms.
+#ifndef WINVER // Allow use of features specific to Windows XP or later.
+#define WINVER 0x0501 // Change this to the appropriate value to target other versions of Windows.
+#endif
+
+#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.
+#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
+#endif
+
+#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later.
+#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.
+#endif
+
+#ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later.
+#define _WIN32_IE 0x0600 // Change this to the appropriate value to target other versions of IE.
+#endif
+
+#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
+// Windows Header Files:
+#include <windows.h>
+
+
+
+// TODO: reference additional headers your program requires here
diff --git a/plugins/IEHistory/IEHistory/utils.cpp b/plugins/IEHistory/IEHistory/utils.cpp
new file mode 100644
index 0000000000..91577e698f
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/utils.cpp
@@ -0,0 +1,330 @@
+/*
+IEView history viewer plugin for Miranda IM
+
+Copyright © 2005-2006 Cristian Libotean
+
+This program 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 2
+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, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#include "commonheaders.h"
+
+int LogInit()
+{
+#ifdef _DEBUG
+ FILE *fout = fopen("IEHistory.log", "wt");
+ fclose(fout);
+#endif
+ return 0;
+}
+
+int Log(char *format, ...)
+{
+#ifdef _DEBUG
+ char str[4096];
+ va_list vararg;
+ int tBytes;
+ FILE *fout = fopen("IEHistory.log", "at");
+ if (!fout)
+ {
+// MessageBox(0, "can't open file", NULL, MB_OK);
+ }
+
+ va_start(vararg, format);
+
+ tBytes = _vsnprintf(str, sizeof(str), format, vararg);
+ if (tBytes > 0)
+ {
+ str[tBytes] = 0;
+ }
+
+ va_end(vararg);
+ if (str[strlen(str) - 1] != '\n')
+ {
+ strcat(str, "\n");
+ }
+ fputs(str, fout);
+ fclose(fout);
+#endif
+ return 0;
+
+}
+
+
+
+int Info(char *title, char *format, ...)
+{
+ char str[4096];
+ va_list vararg;
+ int tBytes;
+ va_start(vararg, format);
+ tBytes = _snprintf(str, sizeof(str), format, vararg);
+ if (tBytes > 0)
+ {
+ str[tBytes] = 0;
+ }
+ va_end(vararg);
+ return MessageBoxA(0, str, title, MB_OK | MB_ICONINFORMATION);
+}
+
+/*
+returns the name of a contact
+*/
+
+#pragma warning (disable: 4312)
+TCHAR *GetContactName(HANDLE hContact, char *szProto)
+{
+ CONTACTINFO ctInfo;
+ int ret;
+
+ ZeroMemory((void *) &ctInfo, sizeof(ctInfo));
+ ctInfo.cbSize = sizeof(ctInfo);
+ ctInfo.szProto = szProto;
+ ctInfo.dwFlag = CNF_DISPLAY;
+#ifdef _UNICODE
+ ctInfo.dwFlag += CNF_UNICODE;
+#endif
+ ctInfo.hContact = hContact;
+ //_debug_message("retrieving contact name for %d", hContact);
+ ret = CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM) &ctInfo);
+ //_debug_message(" contact name %s", ctInfo.pszVal);
+ TCHAR *buffer;
+ if (!ret)
+ {
+ buffer = _tcsdup(ctInfo.pszVal);
+ }
+ else{
+ return NULL;
+ }
+ MirandaFree(ctInfo.pszVal);
+ if (!ret)
+ {
+ return buffer;
+ }
+ else{
+ return NULL;
+ }
+ return buffer;
+}
+#pragma warning (default: 4312)
+
+/*
+Moves a control with regard to certain anchors (like delphi, c#, ...)
+Somebody please improve on this code ...
+*/
+
+void ScreenToClient(HWND hWnd, LPRECT rect)
+{
+ POINT pt;
+ int cx = rect->right - rect->left;
+ int cy = rect->bottom - rect->top;
+ pt.x = rect->left;
+ pt.y = rect->top;
+ ScreenToClient(hWnd, &pt);
+ rect->left = pt.x;
+ rect->top = pt.y;
+ rect->right = pt.x + cx;
+ rect->bottom = pt.y + cy;
+}
+
+void AnchorMoveWindow(HWND window, const WINDOWPOS *parentPos, int anchors)
+{
+ RECT rParent;
+ RECT rChild;
+
+ if (parentPos->flags & SWP_NOSIZE)
+ {
+ return;
+ }
+ GetWindowRect(parentPos->hwnd, &rParent);
+ rChild = AnchorCalcPos(window, &rParent, parentPos, anchors);
+ MoveWindow(window, rChild.left, rChild.top, rChild.right - rChild.left, rChild.bottom - rChild.top, FALSE);
+}
+
+RECT AnchorCalcPos(HWND window, const RECT *rParent, const WINDOWPOS *parentPos, int anchors)
+{
+ RECT rChild;
+ RECT rTmp;
+
+ GetWindowRect(window, &rChild);
+ ScreenToClient(parentPos->hwnd, &rChild);
+
+ int cx = rParent->right - rParent->left;
+ int cy = rParent->bottom - rParent->top;
+ if ((cx == parentPos->cx) && (cy == parentPos->cy))
+ {
+ return rChild;
+ }
+ if (parentPos->flags & SWP_NOSIZE)
+ {
+ return rChild;
+ }
+
+ rTmp.left = parentPos->x - rParent->left;
+ rTmp.right = (parentPos->x + parentPos->cx) - rParent->right;
+ rTmp.bottom = (parentPos->y + parentPos->cy) - rParent->bottom;
+ rTmp.top = parentPos->y - rParent->top;
+
+ cx = (rTmp.left) ? -rTmp.left : rTmp.right;
+ cy = (rTmp.top) ? -rTmp.top : rTmp.bottom;
+
+ rChild.right += cx;
+ rChild.bottom += cy;
+ //expanded the window accordingly, now we need to enforce the anchors
+ if ((anchors & ANCHOR_LEFT) && (!(anchors & ANCHOR_RIGHT)))
+ {
+ rChild.right -= cx;
+ }
+ if ((anchors & ANCHOR_TOP) && (!(anchors & ANCHOR_BOTTOM)))
+ {
+ rChild.bottom -= cy;
+ }
+ if ((anchors & ANCHOR_RIGHT) && (!(anchors & ANCHOR_LEFT)))
+ {
+ rChild.left += cx;
+ }
+ if ((anchors & ANCHOR_BOTTOM) && (!(anchors & ANCHOR_TOP)))
+ {
+ rChild.top += cy;
+ }
+ return rChild;
+}
+
+#pragma warning (disable: 4244)
+void UnixTimeToFileTime(time_t t, LPFILETIME pft)
+{
+ // Note that LONGLONG is a 64-bit value
+ LONGLONG ll;
+
+ ll = Int32x32To64(t, 10000000) + 116444736000000000;
+ pft->dwLowDateTime = (DWORD)ll;
+ pft->dwHighDateTime = ll >> 32;
+}
+#pragma warning (default: 4244)
+
+void UnixTimeToSystemTime(time_t t, LPSYSTEMTIME pst)
+{
+ FILETIME ft;
+ SYSTEMTIME st;
+ UnixTimeToFileTime(t, &ft);
+ FileTimeToSystemTime(&ft, &st);
+ SystemTimeToTzSpecificLocalTime(NULL, &st, pst);
+}
+
+HANDLE GetNeededEvent(HANDLE hLastFirstEvent, int index, int direction)
+{
+ int i;
+ HANDLE hEvent = hLastFirstEvent;
+ const char *service;
+ if (direction == DIRECTION_BACK)
+ {
+ service = MS_DB_EVENT_FINDPREV;
+ }
+ else{
+ service = MS_DB_EVENT_FINDNEXT;
+ }
+
+ for (i = 0; i < index; i++)
+ {
+ hEvent = (HANDLE) CallService(service, (WPARAM) hEvent, 0);
+ }
+ return hEvent;
+}
+
+SearchResult SearchHistory(HANDLE hContact, HANDLE hFirstEvent, void *searchData, int direction, int type)
+{
+ if (hFirstEvent == NULL)
+ {
+ const char *service = (direction == DIRECTION_BACK) ? MS_DB_EVENT_FINDLAST : MS_DB_EVENT_FINDFIRST;
+ hFirstEvent = (HANDLE) CallService(service, (WPARAM) hContact, 0);
+ }
+ int index = 0;
+ HANDLE hEvent = hFirstEvent;
+ void *buffer = NULL;
+ TCHAR *search;
+ wchar_t TEMP[2048];
+ bool found = false;
+ int oldSize, newSize;
+ oldSize = newSize = 0;
+
+ DBEVENTINFO dbEvent = {0};
+ dbEvent.cbSize = sizeof(dbEvent);
+
+ while ((!found) && (hEvent))
+ {
+ newSize = CallService(MS_DB_EVENT_GETBLOBSIZE, (WPARAM) hEvent, 0);
+ if (newSize > oldSize)
+ {
+ buffer = (TCHAR *) realloc(buffer, newSize);
+ oldSize = newSize;
+ }
+ dbEvent.pBlob = (PBYTE) buffer;
+ dbEvent.cbBlob = newSize;
+ if (CallService(MS_DB_EVENT_GET, (WPARAM) hEvent, (LPARAM) &dbEvent) == 0) //successful
+ {
+ switch (type)
+ {
+ case SEARCH_TEXT:
+ {
+#ifdef _UNICODE
+ unsigned int size = strlen((char *) dbEvent.pBlob) + 1;
+ if (size < dbEvent.cbBlob)
+ {
+ search = (wchar_t *) &dbEvent.pBlob[size];
+ }
+ else{
+ MultiByteToWideChar(CP_ACP, 0, (char *) buffer, size, TEMP, 2048);
+ search = TEMP;
+ }
+#else
+ search = (char *) buffer;
+#endif
+ TCHAR *data = (TCHAR *) searchData;
+ TCHAR *tmp = _tcsstr(search, data);
+ if (tmp)
+ {
+ found = true;
+ }
+ break;
+ }
+ case SEARCH_TIME:
+ {
+ SYSTEMTIME time;
+ TimeSearchData *data = (TimeSearchData *) searchData;
+ UnixTimeToSystemTime((time_t) dbEvent.timestamp, &time);
+ found = ((data->flags & TSDF_DATE_SET) || (data->flags & TSDF_TIME_SET)) ? true : false;
+ if (data->flags & TSDF_DATE_SET)
+ {
+ found = ((time.wYear == data->time.wYear) && (time.wMonth == data->time.wMonth) && (time.wDay == data->time.wDay));
+ }
+ if (data->flags & TSDF_TIME_SET)
+ {
+ found = found & ((time.wHour == data->time.wHour) && (time.wMinute == data->time.wMinute));
+ }
+ break;
+ }
+ }
+ }
+ if (!found)
+ {
+ hEvent = GetNeededEvent(hEvent, 1, direction);
+ index++;
+ }
+ }
+ free(buffer);
+ SearchResult sr;
+ sr.index = index;
+ sr.hEvent = hEvent;
+ return sr;
+} \ No newline at end of file
diff --git a/plugins/IEHistory/IEHistory/utils.h b/plugins/IEHistory/IEHistory/utils.h
new file mode 100644
index 0000000000..c423b4ede7
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/utils.h
@@ -0,0 +1,97 @@
+/*
+IEView history viewer plugin for Miranda IM
+
+Copyright © 2005-2006 Cristian Libotean
+
+This program 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 2
+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, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#ifndef M_IEHISTORY_UTILS_H
+#define M_IEHISTORY_UTILS_H
+
+#include "stdafx.h"
+#include "time.h"
+
+#define ANCHOR_LEFT 0x000001
+#define ANCHOR_RIGHT 0x000002
+#define ANCHOR_TOP 0x000004
+#define ANCHOR_BOTTOM 0x000008
+#define ANCHOR_ALL ANCHOR_LEFT | ANCHOR_RIGHT | ANCHOR_TOP | ANCHOR_BOTTOM
+
+#define DIRECTION_BACK 0x000001
+#define DIRECTION_FORWARD 0x000002
+
+#define SEARCH_TEXT 0x000001
+#define SEARCH_TIME 0x000002
+
+/*
+#define SIDE_LEFT 0x000001
+#define SIDE_TOP 0x000002
+#define SIDE_RIGHT 0x000004
+#define SIDE_BOTTOM 0x000008
+#define SIDE_TOPLEFT SIDE_TOP | SIDE_LEFT
+#define SIDE_TOPRIGHT SIDE_TOP | SIDE_RIGHT
+#define SIDE_BOTTOMLEFT SIDE_BOTTOM | SIDE_LEFT
+#define SIDE_BOTTOMRIGHT SIDE_BOTTOM | SIDE_RIGHT
+*/
+
+#define TSDF_TIME_SET 0x00000001
+#define TSDF_DATE_SET 0x00000002
+
+struct TimeSearchData{
+ int flags;
+ SYSTEMTIME time;
+};
+
+struct SearchResult{
+ long index;
+ HANDLE hEvent;
+};
+
+//#ifdef _DEBUG
+int LogInit();
+int Log(char *format, ...);
+//#endif
+
+void ScreenToClient(HWND hWnd, LPRECT rect);
+
+int Info(char *title, char *format, ...);
+TCHAR *GetContactName(HANDLE hContact, char *szProto);
+void AnchorMoveWindow(HWND window, const WINDOWPOS *parentPos, int anchors);
+RECT AnchorCalcPos(HWND window, const RECT *rParent, const WINDOWPOS *parentPos, int anchors);
+
+void UnixTimeToFileTime(time_t t, LPFILETIME pft);
+void UnixTimeToSystemTime(time_t t, LPSYSTEMTIME pst);
+
+HANDLE GetNeededEvent(HANDLE hLastFirstEvent, int index, int direction);
+SearchResult SearchHistory(HANDLE hContact, HANDLE hFirstEvent, void *searchData, int direction, int type);
+
+extern void *(*MirandaMalloc)(size_t size);
+extern void *(*MirandaRealloc)(void *data, size_t newSize);
+extern void (*MirandaFree) (void *data);
+
+/*
+static __inline int mir_snprintf(char *buffer, size_t count, const char* fmt, ...) {
+ va_list va;
+ int len;
+
+ va_start(va, fmt);
+ len = _vsnprintf(buffer, count-1, fmt, va);
+ va_end(va);
+ buffer[count-1] = 0;
+ return len;
+}
+*/
+#endif \ No newline at end of file
diff --git a/plugins/IEHistory/IEHistory/version.aps b/plugins/IEHistory/IEHistory/version.aps
new file mode 100644
index 0000000000..00ae066309
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/version.aps
Binary files differ
diff --git a/plugins/IEHistory/IEHistory/version.h b/plugins/IEHistory/IEHistory/version.h
new file mode 100644
index 0000000000..204fd10561
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/version.h
@@ -0,0 +1,53 @@
+/*
+Bonsai plugin for Miranda IM
+
+Copyright © 2006 Cristian Libotean
+
+This program 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 2
+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, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#ifndef M_IEHISTORY_VERSION_H
+#define M_IEHISTORY_VERSION_H
+
+#define __MAJOR_VERSION 0
+#define __MINOR_VERSION 0
+#define __RELEASE_NUM 1
+#define __BUILD_NUM 4
+
+#define VERSION PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM)
+
+#define __PLUGINVERSION_STRING __MAJOR_VERSION,__MINOR_VERSION,__RELEASE_NUM,__BUILD_NUM
+#define __PLUGINVERSION_STRING_DOTS __MAJOR_VERSION.__MINOR_VERSION.__RELEASE_NUM.__BUILD_NUM
+#define __STRINGIFY_(x) #x
+#define __STRINGIFY(x) __STRINGIFY_(x)
+#define __VERSION_STRING __STRINGIFY(__PLUGINVERSION_STRING_DOTS)
+
+#ifdef _UNICODE
+#define __DESC "IEView history viewer for unicode cores."
+#else
+#define __DESC "IEView history viewer for non unicode cores."
+#endif
+#define __AUTHOR "Cristian Libotean"
+#define __AUTHOREMAIL "eblis102@yahoo.com"
+#define __COPYRIGHT "© 2006 Cristian Libotean"
+#define __AUTHORWEB "http://www.miranda-im.org/"
+
+#ifdef _UNICODE
+#define __PLUGIN_DISPLAY_NAME "IEView History Viewer (Unicode)"
+#else
+#define __PLUGIN_DISPLAY_NAME "IEView History Viewer"
+#endif
+
+#endif //M_IEHISTORY_VERSION_H
diff --git a/plugins/IEHistory/IEHistory/version.rc b/plugins/IEHistory/IEHistory/version.rc
new file mode 100644
index 0000000000..0bd4ea67f4
--- /dev/null
+++ b/plugins/IEHistory/IEHistory/version.rc
@@ -0,0 +1,100 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+#include "version.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource1.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION __PLUGINVERSION_STRING
+ PRODUCTVERSION __PLUGINVERSION_STRING
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "Author", __AUTHOR
+ VALUE "FileDescription", __DESC
+ VALUE "FileVersion", __VERSION_STRING
+ VALUE "InternalName", __PLUGIN_DISPLAY_NAME
+ VALUE "LegalCopyright", __COPYRIGHT
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/plugins/IEHistory/docs/IEHistory_readme.txt b/plugins/IEHistory/docs/IEHistory_readme.txt
new file mode 100644
index 0000000000..92be3277f4
--- /dev/null
+++ b/plugins/IEHistory/docs/IEHistory_readme.txt
@@ -0,0 +1,121 @@
+IEView History Viewer v.0.0.1.4
+ by Cristian "Eblis" Libotean
+ copyright © 2005-2007 Cristian Libotean
+
+This plugin requires IEView to work, it might even crash if IEView is not available.
+Make sure you have it enabled before reporting crashes !!!
+
+You can search the logs by pressing Ctrl + F while the log window is selected.
+You can copy text by selecting it and then right click, Copy.
+
+Changes:
+
++ : new feature
+* : changed
+! : bufgix
+- : feature removed or disabled because of pending bugs
+
+v. 0.0.1.4 - 2007/04/16
+ * Rebased dll (0x2F040000 ... previous address was 0x2F020000).
+
+v. 0.0.1.3 - 2007/03/09
+ * Changed icon (icon provided by Faith Healer)
+
+v. 0.0.1.2 - 2007/03/09
+ * Use the correct interface ID for history plugins (MIID_UIHISTORY).
+
+v. 0.0.1.1 - 2007/03/08
+ + Added Unicode flag.
+
+v. 0.0.1.0 - 2007/03/06
+ + Added UUID ( {2f093b88-f389-44f1-9e2a-37c29194203a} Unicode, {2f997250-bc2f-46f0-a33e-65f06283be5d} Ansi )
+ + Added HISTORY interface.
+
+v. 0.0.0.13 - 2007/01/12
+ ! Don't use data after being free()'d
+
+v. 0.0.0.12 - 2006/12/07
+ * Changed controls tab order.
+ + Added version info.
+
+v. 0.0.0.11 - 2006/09/14
+ ! Fixed search in unicode version.
+ * Always use ANSI strings for menu items.
+ * Use themes for tabbed dialogs if they are available.
+
+v. 0.0.0.10 - 2006/06/13
+ * Fix for Windows 2000 and date time controls.
+
+v. 0.0.0.9 - 2006/05/17
+ * Destroy services the correct way.
+
+v. 0.0.0.8 - 2006/03/23
+ + Added 'Load in background' - in alpha stanges, doesn't work correctly with all event types (might show garbled text) (disabled).
+
+v. 0.0.0.7 - 2006/02/1
+ + Rebased the dll (0x2F020000)
+ * Modified plugin to work with new ieview.
+ * Removed unneeded text from statusbar.
+
+v. 0.0.0.6 - 2006/01/11
+ + Added min width and height for the history window.
+ * The contact list window is no longer the parent of the history window :)
+ (using the list in m_utils.h - thanks nullbie)
+ + Added status bar.
+
+v. 0.0.0.5 - 2006/01/09
+
+ ! Changed options root to "Message Sessions" from "Message sessions".
+ * Miranda's clist window is now the parent of the history window.
+ ! Allow updater to update the unicode version too.
+ * Use the custom handle of the contact in the window title (if available).
+
+v. 0.0.0.4 - 2006/01/06
+ + Added search function. You can search for a given text
+ or for a given date and/or time. If an event is found
+ the current page will be centered on it but it won't be selected as
+ this can't be done. If you want to find it in the current page
+ you can press Ctrl + F like before (this way the text *will* become
+ selected). Some notes on searching:
+ - search is disabled if all events are loaded.
+ - you can either search for text or a date/time, not both.
+ - you can't start a search from a given entry, they always begin
+ with the first (or last) entry, depending on the direction of the search.
+ - if you make a modification to the string or date/time the search
+ will restart, it won't continue.
+ - seconds aren't taken into account when searching for a given time.
+ * Check to see if contact is RTL or LTR (only tabsrmm supported)
+ (the setting in options acts as the default text direction which is
+ overriden by the per-contact one).
+ * Counting of events loaded in page now begins at 1 (not 0 as before)
+ * Minor changes to prevent memory leaks.
+
+v. 0.0.0.3 - 2006/01/03
+ ! Fixed some issues with the pages.
+ + Added option to show the last page of the history first.
+ + Added RTL support.
+
+v. 0.0.0.2 - 2006/01/03
+ + You can now choose to either load all events or only a certain number
+ per page.
+ + Added border around ieview control.
+ + Allow resize of main window.
+ + Added icon to main window.
+
+v. 0.0.0.1 - 2005/12/30
+ First build, released on miranda's forums.
+
+
+This program 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 2
+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, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
diff --git a/plugins/IEHistory/files_release.txt b/plugins/IEHistory/files_release.txt
new file mode 100644
index 0000000000..65a28fcca2
--- /dev/null
+++ b/plugins/IEHistory/files_release.txt
@@ -0,0 +1,2 @@
+IEHistory\Release\IEHistory.dll
+IEHistory\Release UNICODE\IEHistoryW.dll
diff --git a/plugins/IEHistory/files_source.txt b/plugins/IEHistory/files_source.txt
new file mode 100644
index 0000000000..f861ea5a25
--- /dev/null
+++ b/plugins/IEHistory/files_source.txt
@@ -0,0 +1,4 @@
+IEHistory\res\*.*
+IEHistory\*.*
+docs\*.*
+*.* \ No newline at end of file
diff --git a/plugins/IEHistory/history.ico b/plugins/IEHistory/history.ico
new file mode 100644
index 0000000000..eb627fa6b0
--- /dev/null
+++ b/plugins/IEHistory/history.ico
Binary files differ
diff --git a/plugins/IEHistory/pack source.bat b/plugins/IEHistory/pack source.bat
new file mode 100644
index 0000000000..2efcf2508e
--- /dev/null
+++ b/plugins/IEHistory/pack source.bat
@@ -0,0 +1,8 @@
+for /F "tokens=5-9* delims=. " %%i in (docs\IEHistory_readme.txt) do (call :Pack %%i %%j %%k %%l; exit)
+
+:Pack
+d:\usr\PowerArchiver\pacl\pacomp.exe -p -a -c2 "IEHistory src %1.%2.%3.%4.zip" @files_source.txt -x*.zip -x*.ncb -x*.user
+exit
+
+error:
+echo "Error packing IEHistory"
diff --git a/plugins/IEHistory/pack symbols.bat b/plugins/IEHistory/pack symbols.bat
new file mode 100644
index 0000000000..d6f50920b8
--- /dev/null
+++ b/plugins/IEHistory/pack symbols.bat
@@ -0,0 +1,8 @@
+@echo off
+if NOT EXIST "symbols\%1 - %3" (
+ mkdir "symbols\%1 - %3"
+)
+xcopy "%2\Release\*.pdb" "symbols\%1 - %3\*" /EXCLUDE:symbols_exclude.txt /Y
+
+d:\usr\PowerArchiver\pacl\pacomp.exe -p -a -r -c2 "symbols - %1.zip" "symbols\*.*"
+rmdir "symbols\" /Q /S \ No newline at end of file
diff --git a/plugins/IEHistory/pack.bat b/plugins/IEHistory/pack.bat
new file mode 100644
index 0000000000..f14ab0ea53
--- /dev/null
+++ b/plugins/IEHistory/pack.bat
@@ -0,0 +1,10 @@
+for /F "tokens=5-9* delims=. " %%i in (docs\IEHistory_readme.txt) do (call :Pack %%i %%j %%k %%l; exit)
+
+:Pack
+D:\usr\PowerArchiver\pacl\pacomp.exe -a -c2 "IEHistory %1.%2.%3.%4.zip" @files_release.txt
+D:\usr\PowerArchiver\pacl\pacomp.exe -p -a -c2 "IEHistory %1.%2.%3.%4.zip" docs\*.* *.caca
+call "pack symbols.bat" IEHistory IEHistory %1.%2.%3.%4
+exit
+
+error:
+echo "Error packing IEHistory" \ No newline at end of file
diff --git a/plugins/IEHistory/symbols_exclude.txt b/plugins/IEHistory/symbols_exclude.txt
new file mode 100644
index 0000000000..361cf2448b
--- /dev/null
+++ b/plugins/IEHistory/symbols_exclude.txt
@@ -0,0 +1 @@
+vc80.pdb \ No newline at end of file