summaryrefslogtreecommitdiff
path: root/plugins/StatusPlugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/StatusPlugins')
-rw-r--r--plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway.dep245
-rw-r--r--plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway.dsp245
-rw-r--r--plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway.mak585
-rw-r--r--plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway.vcproj632
-rw-r--r--plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway_10.vcxproj486
-rw-r--r--plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway_10.vcxproj.filters82
-rw-r--r--plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway_8.vcproj862
-rw-r--r--plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway_9.vcproj1055
-rw-r--r--plugins/StatusPlugins/AdvancedAutoAway/advancedautoaway.cpp638
-rw-r--r--plugins/StatusPlugins/AdvancedAutoAway/advancedautoaway.h95
-rw-r--r--plugins/StatusPlugins/AdvancedAutoAway/fsm.jpgbin0 -> 62997 bytes
-rw-r--r--plugins/StatusPlugins/AdvancedAutoAway/fsm.sdrbin0 -> 18219 bytes
-rw-r--r--plugins/StatusPlugins/AdvancedAutoAway/main.cpp110
-rw-r--r--plugins/StatusPlugins/AdvancedAutoAway/msgoptions.cpp165
-rw-r--r--plugins/StatusPlugins/AdvancedAutoAway/options.cpp553
-rw-r--r--plugins/StatusPlugins/AdvancedAutoAway/pack.cmd42
-rw-r--r--plugins/StatusPlugins/AdvancedAutoAway/trigger_aaa.cpp161
-rw-r--r--plugins/StatusPlugins/AdvancedAutoAway/trigger_aaa.h7
-rw-r--r--plugins/StatusPlugins/AdvancedAutoAway/vc6.rc2
-rw-r--r--plugins/StatusPlugins/AdvancedAutoAway/version.h56
-rw-r--r--plugins/StatusPlugins/KeepStatus/KeepStatus.dep236
-rw-r--r--plugins/StatusPlugins/KeepStatus/KeepStatus.dsp249
-rw-r--r--plugins/StatusPlugins/KeepStatus/KeepStatus.mak653
-rw-r--r--plugins/StatusPlugins/KeepStatus/KeepStatus.txt145
-rw-r--r--plugins/StatusPlugins/KeepStatus/KeepStatus.vcproj514
-rw-r--r--plugins/StatusPlugins/KeepStatus/KeepStatus_10.vcxproj467
-rw-r--r--plugins/StatusPlugins/KeepStatus/KeepStatus_10.vcxproj.filters65
-rw-r--r--plugins/StatusPlugins/KeepStatus/KeepStatus_8.vcproj810
-rw-r--r--plugins/StatusPlugins/KeepStatus/KeepStatus_9.vcproj1293
-rw-r--r--plugins/StatusPlugins/KeepStatus/action_keepstatus.cpp185
-rw-r--r--plugins/StatusPlugins/KeepStatus/keepstatus.cpp1335
-rw-r--r--plugins/StatusPlugins/KeepStatus/keepstatus.h138
-rw-r--r--plugins/StatusPlugins/KeepStatus/main.cpp138
-rw-r--r--plugins/StatusPlugins/KeepStatus/options.cpp610
-rw-r--r--plugins/StatusPlugins/KeepStatus/pack.cmd44
-rw-r--r--plugins/StatusPlugins/KeepStatus/trigger_keepstatus.cpp181
-rw-r--r--plugins/StatusPlugins/KeepStatus/vc6.rc2
-rw-r--r--plugins/StatusPlugins/KeepStatus/version.h56
-rw-r--r--plugins/StatusPlugins/StartupStatus/StartupStatus.dep291
-rw-r--r--plugins/StatusPlugins/StartupStatus/StartupStatus.dsp244
-rw-r--r--plugins/StatusPlugins/StartupStatus/StartupStatus.mak342
-rw-r--r--plugins/StatusPlugins/StartupStatus/StartupStatus.rc72
-rw-r--r--plugins/StatusPlugins/StartupStatus/StartupStatus.vcproj576
-rw-r--r--plugins/StatusPlugins/StartupStatus/StartupStatus_10.vcxproj466
-rw-r--r--plugins/StatusPlugins/StartupStatus/StartupStatus_10.vcxproj.filters68
-rw-r--r--plugins/StatusPlugins/StartupStatus/StartupStatus_8.vcproj790
-rw-r--r--plugins/StatusPlugins/StartupStatus/StartupStatus_9.vcproj1049
-rw-r--r--plugins/StatusPlugins/StartupStatus/main.cpp141
-rw-r--r--plugins/StatusPlugins/StartupStatus/options.cpp1034
-rw-r--r--plugins/StatusPlugins/StartupStatus/pack.cmd42
-rw-r--r--plugins/StatusPlugins/StartupStatus/profiles.cpp423
-rw-r--r--plugins/StatusPlugins/StartupStatus/res/ttbDown.bmpbin0 -> 1398 bytes
-rw-r--r--plugins/StatusPlugins/StartupStatus/res/ttbDown.icobin0 -> 894 bytes
-rw-r--r--plugins/StatusPlugins/StartupStatus/res/ttbUp.bmpbin0 -> 1398 bytes
-rw-r--r--plugins/StatusPlugins/StartupStatus/res/ttbUp.icobin0 -> 894 bytes
-rw-r--r--plugins/StatusPlugins/StartupStatus/startupstatus.cpp491
-rw-r--r--plugins/StatusPlugins/StartupStatus/startupstatus.h165
-rw-r--r--plugins/StatusPlugins/StartupStatus/toolbars.cpp191
-rw-r--r--plugins/StatusPlugins/StartupStatus/vc6.rc3
-rw-r--r--plugins/StatusPlugins/StartupStatus/version.h56
-rw-r--r--plugins/StatusPlugins/StatusPlugins.dsw53
-rw-r--r--plugins/StatusPlugins/StatusPlugins_10.sln74
-rw-r--r--plugins/StatusPlugins/commonstatus.cpp510
-rw-r--r--plugins/StatusPlugins/commonstatus.h105
-rw-r--r--plugins/StatusPlugins/confirmdialog.cpp442
-rw-r--r--plugins/StatusPlugins/copying.txt346
-rw-r--r--plugins/StatusPlugins/dbhelpers.h100
-rw-r--r--plugins/StatusPlugins/includes/m_NewAwaySys.h119
-rw-r--r--plugins/StatusPlugins/includes/m_toolbar.h88
-rw-r--r--plugins/StatusPlugins/includes/m_toptoolbar.h125
-rw-r--r--plugins/StatusPlugins/includes/m_trigger.h1024
-rw-r--r--plugins/StatusPlugins/includes/m_updater.h146
-rw-r--r--plugins/StatusPlugins/includes/m_variables.h668
-rw-r--r--plugins/StatusPlugins/includes/m_vsramm.h11
-rw-r--r--plugins/StatusPlugins/lpgen.pl212
-rw-r--r--plugins/StatusPlugins/m_statusplugins.h154
-rw-r--r--plugins/StatusPlugins/notick.icobin0 -> 318 bytes
-rw-r--r--plugins/StatusPlugins/notick1.icobin0 -> 318 bytes
-rw-r--r--plugins/StatusPlugins/resource.h175
-rw-r--r--plugins/StatusPlugins/resource.rc540
-rw-r--r--plugins/StatusPlugins/statusplugins-translation.txt225
-rw-r--r--plugins/StatusPlugins/useronli.icobin0 -> 1406 bytes
-rw-r--r--plugins/StatusPlugins/version.rc40
83 files changed, 24743 insertions, 0 deletions
diff --git a/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway.dep b/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway.dep
new file mode 100644
index 0000000000..879fb1d977
--- /dev/null
+++ b/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway.dep
@@ -0,0 +1,245 @@
+# Microsoft Developer Studio Generated Dependency File, included by AdvancedAutoAway.mak
+
+.\advancedautoaway.cpp : \
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_idle.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_options.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_popup.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_system_cpp.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\..\include\win2k.h"\
+ "..\..\helpers\gen_helpers.h"\
+ "..\commonstatus.h"\
+ "..\includes\m_NewAwaySys.h"\
+ "..\includes\m_updater.h"\
+ "..\includes\m_variables.h"\
+ "..\includes\m_vsramm.h"\
+ "..\m_statusplugins.h"\
+ ".\advancedautoaway.h"\
+ ".\version.h"\
+
+
+..\commonstatus.cpp : \
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_popup.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_system_cpp.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\..\include\win2k.h"\
+ "..\..\helpers\gen_helpers.h"\
+ "..\commonstatus.h"\
+ "..\includes\m_NewAwaySys.h"\
+ "..\includes\m_updater.h"\
+ "..\includes\m_variables.h"\
+ "..\includes\m_vsramm.h"\
+ "..\m_statusplugins.h"\
+
+
+..\confirmdialog.cpp : \
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_popup.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_system_cpp.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\..\include\win2k.h"\
+ "..\..\helpers\gen_helpers.h"\
+ "..\commonstatus.h"\
+ "..\includes\m_NewAwaySys.h"\
+ "..\includes\m_updater.h"\
+ "..\includes\m_variables.h"\
+ "..\includes\m_vsramm.h"\
+ "..\m_statusplugins.h"\
+
+
+..\..\helpers\gen_helpers.cpp : \
+ "..\..\..\include\m_addcontact.h"\
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clc.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_clistint.h"\
+ "..\..\..\include\m_clui.h"\
+ "..\..\..\include\m_contacts.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_email.h"\
+ "..\..\..\include\m_file.h"\
+ "..\..\..\include\m_findadd.h"\
+ "..\..\..\include\m_genmenu.h"\
+ "..\..\..\include\m_history.h"\
+ "..\..\..\include\m_idle.h"\
+ "..\..\..\include\m_ignore.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_message.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_options.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protomod.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_skin.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_userinfo.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\helpers\commonheaders.h"\
+ "..\..\helpers\gen_helpers.h"\
+ "..\includes\m_variables.h"\
+
+
+.\main.cpp : \
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_idle.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_options.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_popup.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_system_cpp.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\..\include\win2k.h"\
+ "..\..\helpers\gen_helpers.h"\
+ "..\commonstatus.h"\
+ "..\includes\m_NewAwaySys.h"\
+ "..\includes\m_updater.h"\
+ "..\includes\m_variables.h"\
+ "..\includes\m_vsramm.h"\
+ "..\m_statusplugins.h"\
+ ".\advancedautoaway.h"\
+ ".\version.h"\
+
+
+.\msgoptions.cpp : \
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_idle.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_options.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_popup.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_system_cpp.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\..\include\win2k.h"\
+ "..\..\helpers\gen_helpers.h"\
+ "..\commonstatus.h"\
+ "..\includes\m_NewAwaySys.h"\
+ "..\includes\m_updater.h"\
+ "..\includes\m_variables.h"\
+ "..\includes\m_vsramm.h"\
+ "..\m_statusplugins.h"\
+ ".\advancedautoaway.h"\
+ ".\version.h"\
+
+
+.\options.cpp : \
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_idle.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_options.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_popup.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_system_cpp.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\..\include\win2k.h"\
+ "..\..\helpers\gen_helpers.h"\
+ "..\commonstatus.h"\
+ "..\includes\m_NewAwaySys.h"\
+ "..\includes\m_updater.h"\
+ "..\includes\m_variables.h"\
+ "..\includes\m_vsramm.h"\
+ "..\m_statusplugins.h"\
+ ".\advancedautoaway.h"\
+ ".\version.h"\
+
+
+.\trigger_aaa.cpp : \
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_idle.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_options.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_popup.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_system_cpp.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\..\include\win2k.h"\
+ "..\..\helpers\gen_helpers.h"\
+ "..\commonstatus.h"\
+ "..\includes\m_NewAwaySys.h"\
+ "..\includes\m_trigger.h"\
+ "..\includes\m_updater.h"\
+ "..\includes\m_variables.h"\
+ "..\includes\m_vsramm.h"\
+ "..\m_statusplugins.h"\
+ ".\advancedautoaway.h"\
+ ".\trigger_aaa.h"\
+ ".\version.h"\
+
+
+.\vc6.rc : \
+ "..\resource.rc"\
+
diff --git a/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway.dsp b/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway.dsp
new file mode 100644
index 0000000000..d0c360bfed
--- /dev/null
+++ b/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway.dsp
@@ -0,0 +1,245 @@
+# Microsoft Developer Studio Project File - Name="AdvancedAutoAway" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=AdvancedAutoAway - Win32 Debug Unicode
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "AdvancedAutoAway.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "AdvancedAutoAway.mak" CFG="AdvancedAutoAway - Win32 Debug Unicode"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "AdvancedAutoAway - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "AdvancedAutoAway - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "AdvancedAutoAway - Win32 Debug Unicode" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "AdvancedAutoAway - Win32 Release Unicode" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "AdvancedAutoAway - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ADVANCEDAUTOAWAY_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ADVANCEDAUTOAWAY_EXPORTS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib /nologo /base:"0x11bd0000" /dll /debug /machine:I386 /nodefaultlib /out:"../../../bin/release/plugins/AdvancedAutoAway.dll"
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ADVANCEDAUTOAWAY_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ADVANCEDAUTOAWAY_EXPORTS" /FR /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /dll /debug /machine:I386 /out:"../../../bin/debug/plugins/AdvancedAutoAway.dll" /pdbtype:sept
+# SUBTRACT LINK32 /pdb:none
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug Unicode"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "AdvancedAutoAway___Win32_Debug_Unicode"
+# PROP BASE Intermediate_Dir "AdvancedAutoAway___Win32_Debug_Unicode"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_Unicode"
+# PROP Intermediate_Dir "Debug_Unicode"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ADVANCEDAUTOAWAY_EXPORTS" /FR /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /FR /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /dll /debug /machine:I386 /out:"../../../bin/debug/plugins/AdvancedAutoAway.dll" /pdbtype:sept
+# SUBTRACT BASE LINK32 /pdb:none
+# ADD LINK32 comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /dll /debug /machine:I386 /out:"../../../bin/Debug Unicode/plugins/AdvancedAutoAway.dll" /pdbtype:sept
+# SUBTRACT LINK32 /pdb:none
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Release Unicode"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "AdvancedAutoAway___Win32_Release_Unicode"
+# PROP BASE Intermediate_Dir "AdvancedAutoAway___Win32_Release_Unicode"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_Unicode"
+# PROP Intermediate_Dir "Release_Unicode"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ADVANCEDAUTOAWAY_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib /nologo /base:"0x11bd0000" /dll /debug /machine:I386 /nodefaultlib /out:"../../../bin/release/plugins/AdvancedAutoAway.dll"
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib /nologo /base:"0x11bd0000" /dll /debug /machine:I386 /nodefaultlib /out:"../../../bin/Release Unicode/plugins/AdvancedAutoAway.dll"
+
+!ENDIF
+
+# Begin Target
+
+# Name "AdvancedAutoAway - Win32 Release"
+# Name "AdvancedAutoAway - Win32 Debug"
+# Name "AdvancedAutoAway - Win32 Debug Unicode"
+# Name "AdvancedAutoAway - Win32 Release Unicode"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\advancedautoaway.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\commonstatus.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\confirmdialog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\helpers\gen_helpers.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\main.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\msgoptions.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\options.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\trigger_aaa.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\advancedautoaway.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\commonstatus.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\m_statusplugins.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\resource.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\trigger_aaa.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\vc6.rc
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\Release\AdvancedAutoAway.txt
+
+!IF "$(CFG)" == "AdvancedAutoAway - Win32 Release"
+
+# PROP Exclude_From_Build 1
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug"
+
+# PROP Exclude_From_Build 1
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug Unicode"
+
+# PROP BASE Exclude_From_Build 1
+# PROP Exclude_From_Build 1
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Release Unicode"
+
+# PROP BASE Exclude_From_Build 1
+# PROP Exclude_From_Build 1
+
+!ENDIF
+
+# End Source File
+# End Target
+# End Project
diff --git a/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway.mak b/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway.mak
new file mode 100644
index 0000000000..d4ab6d92cb
--- /dev/null
+++ b/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway.mak
@@ -0,0 +1,585 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on AdvancedAutoAway.dsp
+!IF "$(CFG)" == ""
+CFG=AdvancedAutoAway - Win32 Debug Unicode
+!MESSAGE No configuration specified. Defaulting to AdvancedAutoAway - Win32 Debug Unicode.
+!ENDIF
+
+!IF "$(CFG)" != "AdvancedAutoAway - Win32 Release" && "$(CFG)" != "AdvancedAutoAway - Win32 Debug" && "$(CFG)" != "AdvancedAutoAway - Win32 Debug Unicode" && "$(CFG)" != "AdvancedAutoAway - Win32 Release Unicode"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "AdvancedAutoAway.mak" CFG="AdvancedAutoAway - Win32 Debug Unicode"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "AdvancedAutoAway - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "AdvancedAutoAway - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "AdvancedAutoAway - Win32 Debug Unicode" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "AdvancedAutoAway - Win32 Release Unicode" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "AdvancedAutoAway - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+
+ALL : "..\..\..\bin\release\plugins\AdvancedAutoAway.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\advancedautoaway.obj"
+ -@erase "$(INTDIR)\commonstatus.obj"
+ -@erase "$(INTDIR)\confirmdialog.obj"
+ -@erase "$(INTDIR)\gen_helpers.obj"
+ -@erase "$(INTDIR)\main.obj"
+ -@erase "$(INTDIR)\msgoptions.obj"
+ -@erase "$(INTDIR)\options.obj"
+ -@erase "$(INTDIR)\trigger_aaa.obj"
+ -@erase "$(INTDIR)\vc6.res"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\AdvancedAutoAway.exp"
+ -@erase "$(OUTDIR)\AdvancedAutoAway.lib"
+ -@erase "$(OUTDIR)\AdvancedAutoAway.pdb"
+ -@erase "..\..\..\bin\release\plugins\AdvancedAutoAway.dll"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ADVANCEDAUTOAWAY_EXPORTS" /Fp"$(INTDIR)\AdvancedAutoAway.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\vc6.res" /d "NDEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\AdvancedAutoAway.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib /nologo /base:"0x11bd0000" /dll /incremental:no /pdb:"$(OUTDIR)\AdvancedAutoAway.pdb" /debug /machine:I386 /nodefaultlib /out:"../../../bin/release/plugins/AdvancedAutoAway.dll" /implib:"$(OUTDIR)\AdvancedAutoAway.lib"
+LINK32_OBJS= \
+ "$(INTDIR)\advancedautoaway.obj" \
+ "$(INTDIR)\commonstatus.obj" \
+ "$(INTDIR)\confirmdialog.obj" \
+ "$(INTDIR)\gen_helpers.obj" \
+ "$(INTDIR)\main.obj" \
+ "$(INTDIR)\msgoptions.obj" \
+ "$(INTDIR)\options.obj" \
+ "$(INTDIR)\trigger_aaa.obj" \
+ "$(INTDIR)\vc6.res"
+
+"..\..\..\bin\release\plugins\AdvancedAutoAway.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "..\..\..\bin\debug\plugins\AdvancedAutoAway.dll" "$(OUTDIR)\AdvancedAutoAway.bsc"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\advancedautoaway.obj"
+ -@erase "$(INTDIR)\advancedautoaway.sbr"
+ -@erase "$(INTDIR)\commonstatus.obj"
+ -@erase "$(INTDIR)\commonstatus.sbr"
+ -@erase "$(INTDIR)\confirmdialog.obj"
+ -@erase "$(INTDIR)\confirmdialog.sbr"
+ -@erase "$(INTDIR)\gen_helpers.obj"
+ -@erase "$(INTDIR)\gen_helpers.sbr"
+ -@erase "$(INTDIR)\main.obj"
+ -@erase "$(INTDIR)\main.sbr"
+ -@erase "$(INTDIR)\msgoptions.obj"
+ -@erase "$(INTDIR)\msgoptions.sbr"
+ -@erase "$(INTDIR)\options.obj"
+ -@erase "$(INTDIR)\options.sbr"
+ -@erase "$(INTDIR)\trigger_aaa.obj"
+ -@erase "$(INTDIR)\trigger_aaa.sbr"
+ -@erase "$(INTDIR)\vc6.res"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\AdvancedAutoAway.bsc"
+ -@erase "$(OUTDIR)\AdvancedAutoAway.exp"
+ -@erase "$(OUTDIR)\AdvancedAutoAway.lib"
+ -@erase "$(OUTDIR)\AdvancedAutoAway.pdb"
+ -@erase "..\..\..\bin\debug\plugins\AdvancedAutoAway.dll"
+ -@erase "..\..\..\bin\debug\plugins\AdvancedAutoAway.ilk"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ADVANCEDAUTOAWAY_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\AdvancedAutoAway.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\vc6.res" /d "_DEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\AdvancedAutoAway.bsc"
+BSC32_SBRS= \
+ "$(INTDIR)\advancedautoaway.sbr" \
+ "$(INTDIR)\commonstatus.sbr" \
+ "$(INTDIR)\confirmdialog.sbr" \
+ "$(INTDIR)\gen_helpers.sbr" \
+ "$(INTDIR)\main.sbr" \
+ "$(INTDIR)\msgoptions.sbr" \
+ "$(INTDIR)\options.sbr" \
+ "$(INTDIR)\trigger_aaa.sbr"
+
+"$(OUTDIR)\AdvancedAutoAway.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
+ $(BSC32) @<<
+ $(BSC32_FLAGS) $(BSC32_SBRS)
+<<
+
+LINK32=link.exe
+LINK32_FLAGS=comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\AdvancedAutoAway.pdb" /debug /machine:I386 /out:"../../../bin/debug/plugins/AdvancedAutoAway.dll" /implib:"$(OUTDIR)\AdvancedAutoAway.lib" /pdbtype:sept
+LINK32_OBJS= \
+ "$(INTDIR)\advancedautoaway.obj" \
+ "$(INTDIR)\commonstatus.obj" \
+ "$(INTDIR)\confirmdialog.obj" \
+ "$(INTDIR)\gen_helpers.obj" \
+ "$(INTDIR)\main.obj" \
+ "$(INTDIR)\msgoptions.obj" \
+ "$(INTDIR)\options.obj" \
+ "$(INTDIR)\trigger_aaa.obj" \
+ "$(INTDIR)\vc6.res"
+
+"..\..\..\bin\debug\plugins\AdvancedAutoAway.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug Unicode"
+
+OUTDIR=.\Debug_Unicode
+INTDIR=.\Debug_Unicode
+# Begin Custom Macros
+OutDir=.\Debug_Unicode
+# End Custom Macros
+
+ALL : "..\..\..\bin\Debug Unicode\plugins\AdvancedAutoAway.dll" "$(OUTDIR)\AdvancedAutoAway.bsc"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\advancedautoaway.obj"
+ -@erase "$(INTDIR)\advancedautoaway.sbr"
+ -@erase "$(INTDIR)\commonstatus.obj"
+ -@erase "$(INTDIR)\commonstatus.sbr"
+ -@erase "$(INTDIR)\confirmdialog.obj"
+ -@erase "$(INTDIR)\confirmdialog.sbr"
+ -@erase "$(INTDIR)\gen_helpers.obj"
+ -@erase "$(INTDIR)\gen_helpers.sbr"
+ -@erase "$(INTDIR)\main.obj"
+ -@erase "$(INTDIR)\main.sbr"
+ -@erase "$(INTDIR)\msgoptions.obj"
+ -@erase "$(INTDIR)\msgoptions.sbr"
+ -@erase "$(INTDIR)\options.obj"
+ -@erase "$(INTDIR)\options.sbr"
+ -@erase "$(INTDIR)\trigger_aaa.obj"
+ -@erase "$(INTDIR)\trigger_aaa.sbr"
+ -@erase "$(INTDIR)\vc6.res"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\AdvancedAutoAway.bsc"
+ -@erase "$(OUTDIR)\AdvancedAutoAway.exp"
+ -@erase "$(OUTDIR)\AdvancedAutoAway.lib"
+ -@erase "$(OUTDIR)\AdvancedAutoAway.pdb"
+ -@erase "..\..\..\bin\Debug Unicode\plugins\AdvancedAutoAway.dll"
+ -@erase "..\..\..\bin\Debug Unicode\plugins\AdvancedAutoAway.ilk"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\AdvancedAutoAway.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\vc6.res" /d "_DEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\AdvancedAutoAway.bsc"
+BSC32_SBRS= \
+ "$(INTDIR)\advancedautoaway.sbr" \
+ "$(INTDIR)\commonstatus.sbr" \
+ "$(INTDIR)\confirmdialog.sbr" \
+ "$(INTDIR)\gen_helpers.sbr" \
+ "$(INTDIR)\main.sbr" \
+ "$(INTDIR)\msgoptions.sbr" \
+ "$(INTDIR)\options.sbr" \
+ "$(INTDIR)\trigger_aaa.sbr"
+
+"$(OUTDIR)\AdvancedAutoAway.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
+ $(BSC32) @<<
+ $(BSC32_FLAGS) $(BSC32_SBRS)
+<<
+
+LINK32=link.exe
+LINK32_FLAGS=comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\AdvancedAutoAway.pdb" /debug /machine:I386 /out:"../../../bin/Debug Unicode/plugins/AdvancedAutoAway.dll" /implib:"$(OUTDIR)\AdvancedAutoAway.lib" /pdbtype:sept
+LINK32_OBJS= \
+ "$(INTDIR)\advancedautoaway.obj" \
+ "$(INTDIR)\commonstatus.obj" \
+ "$(INTDIR)\confirmdialog.obj" \
+ "$(INTDIR)\gen_helpers.obj" \
+ "$(INTDIR)\main.obj" \
+ "$(INTDIR)\msgoptions.obj" \
+ "$(INTDIR)\options.obj" \
+ "$(INTDIR)\trigger_aaa.obj" \
+ "$(INTDIR)\vc6.res"
+
+"..\..\..\bin\Debug Unicode\plugins\AdvancedAutoAway.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Release Unicode"
+
+OUTDIR=.\Release_Unicode
+INTDIR=.\Release_Unicode
+
+ALL : "..\..\..\bin\Release Unicode\plugins\AdvancedAutoAway.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\advancedautoaway.obj"
+ -@erase "$(INTDIR)\commonstatus.obj"
+ -@erase "$(INTDIR)\confirmdialog.obj"
+ -@erase "$(INTDIR)\gen_helpers.obj"
+ -@erase "$(INTDIR)\main.obj"
+ -@erase "$(INTDIR)\msgoptions.obj"
+ -@erase "$(INTDIR)\options.obj"
+ -@erase "$(INTDIR)\trigger_aaa.obj"
+ -@erase "$(INTDIR)\vc6.res"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\AdvancedAutoAway.exp"
+ -@erase "$(OUTDIR)\AdvancedAutoAway.lib"
+ -@erase "$(OUTDIR)\AdvancedAutoAway.pdb"
+ -@erase "..\..\..\bin\Release Unicode\plugins\AdvancedAutoAway.dll"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /Fp"$(INTDIR)\AdvancedAutoAway.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\vc6.res" /d "NDEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\AdvancedAutoAway.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib /nologo /base:"0x11bd0000" /dll /incremental:no /pdb:"$(OUTDIR)\AdvancedAutoAway.pdb" /debug /machine:I386 /nodefaultlib /out:"../../../bin/Release Unicode/plugins/AdvancedAutoAway.dll" /implib:"$(OUTDIR)\AdvancedAutoAway.lib"
+LINK32_OBJS= \
+ "$(INTDIR)\advancedautoaway.obj" \
+ "$(INTDIR)\commonstatus.obj" \
+ "$(INTDIR)\confirmdialog.obj" \
+ "$(INTDIR)\gen_helpers.obj" \
+ "$(INTDIR)\main.obj" \
+ "$(INTDIR)\msgoptions.obj" \
+ "$(INTDIR)\options.obj" \
+ "$(INTDIR)\trigger_aaa.obj" \
+ "$(INTDIR)\vc6.res"
+
+"..\..\..\bin\Release Unicode\plugins\AdvancedAutoAway.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("AdvancedAutoAway.dep")
+!INCLUDE "AdvancedAutoAway.dep"
+!ELSE
+!MESSAGE Warning: cannot find "AdvancedAutoAway.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "AdvancedAutoAway - Win32 Release" || "$(CFG)" == "AdvancedAutoAway - Win32 Debug" || "$(CFG)" == "AdvancedAutoAway - Win32 Debug Unicode" || "$(CFG)" == "AdvancedAutoAway - Win32 Release Unicode"
+SOURCE=.\advancedautoaway.cpp
+
+!IF "$(CFG)" == "AdvancedAutoAway - Win32 Release"
+
+
+"$(INTDIR)\advancedautoaway.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug"
+
+
+"$(INTDIR)\advancedautoaway.obj" "$(INTDIR)\advancedautoaway.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug Unicode"
+
+
+"$(INTDIR)\advancedautoaway.obj" "$(INTDIR)\advancedautoaway.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Release Unicode"
+
+
+"$(INTDIR)\advancedautoaway.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ENDIF
+
+SOURCE=..\commonstatus.cpp
+
+!IF "$(CFG)" == "AdvancedAutoAway - Win32 Release"
+
+
+"$(INTDIR)\commonstatus.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug"
+
+
+"$(INTDIR)\commonstatus.obj" "$(INTDIR)\commonstatus.sbr" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug Unicode"
+
+
+"$(INTDIR)\commonstatus.obj" "$(INTDIR)\commonstatus.sbr" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Release Unicode"
+
+
+"$(INTDIR)\commonstatus.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF
+
+SOURCE=..\confirmdialog.cpp
+
+!IF "$(CFG)" == "AdvancedAutoAway - Win32 Release"
+
+
+"$(INTDIR)\confirmdialog.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug"
+
+
+"$(INTDIR)\confirmdialog.obj" "$(INTDIR)\confirmdialog.sbr" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug Unicode"
+
+
+"$(INTDIR)\confirmdialog.obj" "$(INTDIR)\confirmdialog.sbr" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Release Unicode"
+
+
+"$(INTDIR)\confirmdialog.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF
+
+SOURCE=..\..\helpers\gen_helpers.cpp
+
+!IF "$(CFG)" == "AdvancedAutoAway - Win32 Release"
+
+
+"$(INTDIR)\gen_helpers.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug"
+
+
+"$(INTDIR)\gen_helpers.obj" "$(INTDIR)\gen_helpers.sbr" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug Unicode"
+
+
+"$(INTDIR)\gen_helpers.obj" "$(INTDIR)\gen_helpers.sbr" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Release Unicode"
+
+
+"$(INTDIR)\gen_helpers.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF
+
+SOURCE=.\main.cpp
+
+!IF "$(CFG)" == "AdvancedAutoAway - Win32 Release"
+
+
+"$(INTDIR)\main.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug"
+
+
+"$(INTDIR)\main.obj" "$(INTDIR)\main.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug Unicode"
+
+
+"$(INTDIR)\main.obj" "$(INTDIR)\main.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Release Unicode"
+
+
+"$(INTDIR)\main.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ENDIF
+
+SOURCE=.\msgoptions.cpp
+
+!IF "$(CFG)" == "AdvancedAutoAway - Win32 Release"
+
+
+"$(INTDIR)\msgoptions.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug"
+
+
+"$(INTDIR)\msgoptions.obj" "$(INTDIR)\msgoptions.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug Unicode"
+
+
+"$(INTDIR)\msgoptions.obj" "$(INTDIR)\msgoptions.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Release Unicode"
+
+
+"$(INTDIR)\msgoptions.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ENDIF
+
+SOURCE=.\options.cpp
+
+!IF "$(CFG)" == "AdvancedAutoAway - Win32 Release"
+
+
+"$(INTDIR)\options.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug"
+
+
+"$(INTDIR)\options.obj" "$(INTDIR)\options.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug Unicode"
+
+
+"$(INTDIR)\options.obj" "$(INTDIR)\options.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Release Unicode"
+
+
+"$(INTDIR)\options.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ENDIF
+
+SOURCE=.\trigger_aaa.cpp
+
+!IF "$(CFG)" == "AdvancedAutoAway - Win32 Release"
+
+
+"$(INTDIR)\trigger_aaa.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug"
+
+
+"$(INTDIR)\trigger_aaa.obj" "$(INTDIR)\trigger_aaa.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Debug Unicode"
+
+
+"$(INTDIR)\trigger_aaa.obj" "$(INTDIR)\trigger_aaa.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "AdvancedAutoAway - Win32 Release Unicode"
+
+
+"$(INTDIR)\trigger_aaa.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ENDIF
+
+SOURCE=.\vc6.rc
+
+"$(INTDIR)\vc6.res" : $(SOURCE) "$(INTDIR)"
+ $(RSC) $(RSC_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway.vcproj b/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway.vcproj
new file mode 100644
index 0000000000..69cbe22d19
--- /dev/null
+++ b/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway.vcproj
@@ -0,0 +1,632 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="AdvancedAutoAway"
+ ProjectGUID="{66503A70-B1E8-4545-B4FF-2108DFB40C72}"
+ SccProjectName=""
+ SccLocalPath="">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="3"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ BrowseInformation="1"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="comctl32.lib ws2_32.lib"
+ SuppressStartupBanner="TRUE"
+ GenerateDebugInformation="TRUE"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/AdvancedAutoAway.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="1"
+ FavorSizeOrSpeed="2"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS"
+ StringPooling="TRUE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="3"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="vc7to6.lib comctl32.lib"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="../../../lib"
+ IgnoreAllDefaultLibraries="TRUE"
+ GenerateDebugInformation="TRUE"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ BaseAddress="0x11bd0000"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/AdvancedAutoAway.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="3"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ BrowseInformation="1"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="comctl32.lib ws2_32.lib"
+ SuppressStartupBanner="TRUE"
+ GenerateDebugInformation="TRUE"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/AdvancedAutoAway.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="1"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="1"
+ FavorSizeOrSpeed="2"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS"
+ StringPooling="TRUE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="3"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="vc7to6.lib comctl32.lib"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="../../../lib"
+ IgnoreAllDefaultLibraries="TRUE"
+ GenerateDebugInformation="TRUE"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ BaseAddress="0x11bd0000"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/AdvancedAutoAway.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+ <File
+ RelativePath="advancedautoaway.cpp">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\commonstatus.cpp">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\confirmdialog.cpp">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"
+ PrecompiledHeaderThrough="commonstatus.h"
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PrecompiledHeaderThrough="commonstatus.h"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"
+ PrecompiledHeaderThrough="commonstatus.h"
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PrecompiledHeaderThrough="commonstatus.h"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\helpers\gen_helpers.cpp">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="0"
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="0"
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\main.cpp">
+ </File>
+ <File
+ RelativePath="msgoptions.cpp">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="options.cpp">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="trigger_aaa.cpp">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl">
+ <File
+ RelativePath="advancedautoaway.h">
+ </File>
+ <File
+ RelativePath="..\commonstatus.h">
+ </File>
+ <File
+ RelativePath="..\m_statusplugins.h">
+ </File>
+ <File
+ RelativePath="..\resource.h">
+ </File>
+ <File
+ RelativePath="trigger_aaa.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+ <File
+ RelativePath="..\icon1.ico">
+ </File>
+ <File
+ RelativePath="..\resource.rc">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories="\Miranda\miranda\plugins\StatusPlugins"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories="\Miranda\miranda\plugins\StatusPlugins"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories="\Miranda\miranda\plugins\StatusPlugins"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories="\Miranda\miranda\plugins\StatusPlugins"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\useronli.ico">
+ </File>
+ </Filter>
+ <File
+ RelativePath="Release\AdvancedAutoAway.txt">
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCustomBuildTool"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCustomBuildTool"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCustomBuildTool"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCustomBuildTool"/>
+ </FileConfiguration>
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway_10.vcxproj b/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway_10.vcxproj
new file mode 100644
index 0000000000..493bbb49ce
--- /dev/null
+++ b/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway_10.vcxproj
@@ -0,0 +1,486 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug Unicode|Win32">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug Unicode|x64">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|Win32">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|x64">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>AdvancedAutoAway</ProjectName>
+ <ProjectGuid>{66503A70-B1E8-4545-B4FF-2108DFB40C72}</ProjectGuid>
+ <RootNamespace>AdvancedAutoAway</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</IgnoreImportLibrary>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</IgnoreImportLibrary>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">true</IgnoreImportLibrary>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">true</IgnoreImportLibrary>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(SolutionDir)$(Configuration)64/Plugins\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">$(SolutionDir)$(Configuration)64/Plugins\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Configuration)64/Plugins\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Configuration)64/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">$(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\</IntDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Debug/AdvancedAutoAway.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;../includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>../commonstatus.h</PrecompiledHeaderFile>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <CompileAs>Default</CompileAs>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Release/AdvancedAutoAway.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <AdditionalIncludeDirectories>../../../include;../includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>../commonstatus.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <CompileAs>Default</CompileAs>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <ExceptionHandling>false</ExceptionHandling>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+ <BaseAddress>0x11bd0000</BaseAddress>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Debug/AdvancedAutoAway.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;../includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>../commonstatus.h</PrecompiledHeaderFile>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <CompileAs>Default</CompileAs>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Release/AdvancedAutoAway.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <AdditionalIncludeDirectories>../../../include;../includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>../commonstatus.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <CompileAs>Default</CompileAs>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <ExceptionHandling>false</ExceptionHandling>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <BaseAddress>0x11bd0000</BaseAddress>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ <ClCompile>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ <ClCompile>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ <ClCompile>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>false</ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <AdditionalIncludeDirectories>../../../include;../includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>../commonstatus.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <Link />
+ <Link />
+ <Link>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ <Link>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+ <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>false</ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <AdditionalIncludeDirectories>../../../include;../includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>../commonstatus.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <Link />
+ <Link />
+ <Link>
+ <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>../../../include;../includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>../commonstatus.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <Link />
+ <Link />
+ <Link>
+ <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>../../../include;../includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>../commonstatus.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <Link />
+ <Link />
+ <Link>
+ <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="advancedautoaway.cpp" />
+ <ClCompile Include="..\commonstatus.cpp">
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">commonstatus.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ClCompile Include="..\confirmdialog.cpp">
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">commonstatus.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ClCompile Include="..\..\helpers\gen_helpers.cpp">
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
+ </ClCompile>
+ <ClCompile Include="main.cpp" />
+ <ClCompile Include="msgoptions.cpp" />
+ <ClCompile Include="options.cpp" />
+ <ClCompile Include="trigger_aaa.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="advancedautoaway.h" />
+ <ClInclude Include="..\commonstatus.h" />
+ <ClInclude Include="..\m_statusplugins.h" />
+ <ClInclude Include="..\resource.h" />
+ <ClInclude Include="trigger_aaa.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="..\icon1.ico" />
+ <None Include="..\ttbDown.bmp" />
+ <None Include="..\ttbUp.bmp" />
+ <None Include="..\useronli.ico" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="..\resource.rc">
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">\Miranda\miranda\plugins\StatusPlugins;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\Miranda\miranda\plugins\StatusPlugins;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">\Miranda\miranda\plugins\StatusPlugins;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\Miranda\miranda\plugins\StatusPlugins;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ <ResourceCompile Include="..\version.rc" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway_10.vcxproj.filters b/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway_10.vcxproj.filters
new file mode 100644
index 0000000000..beb6fc5f03
--- /dev/null
+++ b/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway_10.vcxproj.filters
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{6b60d98e-019d-49ff-a906-9090232d9213}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{b2e98f78-44f0-4095-880b-46a0ede02428}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{2d794d19-0987-4aa7-940d-2378ba7e4fdb}</UniqueIdentifier>
+ <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="advancedautoaway.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\commonstatus.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\confirmdialog.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\helpers\gen_helpers.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="main.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="msgoptions.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="options.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="trigger_aaa.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="advancedautoaway.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\commonstatus.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\m_statusplugins.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\resource.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="trigger_aaa.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="..\icon1.ico">
+ <Filter>Resource Files</Filter>
+ </None>
+ <None Include="..\ttbDown.bmp">
+ <Filter>Resource Files</Filter>
+ </None>
+ <None Include="..\ttbUp.bmp">
+ <Filter>Resource Files</Filter>
+ </None>
+ <None Include="..\useronli.ico">
+ <Filter>Resource Files</Filter>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="..\resource.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ <ResourceCompile Include="..\version.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway_8.vcproj b/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway_8.vcproj
new file mode 100644
index 0000000000..0c3c4c3645
--- /dev/null
+++ b/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway_8.vcproj
@@ -0,0 +1,862 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="AdvancedAutoAway"
+ ProjectGUID="{66503A70-B1E8-4545-B4FF-2108DFB40C72}"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/AdvancedAutoAway.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ BrowseInformation="1"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="comctl32.lib ws2_32.lib"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ 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="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/AdvancedAutoAway.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ FavorSizeOrSpeed="2"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="comctl32.lib"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ BaseAddress="0x11bd0000"
+ 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="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/AdvancedAutoAway.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ BrowseInformation="1"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="comctl32.lib ws2_32.lib"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ 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="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/AdvancedAutoAway.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ FavorSizeOrSpeed="2"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="comctl32.lib"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ BaseAddress="0x11bd0000"
+ 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;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath="advancedautoaway.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\commonstatus.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\confirmdialog.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ PrecompiledHeaderThrough="commonstatus.h"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ PrecompiledHeaderThrough="commonstatus.h"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\helpers\gen_helpers.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="0"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="0"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\main.cpp"
+ >
+ </File>
+ <File
+ RelativePath="msgoptions.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="options.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="trigger_aaa.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS;$(NoInherit)"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl"
+ >
+ <File
+ RelativePath="advancedautoaway.h"
+ >
+ </File>
+ <File
+ RelativePath="..\commonstatus.h"
+ >
+ </File>
+ <File
+ RelativePath="..\m_statusplugins.h"
+ >
+ </File>
+ <File
+ RelativePath="..\resource.h"
+ >
+ </File>
+ <File
+ RelativePath="trigger_aaa.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ <File
+ RelativePath="..\icon1.ico"
+ >
+ </File>
+ <File
+ RelativePath="..\resource.rc"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories="\Miranda\miranda\plugins\StatusPlugins"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories="\Miranda\miranda\plugins\StatusPlugins"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories="\Miranda\miranda\plugins\StatusPlugins"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories="\Miranda\miranda\plugins\StatusPlugins"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\useronli.ico"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath="Release\AdvancedAutoAway.txt"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway_9.vcproj b/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway_9.vcproj
new file mode 100644
index 0000000000..ccd0e03244
--- /dev/null
+++ b/plugins/StatusPlugins/AdvancedAutoAway/AdvancedAutoAway_9.vcproj
@@ -0,0 +1,1055 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="AdvancedAutoAway"
+ ProjectGUID="{66503A70-B1E8-4545-B4FF-2108DFB40C72}"
+ RootNamespace="AdvancedAutoAway"
+ TargetFrameworkVersion="0"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/AdvancedAutoAway.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ BrowseInformation="1"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="comctl32.lib ws2_32.lib"
+ GenerateDebugInformation="true"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)64/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)64/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\Debug/AdvancedAutoAway.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ BrowseInformation="1"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="comctl32.lib ws2_32.lib"
+ GenerateDebugInformation="true"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/AdvancedAutoAway.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="2"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ FloatingPointModel="2"
+ RuntimeTypeInfo="false"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="comctl32.lib"
+ GenerateDebugInformation="true"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ LinkTimeCodeGeneration="1"
+ BaseAddress="0x11bd0000"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)64/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)64/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\Release/AdvancedAutoAway.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="2"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ FloatingPointModel="2"
+ RuntimeTypeInfo="false"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="comctl32.lib"
+ GenerateDebugInformation="true"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ LinkTimeCodeGeneration="1"
+ BaseAddress="0x11bd0000"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/AdvancedAutoAway.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ BrowseInformation="1"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="comctl32.lib ws2_32.lib"
+ GenerateDebugInformation="true"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode|x64"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)64/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)64/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\Debug/AdvancedAutoAway.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ BrowseInformation="1"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="comctl32.lib ws2_32.lib"
+ GenerateDebugInformation="true"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/AdvancedAutoAway.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="2"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ FloatingPointModel="2"
+ RuntimeTypeInfo="false"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="comctl32.lib"
+ GenerateDebugInformation="true"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ BaseAddress="0x11bd0000"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|x64"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)64/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)64/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\Release/AdvancedAutoAway.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="2"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;ADVANCEDAUTOAWAY_EXPORTS"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ FloatingPointModel="2"
+ RuntimeTypeInfo="false"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="comctl32.lib"
+ GenerateDebugInformation="true"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ BaseAddress="0x11bd0000"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath="advancedautoaway.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\commonstatus.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\confirmdialog.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\helpers\gen_helpers.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\main.cpp"
+ >
+ </File>
+ <File
+ RelativePath="msgoptions.cpp"
+ >
+ </File>
+ <File
+ RelativePath="options.cpp"
+ >
+ </File>
+ <File
+ RelativePath="trigger_aaa.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl"
+ >
+ <File
+ RelativePath="advancedautoaway.h"
+ >
+ </File>
+ <File
+ RelativePath="..\commonstatus.h"
+ >
+ </File>
+ <File
+ RelativePath="..\m_statusplugins.h"
+ >
+ </File>
+ <File
+ RelativePath="..\resource.h"
+ >
+ </File>
+ <File
+ RelativePath="trigger_aaa.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ <File
+ RelativePath="..\icon1.ico"
+ >
+ </File>
+ <File
+ RelativePath="..\resource.rc"
+ >
+ </File>
+ <File
+ RelativePath="..\ttbDown.bmp"
+ >
+ </File>
+ <File
+ RelativePath="..\ttbUp.bmp"
+ >
+ </File>
+ <File
+ RelativePath="..\useronli.ico"
+ >
+ </File>
+ <File
+ RelativePath="..\version.rc"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/plugins/StatusPlugins/AdvancedAutoAway/advancedautoaway.cpp b/plugins/StatusPlugins/AdvancedAutoAway/advancedautoaway.cpp
new file mode 100644
index 0000000000..3806f9f99e
--- /dev/null
+++ b/plugins/StatusPlugins/AdvancedAutoAway/advancedautoaway.cpp
@@ -0,0 +1,638 @@
+/*
+ AdvancedAutoAway Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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
+
+
+ Some code is copied from Miranda's AutoAway module
+*/
+#include "../commonstatus.h"
+#include "advancedautoaway.h"
+#include "../resource.h"
+#include <commctrl.h>
+
+#ifdef _DEBUG
+ #define SECS_PER_MINUTE 20 /* speedup */
+#else
+ #define SECS_PER_MINUTE 60 /* default I believe */
+#endif
+
+#define TRIGGERPLUGIN /* remove this to compile without it */
+
+#ifdef TRIGGERPLUGIN
+extern int InitTrigger();
+extern int DeInitTrigger();
+#endif
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+int CompareSettings( const TAAAProtoSetting* p1, const TAAAProtoSetting* p2 )
+{
+ return lstrcmpA( p1->szName, p2->szName );
+}
+
+OBJLIST<TAAAProtoSetting> autoAwaySettings( 10, CompareSettings );
+
+TAAAProtoSetting::TAAAProtoSetting( PROTOACCOUNT* pa )
+{
+ cbSize = sizeof(PROTOCOLSETTINGEX);
+ szName = pa->szModuleName;
+ tszAccName = pa->tszAccountName;
+ lastStatus = status = originalStatusMode = ID_STATUS_CURRENT;
+ szMsg = NULL;
+ curState = ACTIVE;
+ mStatus = FALSE;
+}
+
+TAAAProtoSetting::~TAAAProtoSetting()
+{
+ if ( szMsg )
+ free( szMsg );
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+typedef HDESK (WINAPI* pfnOpenInputDesktop)( DWORD, BOOL, DWORD );
+static pfnOpenInputDesktop openInputDesktop = NULL;
+typedef HDESK (WINAPI* pfnCloseDesktop)( HDESK );
+static pfnCloseDesktop closeDesktop = NULL;
+
+extern HANDLE hStateChangedEvent;
+
+static BOOL ignoreLockKeys = FALSE;
+static BOOL ignoreSysKeys = FALSE;
+static BOOL ignoreAltCombo = FALSE;
+static BOOL monitorMouse = TRUE;
+static BOOL monitorKeyboard = TRUE;
+static HWND confirmDialog;
+static HANDLE hAutoAwayOptionsHook;
+static HANDLE hAutoAwayShutDownHook;
+static HANDLE hProtoAckHook;
+static HANDLE hAccChangeHook;
+static int mouseStationaryTimer;
+HHOOK hMirandaMouseHook = NULL;
+HHOOK hMirandaKeyBoardHook = NULL;
+#pragma data_seg("Shared")
+DWORD lastInput = 0;
+POINT lastMousePos = {0};
+HHOOK hMouseHook = NULL;
+HHOOK hKeyBoardHook = NULL;
+#pragma data_seg()
+#pragma comment(linker, "/section:Shared,rws")
+DWORD lastMirandaInput = 0;
+static UINT_PTR hAutoAwayTimer;
+// prototypes
+extern DWORD StatusModeToProtoFlag(int status);
+extern int InitCommonStatus();
+static BOOL (WINAPI * MyGetLastInputInfo)(PLASTINPUTINFO);
+void LoadOptions(TAAAProtoSetting** loadSettings, BOOL override);
+static int HookWindowsHooks(int hookMiranda, int hookAll);
+static int UnhookWindowsHooks();
+static LRESULT CALLBACK MouseHookFunction(int code, WPARAM wParam, LPARAM lParam);
+static LRESULT CALLBACK KeyBoardHookFunction(int code, WPARAM wParam, LPARAM lParam);
+static LRESULT CALLBACK MirandaMouseHookFunction(int code, WPARAM wParam, LPARAM lParam);
+static LRESULT CALLBACK MirandaKeyBoardHookFunction(int code, WPARAM wParam, LPARAM lParam);
+static BOOL IsSaverRunning();
+BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved);
+
+static VOID CALLBACK AutoAwayTimer(HWND hwnd,UINT message,UINT_PTR idEvent,DWORD dwTime);
+extern int AutoAwayOptInitialise(WPARAM wParam,LPARAM lParam);
+extern int AutoAwayMsgOptInitialise(WPARAM wParam,LPARAM lParam);
+extern int SetStatus(WPARAM wParam, LPARAM lParam);
+extern int ShowConfirmDialog(WPARAM wParam, LPARAM lParam);
+extern char *StatusModeToDbSetting(int status,const char *suffix);
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// Load from DB
+
+void LoadOptions( OBJLIST<TAAAProtoSetting>& loadSettings, BOOL override)
+{
+ // if override is enabled, samesettings will be ignored (for options loading)
+ int monitorMiranda = FALSE; // use windows hooks?
+ int monitorAll = FALSE; // use windows hooks?
+
+ if (!override)
+ UnhookWindowsHooks();
+ if (hAutoAwayTimer != 0)
+ KillTimer(NULL, hAutoAwayTimer);
+
+ ignoreLockKeys = DBGetContactSettingByte(NULL, MODULENAME, SETTING_IGNLOCK, FALSE);
+ ignoreSysKeys = DBGetContactSettingByte(NULL, MODULENAME, SETTING_IGNSYSKEYS, FALSE);
+ ignoreAltCombo = DBGetContactSettingByte(NULL, MODULENAME, SETTING_IGNALTCOMBO, FALSE);
+ monitorMouse = DBGetContactSettingByte(NULL, MODULENAME, SETTING_MONITORMOUSE, TRUE);
+ monitorKeyboard = DBGetContactSettingByte(NULL, MODULENAME, SETTING_MONITORKEYBOARD, TRUE);
+ lastInput = lastMirandaInput = GetTickCount();
+
+ for ( int i=0; i < loadSettings.getCount(); i++ ) {
+ char* protoName;
+ if ((DBGetContactSettingByte(NULL, MODULENAME, SETTING_SAMESETTINGS, 0)) && !override)
+ protoName = SETTING_ALL;
+ else
+ protoName = loadSettings[i].szName;
+ LoadAutoAwaySetting( loadSettings[i], protoName);
+ if (!override) {
+ if (loadSettings[i].optionFlags & FLAG_MONITORMIRANDA)
+ monitorMiranda = TRUE;
+ else if ( (MyGetLastInputInfo==NULL) || ignoreLockKeys || ignoreSysKeys || ignoreAltCombo || (monitorMouse != monitorKeyboard) )
+ monitorAll = TRUE;
+ } }
+
+ if (DBGetContactSettingByte(NULL, "Idle", "AAEnable", 0))
+ return;
+
+ HookWindowsHooks(monitorMiranda, monitorAll);
+ hAutoAwayTimer = SetTimer(NULL,0, DBGetContactSettingWord(NULL, MODULENAME, SETTING_AWAYCHECKTIMEINSECS, 5)*1000,AutoAwayTimer);
+}
+
+int LoadAutoAwaySetting(TAAAProtoSetting& autoAwaySetting, char* protoName)
+{
+ char setting[128];
+ _snprintf(setting, sizeof(setting), "%s_OptionFlags", protoName);
+ autoAwaySetting.optionFlags = DBGetContactSettingByte(NULL,MODULENAME,setting,FLAG_LV2ONINACTIVE|FLAG_RESET);
+ _snprintf(setting, sizeof(setting), "%s_AwayTime", protoName);
+ autoAwaySetting.awayTime = DBGetContactSettingWord(NULL,MODULENAME,setting,SETTING_AWAYTIME_DEFAULT);
+ _snprintf(setting, sizeof(setting), "%s_NATime", protoName);
+ autoAwaySetting.naTime = DBGetContactSettingWord(NULL,MODULENAME,setting,SETTING_NATIME_DEFAULT);
+ _snprintf(setting, sizeof(setting), "%s_StatusFlags", protoName);
+ autoAwaySetting.statusFlags = DBGetContactSettingWord(NULL,MODULENAME,setting, StatusModeToProtoFlag(ID_STATUS_ONLINE)|StatusModeToProtoFlag(ID_STATUS_FREECHAT));
+
+ int flags;
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_SAMESETTINGS, 0))
+ flags = 0xFFFFFF;
+ else
+ flags = CallProtoService(protoName, PS_GETCAPS,PFLAGNUM_2,0)&~CallProtoService(protoName, PS_GETCAPS, (WPARAM)PFLAGNUM_5, 0);
+ _snprintf(setting, sizeof(setting), "%s_Lv1Status", protoName);
+ autoAwaySetting.lv1Status = DBGetContactSettingWord(NULL, MODULENAME, setting, (flags&StatusModeToProtoFlag(ID_STATUS_AWAY))?ID_STATUS_AWAY:ID_STATUS_OFFLINE);
+ _snprintf(setting, sizeof(setting), "%s_Lv2Status", protoName);
+ autoAwaySetting.lv2Status = DBGetContactSettingWord(NULL, MODULENAME, setting, (flags&StatusModeToProtoFlag(ID_STATUS_NA))?ID_STATUS_NA:ID_STATUS_OFFLINE);
+
+ return 0;
+}
+
+static int ProcessProtoAck(WPARAM wParam,LPARAM lParam)
+{
+ ACKDATA *ack = ( ACKDATA* )lParam;
+ if ( ack->type != ACKTYPE_STATUS )
+ return 0;
+ if ( ack->result != ACKRESULT_SUCCESS )
+ return 0;
+ log_debugA("ProcessProtoAck: ack->szModule: %s", ack->szModule);
+ for ( int i=0; i < autoAwaySettings.getCount(); i++ ) {
+ log_debugA("chk: %s", autoAwaySettings[i].szName);
+ if (!strcmp(autoAwaySettings[i].szName, ack->szModule)) {
+ log_debugA("ack->szModule: %s autoAwaySettings[i].statusChanged: %d", ack->szModule, autoAwaySettings[i].statusChanged);
+ if (!autoAwaySettings[i].statusChanged)
+ autoAwaySettings[i].mStatus = TRUE;
+
+ autoAwaySettings[i].statusChanged = FALSE;
+ } }
+
+ return 0;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// Account control event
+
+int OnAccChanged(WPARAM wParam,LPARAM lParam)
+{
+ PROTOACCOUNT* pa = ( PROTOACCOUNT* )lParam;
+ switch( wParam ) {
+ case PRAC_ADDED:
+ autoAwaySettings.insert( new TAAAProtoSetting( pa ));
+ break;
+
+ case PRAC_REMOVED:
+ {
+ for ( int i=0; i < autoAwaySettings.getCount(); i++ ) {
+ if ( !lstrcmpA( autoAwaySettings[i].szName, pa->szModuleName )) {
+ autoAwaySettings.remove( i );
+ break;
+ } } }
+ break;
+ }
+
+ return 0;
+}
+
+/* this function is from the original auto-away module */
+static BOOL IsWorkstationLocked (void)
+{
+ BOOL rc = FALSE;
+
+ if (openInputDesktop != NULL) {
+ HDESK hDesk = openInputDesktop(0, FALSE, DESKTOP_SWITCHDESKTOP);
+ if (hDesk == NULL)
+ rc = TRUE;
+ else if (closeDesktop != NULL)
+ closeDesktop(hDesk);
+ }
+ return rc;
+}
+
+static char* status2descr( int status )
+{
+ switch( status ) {
+ case ACTIVE: return "ACTIVE";
+ case STATUS1_SET: return "STATUS1_SET";
+ case STATUS2_SET: return "STATUS2_SET";
+ case SET_ORGSTATUS: return "SET_ORGSTATUS";
+ case HIDDEN_ACTIVE: return "HIDDEN_ACTIVE";
+ }
+ return "ERROR";
+}
+
+static int changeState(TAAAProtoSetting& setting, STATES newState)
+{
+ if (setting.curState == newState)
+ return 0;
+
+ setting.oldState = setting.curState;
+ setting.curState = newState;
+
+ log_debugA("%s state change: %s -> %s", setting.szName,
+ status2descr(setting.oldState), status2descr(setting.curState));
+
+ NotifyEventHooks(hStateChangedEvent, (WPARAM)0, (LPARAM)(AUTOAWAYSETTING*)&setting);
+ if ( setting.curState != SET_ORGSTATUS && setting.curState != ACTIVE && setting.statusChanged ) {
+ /* change the awaymessage */
+ if (setting.szMsg != NULL) {
+ free(setting.szMsg);
+ setting.szMsg = NULL;
+ }
+
+ if (DBGetContactSettingByte(NULL, MODULENAME, StatusModeToDbSetting(setting.status, SETTING_MSGCUSTOM), FALSE)) {
+ DBVARIANT dbv;
+ if(!DBGetContactSetting(NULL, MODULENAME, StatusModeToDbSetting(setting.status, SETTING_STATUSMSG), &dbv)) {
+ setting.szMsg = _strdup(dbv.pszVal);
+ DBFreeVariant(&dbv);
+ } }
+ }
+ else if (setting.szMsg != NULL) {
+ free(setting.szMsg);
+ setting.szMsg = NULL;
+ }
+
+ return 0;
+}
+
+static VOID CALLBACK AutoAwayTimer(HWND hwnd,UINT message,UINT_PTR idEvent,DWORD dwTime)
+{
+ int statusChanged = FALSE;
+ int confirm = FALSE;
+
+ for ( int i=0; i < autoAwaySettings.getCount(); i++ ) {
+ TAAAProtoSetting& aas = autoAwaySettings[i];
+ aas.status = ID_STATUS_DISABLED;
+
+ BOOL screenSaver = FALSE, locked = FALSE;
+
+ if ( aas.optionFlags & FLAG_MONITORMIRANDA )
+ mouseStationaryTimer = (GetTickCount() - lastMirandaInput)/1000;
+ else {
+ if (MyGetLastInputInfo!=NULL) {
+ LASTINPUTINFO lii = { 0 };
+ lii.cbSize = sizeof(lii);
+ MyGetLastInputInfo(&lii);
+ mouseStationaryTimer = (GetTickCount()-lii.dwTime)/1000;
+ }
+ else mouseStationaryTimer = (GetTickCount() - lastInput)/1000;
+ }
+
+ int sts1Time = aas.awayTime * SECS_PER_MINUTE;
+ int sts2Time = aas.naTime * SECS_PER_MINUTE;
+ int sts1setTime = aas.sts1setTimer==0?0:(GetTickCount() - aas.sts1setTimer)/1000;
+ int currentMode = CallProtoService(aas.szName,PS_GETSTATUS,0, 0);
+ if ( aas.optionFlags & FLAG_ONSAVER )
+ SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0, &screenSaver, FALSE);
+
+ if (aas.optionFlags & FLAG_ONLOCK)
+ locked = IsWorkstationLocked();
+
+ /* check states */
+ if (aas.curState == ACTIVE) {
+ if ((( mouseStationaryTimer >= sts1Time && (aas.optionFlags & FLAG_ONMOUSE)) || screenSaver || locked ) && currentMode != aas.lv1Status && aas.statusFlags&StatusModeToProtoFlag(currentMode)) {
+ /* from ACTIVE to STATUS1_SET */
+ aas.lastStatus = aas.originalStatusMode = CallProtoService(aas.szName,PS_GETSTATUS,0, 0);
+ aas.status = aas.lv1Status;
+ aas.sts1setTimer = GetTickCount();
+ sts1setTime = 0;
+ aas.statusChanged = statusChanged = TRUE;
+ changeState(aas, STATUS1_SET);
+ }
+ else if ( mouseStationaryTimer >= sts2Time && currentMode == aas.lv1Status && currentMode != aas.lv2Status && (aas.optionFlags & FLAG_SETNA) && (aas.statusFlags & StatusModeToProtoFlag(currentMode))) {
+ /* from ACTIVE to STATUS2_SET */
+ aas.lastStatus = aas.originalStatusMode = CallProtoService(aas.szName,PS_GETSTATUS,0, 0);
+ aas.status = aas.lv2Status;
+ aas.statusChanged = statusChanged = TRUE;
+ changeState(aas, STATUS2_SET);
+ } }
+
+ if (aas.curState == STATUS1_SET) {
+ if (( mouseStationaryTimer < sts1Time && !screenSaver && !locked ) && !(aas.optionFlags & FLAG_RESET )) {
+ /* from STATUS1_SET to HIDDEN_ACTIVE */
+ changeState(aas, HIDDEN_ACTIVE);
+ aas.lastStatus = CallProtoService(aas.szName,PS_GETSTATUS,0, 0);
+ }
+ else if ( ((mouseStationaryTimer < sts1Time) && (!screenSaver) && (!locked)) &&
+ ((aas.optionFlags&FLAG_LV2ONINACTIVE) || (!(aas.optionFlags&FLAG_SETNA))) &&
+ (aas.optionFlags&FLAG_RESET) ) {
+ /* from STATUS1_SET to SET_ORGSTATUS */
+ changeState(aas, SET_ORGSTATUS);
+ }
+ else if (( aas.optionFlags & FLAG_SETNA) && sts1setTime >= sts2Time ) {
+ /* when set STATUS2, currentMode doesn't have to be in the selected status list (statusFlags) */
+ /* from STATUS1_SET to STATUS2_SET */
+ aas.lastStatus = CallProtoService(aas.szName,PS_GETSTATUS,0, 0);
+ aas.status = aas.lv2Status;
+ aas.statusChanged = statusChanged = TRUE;
+ changeState(aas, STATUS2_SET);
+ } }
+
+ if ( aas.curState == STATUS2_SET ) {
+ if ( mouseStationaryTimer < sts2Time && !screenSaver && !locked && ( aas.optionFlags & FLAG_RESET )) {
+ /* from STATUS2_SET to SET_ORGSTATUS */
+ changeState(aas, SET_ORGSTATUS);
+ }
+ else if ( mouseStationaryTimer < sts2Time && !screenSaver && !locked && !( aas.optionFlags & FLAG_RESET )) {
+ /* from STATUS2_SET to HIDDEN_ACTIVE */
+ /* Remember: after status1 is set, and "only on inactive" is NOT set, it implies !reset. */
+ changeState(aas, HIDDEN_ACTIVE);
+ aas.lastStatus = CallProtoService(aas.szName,PS_GETSTATUS,0, 0);
+ } }
+
+ if ( aas.curState == HIDDEN_ACTIVE ) {
+ if ( aas.mStatus ) {
+ /* HIDDEN_ACTIVE to ACTIVE */
+ //aas.statusChanged = FALSE;
+ changeState(aas, ACTIVE);
+ aas.sts1setTimer = 0;
+ aas.mStatus = FALSE;
+ }
+ else if (( aas.optionFlags & FLAG_SETNA ) && currentMode == aas.lv1Status &&
+ currentMode != aas.lv2Status && (aas.statusFlags & StatusModeToProtoFlag(currentMode)) &&
+ (mouseStationaryTimer >= sts2Time || (sts1setTime >= sts2Time && !(aas.optionFlags & FLAG_LV2ONINACTIVE )))) {
+ /* HIDDEN_ACTIVE to STATUS2_SET */
+ aas.lastStatus = aas.originalStatusMode = CallProtoService(aas.szName,PS_GETSTATUS,0, 0);
+ aas.status = aas.lv2Status;
+ aas.statusChanged = statusChanged = TRUE;
+ changeState(aas, STATUS2_SET);
+ }
+ }
+ if ( aas.curState == SET_ORGSTATUS ) {
+ /* SET_ORGSTATUS to ACTIVE */
+ aas.lastStatus = CallProtoService(aas.szName,PS_GETSTATUS,0, 0);
+ aas.status = aas.originalStatusMode;
+ confirm = (aas.optionFlags&FLAG_CONFIRM)?TRUE:confirm;
+ aas.statusChanged = statusChanged = TRUE;
+ changeState(aas, ACTIVE);
+ aas.sts1setTimer = 0;
+ }
+ autoAwaySettings[i].mStatus = FALSE;
+ }
+
+ if ( confirm || statusChanged ) {
+ OBJLIST<TAAAProtoSetting> ps = autoAwaySettings;
+
+ int i;
+ for ( i=0; i < ps.getCount(); i++ ) {
+ if ( ps[i].szMsg )
+ ps[i].szMsg = _strdup( ps[i].szMsg );
+
+ if (ps[i].status == ID_STATUS_DISABLED)
+ ps[i].szName = "";
+ }
+
+ if (confirm)
+ confirmDialog = (HWND)CallService(MS_CS_SHOWCONFIRMDLGEX, (WPARAM)&ps, DBGetContactSettingWord(NULL, MODULENAME, SETTING_CONFIRMDELAY, 5));
+ else if (statusChanged)
+ CallService(MS_CS_SETSTATUSEX, (WPARAM)&ps, 0);
+} }
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// Windows hooks
+
+static int HookWindowsHooks(int hookMiranda, int hookAll)
+{
+ if (hookMiranda) {
+ if ( monitorKeyboard && hMirandaKeyBoardHook == NULL )
+ hMirandaKeyBoardHook = SetWindowsHookEx(WH_KEYBOARD,MirandaKeyBoardHookFunction,NULL,GetCurrentThreadId());
+ if ( monitorMouse && hMirandaMouseHook == NULL )
+ hMirandaMouseHook = SetWindowsHookEx(WH_MOUSE,MirandaMouseHookFunction,NULL,GetCurrentThreadId());
+ }
+ if (hookAll) {
+ MyGetLastInputInfo=NULL;
+ if ( monitorKeyboard && hKeyBoardHook == NULL )
+ hKeyBoardHook = SetWindowsHookEx(WH_KEYBOARD,KeyBoardHookFunction,hInst,0);
+ if ( monitorMouse && hMouseHook == NULL )
+ hMouseHook = SetWindowsHookEx(WH_MOUSE,MouseHookFunction,hInst,0);
+ }
+
+ return 0;
+}
+
+static int UnhookWindowsHooks()
+{
+ UnhookWindowsHookEx(hMouseHook);
+ UnhookWindowsHookEx(hKeyBoardHook);
+ UnhookWindowsHookEx(hMirandaMouseHook);
+ UnhookWindowsHookEx(hMirandaKeyBoardHook);
+
+ hMouseHook = hKeyBoardHook = hMirandaMouseHook = hMirandaKeyBoardHook = NULL;
+
+ return 0;
+}
+
+static LRESULT CALLBACK MirandaMouseHookFunction(int code, WPARAM wParam, LPARAM lParam)
+{
+ if (code >= 0) {
+ PMOUSEHOOKSTRUCT mouseInfo = (PMOUSEHOOKSTRUCT)lParam;
+ POINT pt = mouseInfo->pt;
+
+ /* TioDuke's KeyBoardNotifyExt: only update if a Miranda window is focused */
+ DWORD pid;
+ GetWindowThreadProcessId(GetForegroundWindow(), &pid);
+ if (pid != GetCurrentProcessId())
+ return CallNextHookEx(hMirandaMouseHook, code, wParam, lParam);
+
+ if (pt.x!=lastMousePos.x || pt.y!=lastMousePos.y) {
+ lastMousePos = pt;
+ lastMirandaInput = GetTickCount();
+ } }
+
+ return CallNextHookEx(hMirandaMouseHook, code, wParam, lParam);
+}
+
+static LRESULT CALLBACK MirandaKeyBoardHookFunction(int code, WPARAM wParam, LPARAM lParam)
+{
+ if (code >= 0) {
+ if (ignoreAltCombo) {//&& ((HIWORD(lParam)&KF_ALTDOWN) || (wParam == VK_MENU)) ) {
+ if ( ((GetKeyState(VK_MENU) < 0) || (wParam == VK_MENU)) ||
+ ((GetKeyState(VK_TAB) < 0) || (wParam == VK_TAB)) ||
+ ((GetKeyState(VK_SHIFT) < 0) || (wParam == VK_SHIFT)) ||
+ ((GetKeyState(VK_CONTROL) < 0) || (wParam == VK_CONTROL)) ||
+ ((GetKeyState(VK_ESCAPE) < 0) || (wParam == VK_ESCAPE)) ||
+ ((GetKeyState(VK_LWIN) < 0) || (wParam == VK_LWIN)) ||
+ ((GetKeyState(VK_RWIN) < 0) || (wParam == VK_RWIN)) ) {
+ return CallNextHookEx(hMirandaKeyBoardHook, code, wParam, lParam);
+ }
+ }
+ switch (wParam) {
+ case VK_NUMLOCK:
+ case VK_CAPITAL:
+ case VK_SCROLL:
+ if (!ignoreLockKeys)
+ lastMirandaInput = GetTickCount();
+ break;
+
+ case VK_TAB:
+ case VK_SHIFT:
+ case VK_CONTROL:
+ case VK_MENU:
+ case VK_ESCAPE:
+ case VK_LWIN:
+ case VK_RWIN:
+ if (!ignoreSysKeys)
+ lastMirandaInput = GetTickCount();
+ break;
+
+ default:
+ lastMirandaInput = GetTickCount();
+ break;
+ } }
+
+ return CallNextHookEx(hMirandaKeyBoardHook, code, wParam, lParam);
+}
+
+static LRESULT CALLBACK MouseHookFunction(int code, WPARAM wParam, LPARAM lParam)
+{
+ if (code >= 0) {
+ PMOUSEHOOKSTRUCT mouseInfo = (PMOUSEHOOKSTRUCT)lParam;
+ POINT pt = mouseInfo->pt;
+
+ /* TioDuke's KeyBoardNotifyExt: also grab clicks */
+ if ((wParam >= WM_NCLBUTTONDOWN && wParam <= WM_NCXBUTTONDBLCLK && wParam != 0x00AA) || (wParam >= WM_LBUTTONDOWN && wParam <= WM_XBUTTONDBLCLK))
+ lastInput = GetTickCount();
+
+ if (pt.x!=lastMousePos.x || pt.y!=lastMousePos.y) {
+ lastMousePos = pt;
+ lastInput = GetTickCount();
+ } }
+
+ return CallNextHookEx(hMouseHook, code, wParam, lParam);
+}
+
+static LRESULT CALLBACK KeyBoardHookFunction(int code, WPARAM wParam, LPARAM lParam)
+{
+ if (code >= 0) {
+ if (ignoreAltCombo) {//&& ((HIWORD(lParam)&KF_ALTDOWN) || (wParam == VK_MENU)) ) {
+ if ( ((GetKeyState(VK_MENU) < 0) || (wParam == VK_MENU)) ||
+ ((GetKeyState(VK_TAB) < 0) || (wParam == VK_TAB)) ||
+ ((GetKeyState(VK_SHIFT) < 0) || (wParam == VK_SHIFT)) ||
+ ((GetKeyState(VK_CONTROL) < 0) || (wParam == VK_CONTROL)) ||
+ ((GetKeyState(VK_ESCAPE) < 0) || (wParam == VK_ESCAPE)) ||
+ ((GetKeyState(VK_LWIN) < 0) || (wParam == VK_LWIN)) ||
+ ((GetKeyState(VK_RWIN) < 0) || (wParam == VK_RWIN)) ) {
+ return CallNextHookEx(hKeyBoardHook, code, wParam, lParam);
+ }
+ }
+ switch (wParam) {
+ case VK_NUMLOCK:
+ case VK_CAPITAL:
+ case VK_SCROLL:
+ if (!ignoreLockKeys)
+ lastInput = GetTickCount();
+ break;
+
+ case VK_TAB:
+ case VK_SHIFT:
+ case VK_CONTROL:
+ case VK_MENU:
+ case VK_ESCAPE:
+ case VK_LWIN:
+ case VK_RWIN:
+ if (!ignoreSysKeys)
+ lastInput = GetTickCount();
+ break;
+
+ default:
+ lastInput = GetTickCount();
+ break;
+ } }
+
+ return CallNextHookEx(hKeyBoardHook, code, wParam, lParam);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// Inits & stuff
+
+static int AutoAwayShutdown(WPARAM wParam,LPARAM lParam)
+{
+ KillTimer(NULL, hAutoAwayTimer);
+
+#ifdef TRIGGERPLUGIN
+ DeInitTrigger();
+#endif
+ UnhookEvent(hAutoAwayOptionsHook);
+ UnhookEvent(hAutoAwayShutDownHook);
+ UnhookEvent(hAccChangeHook);
+ UnhookEvent(hProtoAckHook);
+ UnhookWindowsHooks();
+ DestroyHookableEvent(hStateChangedEvent);
+
+ autoAwaySettings.destroy();
+ return 0;
+}
+
+int CSModuleLoaded(WPARAM wParam, LPARAM lParam)
+{
+ HMODULE hUser32 = GetModuleHandleA("user32");
+ openInputDesktop = ( pfnOpenInputDesktop )GetProcAddress (hUser32, "OpenInputDesktop");
+ closeDesktop = ( pfnCloseDesktop )GetProcAddress (hUser32, "CloseDesktop");
+
+ if ( IsWinVer2000Plus() && !DBGetContactSettingByte(NULL, MODULENAME, SETTING_IGNLOCK, FALSE))
+ MyGetLastInputInfo = (BOOL (WINAPI *)(PLASTINPUTINFO))GetProcAddress(GetModuleHandleA("user32"),"GetLastInputInfo");
+ else
+ MyGetLastInputInfo = NULL;
+
+ hAccChangeHook = HookEvent(ME_PROTO_ACCLISTCHANGED, OnAccChanged);
+ hAutoAwayOptionsHook = HookEvent(ME_OPT_INITIALISE,AutoAwayOptInitialise);
+ hAutoAwayShutDownHook = HookEvent(ME_SYSTEM_OKTOEXIT,AutoAwayShutdown);
+ hProtoAckHook = HookEvent(ME_PROTO_ACK, ProcessProtoAck);
+ mouseStationaryTimer = 0;
+ lastInput = lastMirandaInput = GetTickCount();
+
+ ////////////////////////////////////////////////////////////////////////////////////////
+
+ protoList = ( OBJLIST<PROTOCOLSETTINGEX>* )&autoAwaySettings;
+
+ int count;
+ PROTOACCOUNT** protos;
+ ProtoEnumAccounts(&count, &protos);
+
+ for( int i=0; i < count; i++ )
+ if ( IsSuitableProto( protos[i] ))
+ autoAwaySettings.insert( new TAAAProtoSetting( protos[i] ));
+
+ ////////////////////////////////////////////////////////////////////////////////////////
+
+ LoadOptions(autoAwaySettings, FALSE);
+
+#ifdef TRIGGERPLUGIN
+ InitTrigger();
+#endif
+
+ return 0;
+}
diff --git a/plugins/StatusPlugins/AdvancedAutoAway/advancedautoaway.h b/plugins/StatusPlugins/AdvancedAutoAway/advancedautoaway.h
new file mode 100644
index 0000000000..93fc3ba8c7
--- /dev/null
+++ b/plugins/StatusPlugins/AdvancedAutoAway/advancedautoaway.h
@@ -0,0 +1,95 @@
+/*
+ AdvancedAutoAway Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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 __ADVANCED_AUTOAWAY_HEADER
+#define __ADVANCED_AUTOAWAY_HEADER
+
+#include <m_options.h>
+#include <m_idle.h>
+#include "version.h"
+
+#define SETTING_IGNLOCK "IgnoreLockKeys"
+#define SETTING_IGNSYSKEYS "IgnoreSysKeys"
+#define SETTING_IGNALTCOMBO "IgnoreAltCombo"
+#define SETTING_SAMESETTINGS "SameAutoAwaySettings"
+#define SETTING_ALL "ALLPROTOS"
+#define SETTING_MSGCUSTOM "Custom"
+#define SETTING_STATUSMSG "Msg"
+#define SETTING_CONFIRMDELAY "ConfirmTimeout"
+#define MODULENAME "AdvancedAutoAway"
+
+#define SETTING_AWAYTIME_DEFAULT 5
+#define SETTING_NATIME_DEFAULT 20
+#define SETTING_AWAYCHECKTIMEINSECS "CheckInterval"
+
+#define STATUS_RESET 1
+#define STATUS_AUTOAWAY 2
+#define STATUS_AUTONA 3
+
+#define SETTING_MONITORMOUSE "MonitorMouse"
+#define SETTING_MONITORKEYBOARD "MonitorKeyboard"
+
+#define FLAG_ONSAVER 1 // db: set lv1 status on screensaver ?
+#define FLAG_ONMOUSE 2 // db: set after inactivity ?
+#define FLAG_SETNA 4 // db: set NA after xx of away time ?
+#define FLAG_CONFIRM 8 // db: show confirm dialog ?
+#define FLAG_RESET 16 // db: restore status ?
+#define FLAG_LV2ONINACTIVE 32 // db: set lv2 only on inactivity
+#define FLAG_MONITORMIRANDA 64 // db: monitor miranda activity only
+#define FLAG_ONLOCK 128 // db: on work station lock
+
+struct TAAAProtoSetting : public PROTOCOLSETTINGEX
+{
+ TAAAProtoSetting( PROTOACCOUNT* pa );
+ ~TAAAProtoSetting();
+
+ __inline void* operator new( size_t size ) { return calloc( 1, size ); }
+ __inline void operator delete( void* p ) { free( p ); }
+
+ int originalStatusMode;
+ STATES
+ oldState,
+ curState;
+ BOOL statusChanged; // AAA changed the status, don't update mStatus
+ BOOL mStatus; // status changed manually or not ?
+ int optionFlags, // db: see above
+ awayTime, // db: time to wait for inactivity
+ naTime, // db: time to wait after away is set
+ statusFlags; // db: set lv1 status if this is original status
+ WORD lv1Status, // db
+ lv2Status; // db
+ unsigned int sts1setTimer;
+};
+
+struct AAMSGSETTING
+{
+ short useCustom;
+ int status;
+ char* msg;
+};
+
+extern HINSTANCE hInst;
+
+int CompareSettings( const TAAAProtoSetting* p1, const TAAAProtoSetting* p2 );
+
+extern OBJLIST<TAAAProtoSetting> autoAwaySettings;
+
+int LoadAutoAwaySetting(TAAAProtoSetting& autoAwaySetting, char* protoName);
+void LoadOptions(OBJLIST<TAAAProtoSetting>& settings, BOOL override);
+
+#endif
diff --git a/plugins/StatusPlugins/AdvancedAutoAway/fsm.jpg b/plugins/StatusPlugins/AdvancedAutoAway/fsm.jpg
new file mode 100644
index 0000000000..21066a3939
--- /dev/null
+++ b/plugins/StatusPlugins/AdvancedAutoAway/fsm.jpg
Binary files differ
diff --git a/plugins/StatusPlugins/AdvancedAutoAway/fsm.sdr b/plugins/StatusPlugins/AdvancedAutoAway/fsm.sdr
new file mode 100644
index 0000000000..490005533b
--- /dev/null
+++ b/plugins/StatusPlugins/AdvancedAutoAway/fsm.sdr
Binary files differ
diff --git a/plugins/StatusPlugins/AdvancedAutoAway/main.cpp b/plugins/StatusPlugins/AdvancedAutoAway/main.cpp
new file mode 100644
index 0000000000..f9d1bd04d9
--- /dev/null
+++ b/plugins/StatusPlugins/AdvancedAutoAway/main.cpp
@@ -0,0 +1,110 @@
+/*
+ AdvancedAutoAway Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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
+
+
+ Some code is copied from Miranda's AutoAway module
+*/
+
+#include "../commonstatus.h"
+#include "advancedautoaway.h"
+#include "../resource.h"
+
+// {F0FDF73A-753D-499d-8DBA-336DB79CDD41}
+#define MIID_ADVAUTOAWAY { 0xf0fdf73a, 0x753d, 0x499d, { 0x8d, 0xba, 0x33, 0x6d, 0xb7, 0x9c, 0xdd, 0x41 } }
+
+HINSTANCE hInst;
+PLUGINLINK *pluginLink;
+
+MM_INTERFACE mmi;
+LIST_INTERFACE li;
+
+HANDLE hCSModuleLoadedHook;
+HANDLE hStateChangedEvent;
+int hLangpack = 0;
+
+int CSModuleLoaded(WPARAM wParam, LPARAM lParam);
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// dll entry point
+
+BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
+{
+ hInst = hinstDLL;
+ return TRUE;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// returns plugin's extended information
+
+PLUGININFOEX pluginInfoEx={
+ sizeof(PLUGININFOEX),
+ #if defined( _UNICODE )
+ __PLUGIN_NAME __PLATFORM_NAME " (Unicode)",
+ #else
+ __PLUGIN_NAME,
+ #endif
+ PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM),
+ __DESC,
+ __AUTHOR,
+ __AUTHOREMAIL,
+ __COPYRIGHT,
+ __AUTHORWEB,
+ UNICODE_AWARE,
+ 0,
+ MIID_ADVAUTOAWAY
+};
+
+extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
+{
+ return &pluginInfoEx;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// returns plugin's interfaces information
+
+static const MUUID interfaces[] = { MIID_AUTOAWAY, MIID_LAST };
+
+extern "C" __declspec(dllexport) const MUUID* MirandaPluginInterfaces(void)
+{
+ return interfaces;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// plugin's entry point
+
+extern "C" __declspec(dllexport) int Load(PLUGINLINK *link)
+{
+ pluginLink = link;
+ mir_getMMI(&mmi);
+ mir_getLI(&li);
+ mir_getLP( &pluginInfoEx );
+
+ InitCommonStatus();
+ hCSModuleLoadedHook = HookEvent(ME_SYSTEM_MODULESLOADED, CSModuleLoaded);
+ hStateChangedEvent = CreateHookableEvent(ME_AAA_STATECHANGED);
+ return 0;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// plugin's exit point
+
+extern "C" __declspec(dllexport) int Unload(void)
+{
+ DestroyHookableEvent( hStateChangedEvent );
+ return 0;
+}
diff --git a/plugins/StatusPlugins/AdvancedAutoAway/msgoptions.cpp b/plugins/StatusPlugins/AdvancedAutoAway/msgoptions.cpp
new file mode 100644
index 0000000000..9f0da411cc
--- /dev/null
+++ b/plugins/StatusPlugins/AdvancedAutoAway/msgoptions.cpp
@@ -0,0 +1,165 @@
+/*
+ AdvancedAutoAway Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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 "../commonstatus.h"
+#include "advancedautoaway.h"
+#include "../resource.h"
+
+extern char *StatusModeToDbSetting(int status,const char *suffix);
+
+INT_PTR CALLBACK DlgProcAutoAwayMsgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ static AAMSGSETTING** settings;
+ static int last, count;
+ int i;
+
+ switch( msg ) {
+ case WM_INITDIALOG:
+ TranslateDialogDefault( hwndDlg );
+ {
+ ShowWindow(GetDlgItem(hwndDlg, IDC_VARIABLESHELP), ServiceExists(MS_VARS_SHOWHELP)?SW_SHOW:SW_HIDE);
+ count = 0;
+ last = -1;
+
+ PROTOACCOUNT** proto;
+ int protoCount;
+ ProtoEnumAccounts(&protoCount, &proto);
+ CallService(MS_PROTO_ENUMPROTOCOLS,(WPARAM)&protoCount,(LPARAM)&proto);
+
+ DWORD protoModeMsgFlags = 0;
+ for( i=0; i < protoCount; i++ ) {
+ if ( (!(CallProtoService(proto[i]->szModuleName, PS_GETCAPS, (WPARAM)PFLAGNUM_1, 0) & PF1_MODEMSGSEND & ~PF1_INDIVMODEMSG)) )
+ continue;
+
+ protoModeMsgFlags |= CallProtoService( proto[i]->szModuleName, PS_GETCAPS, PFLAGNUM_3, 0 );
+ }
+ settings = ( AAMSGSETTING** )malloc(sizeof(AAMSGSETTING*));
+ count = 0;
+ for( i=0; i < SIZEOF(statusModeList); i++ ) {
+ if ( !( protoModeMsgFlags & Proto_Status2Flag( statusModeList[i] )))
+ continue;
+
+ int j = SendDlgItemMessage(hwndDlg,IDC_STATUS,CB_ADDSTRING,0,(LPARAM)CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION,statusModeList[i],GSMDF_TCHAR));
+ SendDlgItemMessage( hwndDlg, IDC_STATUS, CB_SETITEMDATA, j, statusModeList[i] );
+ settings = ( AAMSGSETTING** )realloc(settings, (count+1)*sizeof(AAMSGSETTING*));
+ settings[count] = ( AAMSGSETTING* )malloc(sizeof(AAMSGSETTING));
+ settings[count]->status = statusModeList[i];
+
+ DBVARIANT dbv;
+ if ( !DBGetContactSetting(NULL, MODULENAME, StatusModeToDbSetting(statusModeList[i],SETTING_STATUSMSG), &dbv)) {
+ settings[count]->msg = ( char* )malloc(strlen(dbv.pszVal) + 1);
+ strcpy(settings[count]->msg, dbv.pszVal);
+ DBFreeVariant(&dbv);
+ }
+ else settings[count]->msg = NULL;
+
+ settings[count]->useCustom = DBGetContactSettingByte(NULL, MODULENAME, StatusModeToDbSetting(statusModeList[i], SETTING_MSGCUSTOM), FALSE);
+ count += 1;
+ }
+ SendDlgItemMessage(hwndDlg,IDC_STATUS,CB_SETCURSEL,0,0);
+ SendMessage(hwndDlg,WM_COMMAND,MAKEWPARAM(IDC_STATUS,CBN_SELCHANGE),0);
+ }
+ break;
+
+ case WM_COMMAND:
+ if ( ((HIWORD(wParam) == EN_CHANGE) || (HIWORD(wParam) == BN_CLICKED)) && ((HWND)lParam == GetFocus()) )
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+
+ switch(LOWORD(wParam)) {
+ case IDC_RADUSEMIRANDA:
+ CheckDlgButton(hwndDlg, IDC_RADUSECUSTOM, !IsDlgButtonChecked(hwndDlg, IDC_RADUSEMIRANDA));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_STATUSMSG), IsDlgButtonChecked(hwndDlg, IDC_RADUSECUSTOM));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_VARIABLESHELP), IsDlgButtonChecked(hwndDlg, IDC_RADUSECUSTOM));
+ settings[SendDlgItemMessage(hwndDlg,IDC_STATUS,CB_GETCURSEL,0,0)]->useCustom = IsDlgButtonChecked(hwndDlg, IDC_RADUSECUSTOM);
+ break;
+
+ case IDC_RADUSECUSTOM:
+ CheckDlgButton(hwndDlg, IDC_RADUSEMIRANDA, !IsDlgButtonChecked(hwndDlg, IDC_RADUSECUSTOM));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_STATUSMSG), IsDlgButtonChecked(hwndDlg, IDC_RADUSECUSTOM));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_VARIABLESHELP), IsDlgButtonChecked(hwndDlg, IDC_RADUSECUSTOM));
+ settings[SendDlgItemMessage(hwndDlg,IDC_STATUS,CB_GETCURSEL,0,0)]->useCustom = IsDlgButtonChecked(hwndDlg, IDC_RADUSECUSTOM);
+ break;
+
+ case IDC_STATUS:
+ if ( HIWORD( wParam ) == CBN_SELCHANGE ) {
+ i = SendDlgItemMessage(hwndDlg,IDC_STATUS,CB_GETCURSEL,0,0);
+ int len = SendDlgItemMessage(hwndDlg, IDC_STATUSMSG, WM_GETTEXTLENGTH, 0, 0);
+ if ( last != -1 ) {
+ if (settings[last]->msg == NULL)
+ settings[last]->msg = ( char* )malloc(len+1);
+ else
+ settings[last]->msg = ( char* )realloc(settings[last]->msg, len+1);
+ SendDlgItemMessageA(hwndDlg, IDC_STATUSMSG, WM_GETTEXT, (LPARAM)(len+1), (WPARAM)settings[last]->msg);
+ }
+ if (i != -1) {
+ if (settings[i]->msg != NULL)
+ SetDlgItemTextA(hwndDlg, IDC_STATUSMSG, settings[i]->msg);
+ else if (ServiceExists(MS_AWAYMSG_GETSTATUSMSG)) {
+ char* msg = (char*)CallService(MS_AWAYMSG_GETSTATUSMSG, (WPARAM)settings[i]->status, 0);
+ if (msg != NULL) {
+ SetDlgItemTextA(hwndDlg, IDC_STATUSMSG, msg);
+ mir_free(msg);
+ }
+ }
+ if (settings[i]->useCustom) {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_STATUSMSG), TRUE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_VARIABLESHELP), TRUE);
+ CheckDlgButton(hwndDlg, IDC_RADUSECUSTOM, TRUE);
+ CheckDlgButton(hwndDlg, IDC_RADUSEMIRANDA, FALSE);
+ }
+ else {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_STATUSMSG), FALSE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_VARIABLESHELP), FALSE);
+ CheckDlgButton(hwndDlg, IDC_RADUSEMIRANDA, TRUE);
+ CheckDlgButton(hwndDlg, IDC_RADUSECUSTOM, FALSE);
+ } }
+ last = i;
+ }
+ break;
+
+ case IDC_VARIABLESHELP:
+ CallService(MS_VARS_SHOWHELP, (WPARAM)GetDlgItem(hwndDlg, IDC_STATUSMSG), 0);
+ break;
+ }
+ break;
+
+ case WM_NOTIFY:
+ switch (((LPNMHDR)lParam)->code) {
+ case PSN_APPLY:
+ SendMessage(hwndDlg,WM_COMMAND,MAKEWPARAM(IDC_STATUS,CBN_SELCHANGE),0);
+ for ( i=0; i < count; i++ ) {
+ DBWriteContactSettingByte(NULL, MODULENAME, StatusModeToDbSetting(settings[i]->status,SETTING_MSGCUSTOM), (BYTE)settings[i]->useCustom);
+ if ( (settings[i]->useCustom) && (settings[i]->msg != NULL) && (strlen(settings[i]->msg) > 0) )
+ DBWriteContactSettingString(NULL, MODULENAME, StatusModeToDbSetting(settings[i]->status,SETTING_STATUSMSG), settings[i]->msg);
+ }
+ break;
+ }
+ break;
+
+ case WM_DESTROY:
+ for ( i=0; i < count; i++ ) {
+ if (settings[i]->msg != NULL)
+ free(settings[i]->msg);
+ free(settings[i]);
+ }
+ free(settings);
+ break;
+ }
+
+ return FALSE;
+}
diff --git a/plugins/StatusPlugins/AdvancedAutoAway/options.cpp b/plugins/StatusPlugins/AdvancedAutoAway/options.cpp
new file mode 100644
index 0000000000..7266bf5aaa
--- /dev/null
+++ b/plugins/StatusPlugins/AdvancedAutoAway/options.cpp
@@ -0,0 +1,553 @@
+/*
+ AdvancedAutoAway Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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 "../commonstatus.h"
+#include "advancedautoaway.h"
+#include "../resource.h"
+#include <commctrl.h>
+
+static BOOL (WINAPI *pfnEnableThemeDialogTexture)(HANDLE, DWORD) = 0;
+
+// Thanks to TioDuke for cleaning up the ListView handling
+#ifndef ListView_GetCheckState
+#define ListView_GetCheckState(w,i) ((((UINT)(SNDMSG((w),LVM_GETITEMSTATE,(WPARAM)(i),LVIS_STATEIMAGEMASK)))>>12)-1)
+#endif
+#ifndef ListView_SetCheckState
+#define ListView_SetCheckState(w,i,f) ListView_SetItemState(w,i,INDEXTOSTATEIMAGEMASK((f)+1),LVIS_STATEIMAGEMASK)
+#endif
+
+static OBJLIST<TAAAProtoSetting> optionSettings( 10, CompareSettings );
+
+int LoadAutoAwaySetting(TAAAProtoSetting& autoAwaySetting, char* protoName);
+
+INT_PTR CALLBACK DlgProcAutoAwayMsgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+
+static BOOL bSettingSame = FALSE;
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// Dialog service functions
+
+static int WriteAutoAwaySetting(TAAAProtoSetting& autoAwaySetting, char* protoName)
+{
+ char setting[128];
+ mir_snprintf(setting, sizeof(setting), "%s_OptionFlags", protoName);
+ DBWriteContactSettingByte(NULL,MODULENAME,setting,(BYTE)autoAwaySetting.optionFlags);
+ mir_snprintf(setting, sizeof(setting), "%s_AwayTime", protoName);
+ DBWriteContactSettingWord(NULL,MODULENAME,setting,(WORD)autoAwaySetting.awayTime);
+ mir_snprintf(setting, sizeof(setting), "%s_NATime", protoName);
+ DBWriteContactSettingWord(NULL,MODULENAME,setting,(WORD)autoAwaySetting.naTime);
+ mir_snprintf(setting, sizeof(setting), "%s_StatusFlags", protoName);
+ DBWriteContactSettingWord(NULL,MODULENAME,setting,(WORD)autoAwaySetting.statusFlags);
+ mir_snprintf(setting, sizeof(setting), "%s_Lv1Status", protoName);
+ DBWriteContactSettingWord(NULL,MODULENAME,setting,(WORD)autoAwaySetting.lv1Status);
+ mir_snprintf(setting, sizeof(setting), "%s_Lv2Status", protoName);
+ DBWriteContactSettingWord(NULL,MODULENAME,setting,(WORD)autoAwaySetting.lv2Status);
+
+ return 0;
+}
+
+static void SetDialogItems(HWND hwndDlg, TAAAProtoSetting* setting)
+{
+ CheckDlgButton(hwndDlg, IDC_SCREENSAVE, setting->optionFlags&FLAG_ONSAVER ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_ONLOCK, setting->optionFlags&FLAG_ONLOCK ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_TIMED, setting->optionFlags&FLAG_ONMOUSE ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_SETNA, setting->optionFlags&FLAG_SETNA ? BST_CHECKED : BST_UNCHECKED);
+ SetDlgItemInt(hwndDlg,IDC_AWAYTIME, setting->awayTime,FALSE);
+ SetDlgItemInt(hwndDlg,IDC_NATIME, setting->naTime,FALSE);
+ CheckDlgButton(hwndDlg, IDC_CONFIRM, setting->optionFlags&FLAG_CONFIRM ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_RESETSTATUS, setting->optionFlags&FLAG_RESET ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_MONITORMIRANDA, setting->optionFlags&FLAG_MONITORMIRANDA ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_LV2ONINACTIVE, setting->optionFlags&FLAG_LV2ONINACTIVE ? BST_CHECKED : BST_UNCHECKED);
+ EnableWindow(GetDlgItem(hwndDlg,IDC_SETNA),IsDlgButtonChecked(hwndDlg,IDC_TIMED));
+ EnableWindow(GetDlgItem(hwndDlg,IDC_LV2ONINACTIVE),(IsDlgButtonChecked(hwndDlg,IDC_TIMED)) && (IsDlgButtonChecked(hwndDlg,IDC_SETNA)));
+ EnableWindow(GetDlgItem(hwndDlg,IDC_MONITORMIRANDA),IsDlgButtonChecked(hwndDlg,IDC_TIMED));
+ EnableWindow(GetDlgItem(hwndDlg,IDC_AWAYTIME),IsDlgButtonChecked(hwndDlg,IDC_TIMED));
+ EnableWindow(GetDlgItem(hwndDlg,IDC_LV1AFTERSTR),IsDlgButtonChecked(hwndDlg,IDC_TIMED));
+ EnableWindow(GetDlgItem(hwndDlg,IDC_LV1STATUS),IsDlgButtonChecked(hwndDlg,IDC_TIMED)||IsDlgButtonChecked(hwndDlg,IDC_SCREENSAVE));
+ EnableWindow(GetDlgItem(hwndDlg,IDC_STATUSLIST),IsDlgButtonChecked(hwndDlg,IDC_TIMED)||IsDlgButtonChecked(hwndDlg,IDC_SCREENSAVE));
+ EnableWindow(GetDlgItem(hwndDlg,IDC_RESETSTATUS),(IsDlgButtonChecked(hwndDlg,IDC_TIMED)||IsDlgButtonChecked(hwndDlg,IDC_SCREENSAVE))&&(IsDlgButtonChecked(hwndDlg, IDC_LV2ONINACTIVE)));
+ EnableWindow(GetDlgItem(hwndDlg,IDC_CONFIRM),(IsDlgButtonChecked(hwndDlg,IDC_TIMED)||IsDlgButtonChecked(hwndDlg,IDC_SCREENSAVE))&&(IsDlgButtonChecked(hwndDlg, IDC_LV2ONINACTIVE)&&(IsDlgButtonChecked(hwndDlg,IDC_RESETSTATUS))));
+ EnableWindow(GetDlgItem(hwndDlg,IDC_NATIME),IsDlgButtonChecked(hwndDlg,IDC_SETNA)&&IsDlgButtonChecked(hwndDlg,IDC_TIMED));
+ EnableWindow(GetDlgItem(hwndDlg,IDC_SETNASTR),IsDlgButtonChecked(hwndDlg,IDC_SETNA)&&IsDlgButtonChecked(hwndDlg,IDC_TIMED));
+ EnableWindow(GetDlgItem(hwndDlg,IDC_SETNASTR),IsDlgButtonChecked(hwndDlg,IDC_SETNA)&&IsDlgButtonChecked(hwndDlg,IDC_TIMED));
+ EnableWindow(GetDlgItem(hwndDlg,IDC_LV2STATUS),IsDlgButtonChecked(hwndDlg,IDC_SETNA)&&IsDlgButtonChecked(hwndDlg,IDC_TIMED));
+ EnableWindow(GetDlgItem(hwndDlg,IDC_PROTOCOL), !bSettingSame);//DBGetContactSettingByte(NULL, MODULENAME, SETTING_SAMESETTINGS, FALSE));
+}
+
+static TAAAProtoSetting* GetSetting(HWND hwndDlg, TAAAProtoSetting* sameSetting)
+{
+ if ( bSettingSame )
+ return sameSetting;
+
+ int iItem = SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, CB_GETCURSEL, 0, 0);
+ if ( iItem == -1 )
+ return NULL;
+
+ INT_PTR iData = (INT_PTR)SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, CB_GETITEMDATA, iItem, 0);
+ return ( iData == -1 ) ? NULL : (TAAAProtoSetting*)iData;
+}
+
+static void SetDialogStatus(HWND hwndDlg, TAAAProtoSetting* sameSetting)
+{
+ TAAAProtoSetting* setting = GetSetting(hwndDlg, sameSetting);
+ if ( setting ) {
+
+ // create columns
+ HWND hList = GetDlgItem(hwndDlg,IDC_STATUSLIST);
+ ListView_SetExtendedListViewStyleEx(hList, LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES, LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES);
+
+ LVCOLUMN lvCol = { 0 };
+ lvCol.mask = LVCF_WIDTH|LVCF_TEXT;
+ lvCol.pszText = TranslateT("Status");
+ lvCol.cx = 118;
+ ListView_InsertColumn(hList, 0, &lvCol);
+
+ // get pointer to settings
+ SetDialogItems(hwndDlg, setting);
+} }
+
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// Rules dialog window procedure
+
+static INT_PTR CALLBACK DlgProcAutoAwayRulesOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ static TAAAProtoSetting* sameSetting;
+ static int init;
+
+ switch (msg) {
+ case WM_INITDIALOG:
+ init = TRUE;
+ TranslateDialogDefault(hwndDlg);
+
+ // copy the settings
+ optionSettings = autoAwaySettings;
+
+ sameSetting = ( TAAAProtoSetting* )malloc(sizeof(TAAAProtoSetting));
+ LoadAutoAwaySetting(*sameSetting, SETTING_ALL);
+
+ // fill list from currentProtoSettings
+ {
+ for ( int i=0; i < optionSettings.getCount(); i++ ) {
+ TAAAProtoSetting& p = optionSettings[i];
+ int item = SendDlgItemMessage( hwndDlg, IDC_PROTOCOL, CB_ADDSTRING, 0, ( LPARAM )p.tszAccName );
+ SendDlgItemMessage( hwndDlg, IDC_PROTOCOL, CB_SETITEMDATA, item, (LPARAM)&p );
+ }
+ }
+ // set cursor to first protocol
+ SendDlgItemMessage(hwndDlg,IDC_PROTOCOL,CB_SETCURSEL,0,0);
+
+ // status list
+ SetDialogStatus(hwndDlg, sameSetting);
+
+ SendMessage(hwndDlg, WM_COMMAND, (WPARAM)IDC_PROTOCOL, (LPARAM)0x11111111);
+ init = FALSE;
+ break;
+
+ case WM_COMMAND:
+ if (( HIWORD(wParam) == EN_CHANGE || HIWORD(wParam) == BN_CLICKED ) && (HWND)lParam == GetFocus())
+ SendMessage(GetParent(hwndDlg),PSM_CHANGED,0,0);
+ {
+ TAAAProtoSetting* setting = GetSetting(hwndDlg, sameSetting);
+ if ( !setting )
+ break;
+
+ switch(LOWORD(wParam)) {
+ case IDC_PROTOCOL:
+ // status listview
+ {
+ int i, flags;
+ LVITEM lvItem;
+ HWND hList=GetDlgItem(hwndDlg,IDC_STATUSLIST);
+
+ init = TRUE;
+ ListView_DeleteAllItems(hList);
+ memset(&lvItem,0,sizeof(lvItem));
+ lvItem.mask=LVIF_TEXT|LVIF_PARAM;
+ lvItem.cchTextMax = 256;
+ lvItem.iItem=0;
+ lvItem.iSubItem=0;
+ if (!bSettingSame)
+ flags = CallProtoService(setting->szName, PS_GETCAPS,PFLAGNUM_2,0)&~CallProtoService(setting->szName, PS_GETCAPS, (WPARAM)PFLAGNUM_5, 0);
+ else
+ flags = 0;
+ for(i=0;i<sizeof(statusModeList)/sizeof(statusModeList[0]);i++) {
+ if ((flags&statusModePf2List[i]) || (statusModePf2List[i] == PF2_OFFLINE) || (bSettingSame) ) {
+ lvItem.pszText = ( TCHAR* )CallService( MS_CLIST_GETSTATUSMODEDESCRIPTION, statusModeList[i], GSMDF_TCHAR );
+ lvItem.lParam = ( LPARAM )statusModePf2List[i];
+ ListView_InsertItem(hList,&lvItem);
+ ListView_SetCheckState(hList, lvItem.iItem, setting->statusFlags&statusModePf2List[i]?TRUE:FALSE);
+ lvItem.iItem++;
+ }
+ }
+ init = FALSE;
+ }
+ // status dropdown boxes
+ {
+ int i, item;
+ int flags;
+ if (!bSettingSame)
+ flags = CallProtoService(setting->szName, PS_GETCAPS,PFLAGNUM_2,0)&~CallProtoService(setting->szName, PS_GETCAPS, (WPARAM)PFLAGNUM_5, 0);
+ else
+ flags = 0;
+
+ // clear box and add new status, loop status and check if compatible with proto
+ SendDlgItemMessage(hwndDlg, IDC_LV1STATUS, CB_RESETCONTENT, (WPARAM)0, (LPARAM)0);
+ SendDlgItemMessage(hwndDlg, IDC_LV2STATUS, CB_RESETCONTENT, (WPARAM)0, (LPARAM)0);
+ for ( i=0; i < SIZEOF(statusModeList); i++ ) {
+ if ( (flags & statusModePf2List[i]) || statusModePf2List[i] == PF2_OFFLINE || bSettingSame ) {
+ TCHAR *statusMode = ( TCHAR* )CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION, statusModeList[i], GSMDF_TCHAR );
+ item = SendDlgItemMessage(hwndDlg,IDC_LV1STATUS,CB_ADDSTRING,0,(LPARAM)statusMode);
+ item = SendDlgItemMessage(hwndDlg,IDC_LV2STATUS,CB_ADDSTRING,0,(LPARAM)statusMode);
+ SendDlgItemMessage(hwndDlg,IDC_LV1STATUS,CB_SETITEMDATA,item,(LPARAM)statusModeList[i]);
+ SendDlgItemMessage(hwndDlg,IDC_LV2STATUS,CB_SETITEMDATA,item,(LPARAM)statusModeList[i]);
+ if (statusModeList[i] == setting->lv1Status) {
+ SendDlgItemMessage(hwndDlg,IDC_LV1STATUS,CB_SETCURSEL,(WPARAM)item,0);
+
+ TCHAR setNaStr[256];
+ mir_sntprintf( setNaStr, SIZEOF(setNaStr), TranslateT("minutes of %s mode"), statusMode );
+ SetDlgItemText( hwndDlg, IDC_SETNASTR, setNaStr );
+ }
+ if (statusModeList[i] == setting->lv2Status)
+ SendDlgItemMessage(hwndDlg,IDC_LV2STATUS,CB_SETCURSEL,(WPARAM)item,0);
+ }
+ }
+ }
+ SetDialogItems(hwndDlg, setting);
+ break;
+
+ case IDC_LV1STATUS:
+ if (HIWORD(wParam) == CBN_SELCHANGE)
+ SendMessage(GetParent(hwndDlg),PSM_CHANGED,0,0);
+
+ setting->lv1Status = (int)SendDlgItemMessage(hwndDlg, IDC_LV1STATUS, CB_GETITEMDATA, SendDlgItemMessage(hwndDlg, IDC_LV1STATUS, CB_GETCURSEL, 0, 0), 0);
+ {
+ TCHAR setNaStr[256];
+ mir_sntprintf(setNaStr, SIZEOF(setNaStr), TranslateT("minutes of %s mode"),
+ CallService( MS_CLIST_GETSTATUSMODEDESCRIPTION, setting->lv1Status, GSMDF_TCHAR ));
+ SetDlgItemText(hwndDlg,IDC_SETNASTR,setNaStr);
+ }
+ break;
+
+ case IDC_LV2STATUS:
+ if (HIWORD(wParam) == CBN_SELCHANGE)
+ SendMessage(GetParent(hwndDlg),PSM_CHANGED,0,0);
+
+ setting->lv2Status = (int)SendDlgItemMessage(hwndDlg, IDC_LV2STATUS, CB_GETITEMDATA, SendDlgItemMessage(hwndDlg, IDC_LV2STATUS, CB_GETCURSEL, 0, 0), 0);
+ break;
+
+ case IDC_SCREENSAVE:
+ setting->optionFlags^=FLAG_ONSAVER;
+ SetDialogItems(hwndDlg, setting);
+ break;
+
+ case IDC_ONLOCK:
+ setting->optionFlags^=FLAG_ONLOCK;
+ SetDialogItems(hwndDlg, setting);
+ break;
+
+ case IDC_TIMED:
+ setting->optionFlags^=FLAG_ONMOUSE;
+ SetDialogItems(hwndDlg, setting);
+ break;
+
+ case IDC_SETNA:
+ setting->optionFlags^=FLAG_SETNA;
+ SetDialogItems(hwndDlg, setting);
+ break;
+
+ case IDC_AWAYTIME:
+ setting->awayTime = GetDlgItemInt(hwndDlg,IDC_AWAYTIME, NULL, FALSE);
+ break;
+
+ case IDC_NATIME:
+ setting->naTime = GetDlgItemInt(hwndDlg,IDC_NATIME, NULL, FALSE);
+ break;
+
+ case IDC_LV2ONINACTIVE:
+ setting->optionFlags^=FLAG_LV2ONINACTIVE;
+ SetDialogItems(hwndDlg, setting);
+ break;
+
+ case IDC_CONFIRM:
+ setting->optionFlags^=FLAG_CONFIRM;
+ SetDialogItems(hwndDlg, setting);
+ break;
+
+ case IDC_RESETSTATUS:
+ setting->optionFlags^=FLAG_RESET;
+ SetDialogItems(hwndDlg, setting);
+ break;
+
+ case IDC_MONITORMIRANDA:
+ setting->optionFlags^=FLAG_MONITORMIRANDA;
+ SetDialogItems(hwndDlg, setting);
+ break;
+ }
+ break;
+ }
+
+ case WM_SHOWWINDOW:
+ init = TRUE;
+ {
+ TAAAProtoSetting* setting = GetSetting(hwndDlg, sameSetting);
+ if ( setting )
+ SetDialogItems(hwndDlg, setting);
+ }
+ SendMessage(hwndDlg, WM_COMMAND, (WPARAM)IDC_PROTOCOL, (LPARAM)0x11111111);
+ init = FALSE;
+ break;
+
+ case WM_NOTIFY:
+ switch(((NMHDR*)lParam)->idFrom) {
+ case IDC_STATUSLIST:
+ if (init)
+ break;
+
+ switch(((NMHDR*)lParam)->code) {
+ case LVN_ITEMCHANGED:
+ {
+ NMLISTVIEW *nmlv = (NMLISTVIEW *)lParam;
+ if (IsWindowVisible(GetDlgItem(hwndDlg,IDC_STATUSLIST)) && ((nmlv->uNewState^nmlv->uOldState)&LVIS_STATEIMAGEMASK)) {
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+
+ TAAAProtoSetting* setting = GetSetting(hwndDlg, sameSetting);
+ if ( setting ) {
+ HWND hList=GetDlgItem(hwndDlg,IDC_STATUSLIST);
+ LVITEM lvItem = { 0 };
+ lvItem.mask = LVIF_PARAM;
+ lvItem.iItem = nmlv->iItem;
+ ListView_GetItem(hList, &lvItem);
+ int pf2Status = lvItem.lParam;
+ if (ListView_GetCheckState(hList, lvItem.iItem))
+ setting->statusFlags |= pf2Status;
+ else
+ setting->statusFlags &= ~pf2Status;
+ }
+ }
+ }
+ break;
+ }
+ break;
+ }
+
+ switch (((LPNMHDR)lParam)->code) {
+ case PSN_APPLY:
+ if (bSettingSame)
+ WriteAutoAwaySetting(*sameSetting, SETTING_ALL);
+ else {
+ for (int i=0; i < optionSettings.getCount(); i++ )
+ WriteAutoAwaySetting(optionSettings[i], optionSettings[i].szName);
+ }
+ LoadOptions(autoAwaySettings, FALSE);
+ }
+ break;
+
+ case WM_DESTROY:
+ optionSettings.destroy();
+ free(sameSetting);
+ break;
+ }
+ return FALSE;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// General options window procedure
+
+static INT_PTR CALLBACK DlgProcAutoAwayGeneralOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch (msg) {
+ case WM_INITDIALOG:
+ TranslateDialogDefault(hwndDlg);
+ CheckDlgButton(hwndDlg, IDC_IGNLOCK, DBGetContactSettingByte(NULL, MODULENAME, SETTING_IGNLOCK, FALSE)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_IGNSYSKEYS, DBGetContactSettingByte(NULL, MODULENAME, SETTING_IGNSYSKEYS, FALSE)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_IGNALTCOMBO, DBGetContactSettingByte(NULL, MODULENAME, SETTING_IGNALTCOMBO, FALSE)?BST_CHECKED:BST_UNCHECKED);
+ SetDlgItemInt(hwndDlg, IDC_AWAYCHECKTIMEINSECS, DBGetContactSettingWord(NULL, MODULENAME, SETTING_AWAYCHECKTIMEINSECS, 5), FALSE);
+ SetDlgItemInt(hwndDlg, IDC_CONFIRMDELAY, DBGetContactSettingWord(NULL, MODULENAME, SETTING_CONFIRMDELAY, 5), FALSE);
+ CheckDlgButton(hwndDlg, bSettingSame?IDC_SAMESETTINGS:IDC_PERPROTOCOLSETTINGS, BST_CHECKED);
+ CheckDlgButton(hwndDlg, IDC_MONITORMOUSE, DBGetContactSettingByte(NULL, MODULENAME, SETTING_MONITORMOUSE, TRUE)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_MONITORKEYBOARD, DBGetContactSettingByte(NULL, MODULENAME, SETTING_MONITORKEYBOARD, TRUE)?BST_CHECKED:BST_UNCHECKED);
+ ShowWindow(GetDlgItem(hwndDlg, IDC_IDLEWARNING), (DBGetContactSettingByte(NULL, "Idle", "AAEnable", 0)));
+ break;
+
+ case WM_SHOWWINDOW:
+ ShowWindow(GetDlgItem(hwndDlg, IDC_IDLEWARNING), (DBGetContactSettingByte(NULL, "Idle", "AAEnable", 0)));
+ break;
+
+ case WM_COMMAND:
+ if (( HIWORD(wParam) == EN_CHANGE || HIWORD(wParam) == BN_CLICKED ) && (HWND)lParam == GetFocus() )
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+
+ switch(LOWORD(wParam)) {
+ case IDC_MONITORMOUSE:
+ CheckDlgButton(hwndDlg, IDC_MONITORMOUSE, (((!IsDlgButtonChecked(hwndDlg, IDC_MONITORMOUSE))&&(!IsDlgButtonChecked(hwndDlg, IDC_MONITORKEYBOARD)))||(IsDlgButtonChecked(hwndDlg, IDC_MONITORMOUSE))?BST_CHECKED:BST_UNCHECKED));
+ break;
+
+ case IDC_MONITORKEYBOARD:
+ CheckDlgButton(hwndDlg, IDC_MONITORKEYBOARD, (((!IsDlgButtonChecked(hwndDlg, IDC_MONITORMOUSE))&&(!IsDlgButtonChecked(hwndDlg, IDC_MONITORKEYBOARD)))||(IsDlgButtonChecked(hwndDlg, IDC_MONITORKEYBOARD))?BST_CHECKED:BST_UNCHECKED));
+ break;
+
+ case IDC_SAMESETTINGS:
+ case IDC_PERPROTOCOLSETTINGS:
+ bSettingSame = IsDlgButtonChecked(hwndDlg, IDC_SAMESETTINGS);
+ break;
+ }
+ break;
+
+ case WM_NOTIFY:
+ if (((LPNMHDR)lParam)->code == PSN_APPLY ) {
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_IGNLOCK, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_IGNLOCK));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_IGNSYSKEYS, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_IGNSYSKEYS));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_IGNALTCOMBO, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_IGNALTCOMBO));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_SAMESETTINGS, (BYTE)bSettingSame);
+ DBWriteContactSettingWord(NULL, MODULENAME, SETTING_AWAYCHECKTIMEINSECS, (WORD)GetDlgItemInt(hwndDlg, IDC_AWAYCHECKTIMEINSECS, NULL, FALSE));
+ DBWriteContactSettingWord(NULL, MODULENAME, SETTING_CONFIRMDELAY, (WORD)GetDlgItemInt(hwndDlg, IDC_CONFIRMDELAY, NULL, FALSE));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_MONITORMOUSE, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_MONITORMOUSE));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_MONITORKEYBOARD, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_MONITORKEYBOARD));
+ LoadOptions(autoAwaySettings, FALSE);
+ }
+ break;
+ }
+ return FALSE;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// Tab window procedure
+
+static INT_PTR CALLBACK DlgProcAutoAwayTabs(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch(msg) {
+ case WM_INITDIALOG:
+ {
+ int tabCount;
+ HWND hTab, hShow, hPage;
+ TCITEM tci;
+ RECT rcTabs, rcOptions, rcPage;
+
+ TranslateDialogDefault(hwndDlg);
+ bSettingSame = DBGetContactSettingByte(NULL, MODULENAME, SETTING_SAMESETTINGS, FALSE);
+ // set tabs
+ tabCount = 0;
+ hTab = GetDlgItem(hwndDlg, IDC_TABS);
+ GetWindowRect(hTab, &rcTabs);
+ GetWindowRect(hwndDlg, &rcOptions);
+ ZeroMemory(&tci, sizeof(TCITEM));
+ // general tab
+ tci.mask = TCIF_TEXT|TCIF_PARAM;
+ tci.pszText = TranslateT("General");
+ hPage = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_OPT_GENAUTOAWAY), hwndDlg, DlgProcAutoAwayGeneralOpts, (LPARAM)GetParent(hwndDlg));
+ if (pfnEnableThemeDialogTexture)
+ pfnEnableThemeDialogTexture(hPage, ETDT_ENABLETAB);
+
+ tci.lParam = (LPARAM)hPage;
+ GetClientRect(hPage, &rcPage);
+ MoveWindow(hPage, (rcTabs.left - rcOptions.left) + ((rcTabs.right-rcTabs.left)-(rcPage.right-rcPage.left))/2, 10 + (rcTabs.top - rcOptions.top) + ((rcTabs.bottom-rcTabs.top)-(rcPage.bottom-rcPage.top))/2, rcPage.right-rcPage.left, rcPage.bottom-rcPage.top, TRUE);
+ ShowWindow(hPage, SW_HIDE);
+ TabCtrl_InsertItem(hTab, tabCount++, &tci);
+ hShow = hPage;
+ // rules tab
+ tci.mask = TCIF_TEXT|TCIF_PARAM;
+ tci.pszText = TranslateT("Rules");
+ hPage = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_OPT_AUTOAWAY), hwndDlg, DlgProcAutoAwayRulesOpts, (LPARAM)GetParent(hwndDlg));
+ if (pfnEnableThemeDialogTexture)
+ pfnEnableThemeDialogTexture(hPage, ETDT_ENABLETAB);
+
+ tci.lParam = (LPARAM)hPage;
+ GetClientRect(hPage, &rcPage);
+ MoveWindow(hPage, (rcTabs.left - rcOptions.left) + ((rcTabs.right-rcTabs.left)-(rcPage.right-rcPage.left))/2, 10 + (rcTabs.top - rcOptions.top) + ((rcTabs.bottom-rcTabs.top)-(rcPage.bottom-rcPage.top))/2, rcPage.right-rcPage.left, rcPage.bottom-rcPage.top, TRUE);
+ ShowWindow(hPage, SW_HIDE);
+ TabCtrl_InsertItem(hTab, tabCount++, &tci);
+ // messages tab
+ tci.mask = TCIF_TEXT|TCIF_PARAM;
+ tci.pszText = TranslateT("Status Messages");
+ hPage = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_OPT_AUTOAWAYMSG), hwndDlg, DlgProcAutoAwayMsgOpts, (LPARAM)GetParent(hwndDlg));
+ if (pfnEnableThemeDialogTexture)
+ pfnEnableThemeDialogTexture(hPage, ETDT_ENABLETAB);
+
+ tci.lParam = (LPARAM)hPage;
+ GetClientRect(hPage, &rcPage);
+ MoveWindow(hPage, (rcTabs.left - rcOptions.left) + ((rcTabs.right-rcTabs.left)-(rcPage.right-rcPage.left))/2, 10 + (rcTabs.top - rcOptions.top) + ((rcTabs.bottom-rcTabs.top)-(rcPage.bottom-rcPage.top))/2, rcPage.right-rcPage.left, rcPage.bottom-rcPage.top, TRUE);
+ ShowWindow(hPage, SW_HIDE);
+ TabCtrl_InsertItem(hTab, tabCount++, &tci);
+
+ ShowWindow(hShow, SW_SHOW);
+ }
+ break;
+
+ case PSM_CHANGED:
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+
+ case WM_NOTIFY:
+ if ( (((NMHDR*)lParam)->idFrom == IDC_TABS) ) {
+ if (((NMHDR*)lParam)->code == TCN_SELCHANGING) {
+ TCITEM tci;
+
+ tci.mask = TCIF_PARAM;
+ TabCtrl_GetItem(GetDlgItem(hwndDlg, IDC_TABS), TabCtrl_GetCurSel(GetDlgItem(hwndDlg, IDC_TABS)), &tci);
+ ShowWindow((HWND)tci.lParam, SW_HIDE);
+ }
+ else if (((NMHDR*)lParam)->code == TCN_SELCHANGE) {
+ TCITEM tci;
+
+ tci.mask = TCIF_PARAM;
+ TabCtrl_GetItem(GetDlgItem(hwndDlg, IDC_TABS), TabCtrl_GetCurSel(GetDlgItem(hwndDlg, IDC_TABS)), &tci);
+ ShowWindow((HWND)tci.lParam, SW_SHOW);
+ }
+ }
+ if (((LPNMHDR)lParam)->code == PSN_APPLY) {
+ TCITEM tci;
+ int i, count;
+
+ tci.mask = TCIF_PARAM;
+ count = TabCtrl_GetItemCount(GetDlgItem(hwndDlg, IDC_TABS));
+ for (i=0; i < count; i++ ) {
+ TabCtrl_GetItem(GetDlgItem(hwndDlg,IDC_TABS), i, &tci);
+ SendMessage((HWND)tci.lParam, WM_NOTIFY, 0, lParam);
+ } }
+
+ break;
+ }
+
+ return FALSE;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// Options initialization procedure
+
+int AutoAwayOptInitialise(WPARAM wParam,LPARAM lParam)
+{
+ HMODULE hUxTheme = NULL;
+ if(IsWinVerXPPlus()) {
+ hUxTheme = GetModuleHandle(_T("uxtheme.dll"));
+ if (hUxTheme)
+ pfnEnableThemeDialogTexture = (BOOL (WINAPI *)(HANDLE, DWORD))GetProcAddress(hUxTheme, "EnableThemeDialogTexture");
+ }
+
+ OPTIONSDIALOGPAGE odp = { 0 };
+ odp.cbSize = sizeof(odp);
+ odp.position = 1000000000;
+ odp.hInstance = hInst;
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_TABS);
+ odp.pszTitle = LPGEN("Auto Away");
+ odp.pszGroup = LPGEN("Status");
+ odp.pfnDlgProc = DlgProcAutoAwayTabs;
+ odp.flags = ODPF_BOLDGROUPS;
+ CallService( MS_OPT_ADDPAGE, wParam, (LPARAM)&odp );
+ return 0;
+}
diff --git a/plugins/StatusPlugins/AdvancedAutoAway/pack.cmd b/plugins/StatusPlugins/AdvancedAutoAway/pack.cmd
new file mode 100644
index 0000000000..fb55ba37f6
--- /dev/null
+++ b/plugins/StatusPlugins/AdvancedAutoAway/pack.cmd
@@ -0,0 +1,42 @@
+@echo off
+set PluginName=AdvancedAutoAway
+nmake -f %PluginName%.mak CFG="%PluginName% - Win32 Release"
+nmake -f %PluginName%.mak CFG="%PluginName% - Win32 Release Unicode"
+if errorlevel 1 (
+ echo "Make failed"
+ goto :eof )
+
+del "%temp%\%PluginName%.zip" > nul
+del "%temp%\%PluginName%W.zip" > nul
+del "%temp%\%PluginName%Src.zip" > nul
+del *.user > nul
+
+rd /S /Q Release
+rd /S /Q Release_Unicode
+
+for /F "tokens=1-6 delims=, " %%i in (buildnumber.h) do call :Translate %%i %%j %%k %%l %%m %%n
+
+"%PROGRAMFILES%\7-zip\7z.exe" a -tzip -r- -mx=9 "%temp%\%PluginName%.zip" ../../../bin/Release/Plugins/%PluginName%.dll ../statusplugins-translation.txt ../m_statusplugins.h
+del ../../../bin/Release/Plugins/%PluginName%.dll >nul
+
+"%PROGRAMFILES%\7-zip\7z.exe" a -tzip -r- -mx=9 "%temp%\%PluginName%W.zip" "../../../bin/Release Unicode/Plugins/%PluginName%.dll" ../statusplugins-translation.txt ../m_statusplugins.h
+del "../../../bin/Release Unicode/Plugins/%PluginName%.dll" >nul
+
+if exist "%PROGRAMFILES%\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe" (
+ "%PROGRAMFILES%\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe" AdvancedAutoAway_9.vcproj /Build "Release Unicode|x64"
+ copy "Release Unicode64\Plugins\%PluginName%.dll" .
+ "%PROGRAMFILES%\7-zip\7z.exe" a -tzip -r0 -mx=9 "%temp%\%PluginName%64.zip" %PluginName%.dll ../statusplugins-translation.txt ../m_statusplugins.h
+ del %PluginName%.dll
+ rd /S /Q "Release Unicode64" )
+
+cd ../..
+"%PROGRAMFILES%\7-zip\7z.exe" a -tzip -r0 -mx=9 "%temp%\%PluginName%Src.zip" -ir!helpers/*.* -ir!StatusPlugins/*.* -ir!NewTriggerPlugin/*.* -xr!StatusPlugins/KeepStatus/* -xr!StatusPlugins/StartupStatus/* -xr!.svn -x!*.cmd
+goto :eof
+
+:Translate
+if %2 == __FILEVERSION_STRING (
+ pushd ..
+ perl lpgen.pl status version %3 %4 %5 %6
+ popd)
+
+goto :eof
diff --git a/plugins/StatusPlugins/AdvancedAutoAway/trigger_aaa.cpp b/plugins/StatusPlugins/AdvancedAutoAway/trigger_aaa.cpp
new file mode 100644
index 0000000000..e803c2dab4
--- /dev/null
+++ b/plugins/StatusPlugins/AdvancedAutoAway/trigger_aaa.cpp
@@ -0,0 +1,161 @@
+#include "../commonstatus.h"
+#include "advancedautoaway.h"
+#include <m_trigger.h>
+#include "trigger_aaa.h"
+#include "../resource.h"
+
+extern HINSTANCE hInst;
+static HANDLE hAAAStateChangedHook;
+
+static int AAAStateChanged(WPARAM wParam, LPARAM lParam) {
+
+ AUTOAWAYSETTING *aas;
+ DWORD triggerID;
+ REPORTINFO ri;
+ TRIGGERDATA td;
+ BOOL bReport;
+
+ aas = (AUTOAWAYSETTING *)lParam;
+ triggerID = 0;
+ do {
+ triggerID = (DWORD)CallService(MS_TRIGGER_FINDNEXTTRIGGERID, triggerID, (LPARAM)TRIGGERNAME);
+ if (triggerID == 0) {
+ continue;
+ }
+ bReport = FALSE;
+ switch (aas->curState) {
+ case STATUS1_SET:
+ if (DBGetTriggerSettingByte(triggerID, NULL, MODULENAME, SETTING_ENTERFIRST, 0)) {
+ bReport = TRUE;
+ }
+ break;
+ case STATUS2_SET:
+ if (DBGetTriggerSettingByte(triggerID, NULL, MODULENAME, SETTING_ENTERSECOND, 0)) {
+ bReport = TRUE;
+ }
+ break;
+ case SET_ORGSTATUS:
+ if ( (aas->oldState == STATUS1_SET) && (DBGetTriggerSettingByte(triggerID, NULL, MODULENAME, SETTING_LEAVEFIRST, 0)) ) {
+ bReport = TRUE;;
+ }
+ if ( (aas->oldState == STATUS2_SET) && (DBGetTriggerSettingByte(triggerID, NULL, MODULENAME, SETTING_LEAVESECOND, 0)) ) {
+ bReport = TRUE;;
+ }
+ break;
+ case HIDDEN_ACTIVE:
+ if (DBGetTriggerSettingByte(triggerID, NULL, MODULENAME, SETTING_BECOMEACTIVE, 0)) {
+ bReport = TRUE;
+ }
+ break;
+ case ACTIVE:
+ if (aas->oldState == HIDDEN_ACTIVE) {
+ char setting[128];
+ char *szProto;
+
+ szProto = DBGetContactSettingByte(NULL, MODULENAME, SETTING_SAMESETTINGS, 0)?SETTING_ALL:aas->protocolSetting->szName;
+ _snprintf(setting, sizeof(setting), "%s_Lv1Status", szProto);
+ if ( (aas->protocolSetting->lastStatus == DBGetContactSettingWord(NULL, MODULENAME, setting, ID_STATUS_AWAY)) && DBGetTriggerSettingByte(triggerID, NULL, MODULENAME, SETTING_LEAVEFIRST, 0) ) {
+ bReport = TRUE;
+ }
+
+ _snprintf(setting, sizeof(setting), "%s_Lv2Status", szProto);
+ if ( (aas->protocolSetting->lastStatus == DBGetContactSettingWord(NULL, MODULENAME, setting, ID_STATUS_NA)) && DBGetTriggerSettingByte(triggerID, NULL, MODULENAME, SETTING_LEAVESECOND, 0) ) {
+ bReport = TRUE;
+ }
+ }
+ break;
+ }
+ if (!bReport) {
+ continue;
+ }
+ ZeroMemory(&td, sizeof(td));
+ td.cbSize = sizeof(td);
+ td.dFlags = DF_PROTO|DF_STATUS|DF_TEXT;
+ td.szProto = td.szText = aas->protocolSetting->szName;
+ td.status = aas->protocolSetting->status;
+ ZeroMemory(&ri, sizeof(REPORTINFO));
+ ri.cbSize = sizeof(REPORTINFO);
+ ri.triggerID = triggerID;
+ ri.pszName = TRIGGERNAME;
+ ri.flags = TRG_PERFORM;
+ ri.td = &td;
+ CallService(MS_TRIGGER_REPORTEVENT, 0, (LPARAM)&ri);
+ } while (triggerID != 0);
+
+ return 0;
+}
+
+static INT_PTR CALLBACK DlgProcOptsAAAStateChange(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) {
+
+ switch (msg) {
+ case WM_INITDIALOG: {
+ DWORD triggerID;
+
+ TranslateDialogDefault(hwndDlg);
+ triggerID = (DWORD)lParam;
+ CheckDlgButton(hwndDlg, IDC_ENTERFIRST, DBGetTriggerSettingByte(triggerID, NULL, MODULENAME, SETTING_ENTERFIRST, 0)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_ENTERSECOND, DBGetTriggerSettingByte(triggerID, NULL, MODULENAME, SETTING_ENTERSECOND, 0)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_LEAVEFIRST, DBGetTriggerSettingByte(triggerID, NULL, MODULENAME, SETTING_LEAVEFIRST, 0)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_LEAVESECOND, DBGetTriggerSettingByte(triggerID, NULL, MODULENAME, SETTING_LEAVESECOND, 0)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_BECOMEACTIVE, DBGetTriggerSettingByte(triggerID, NULL, MODULENAME, SETTING_BECOMEACTIVE, 0)?BST_CHECKED:BST_UNCHECKED);
+ break;
+ }
+
+ case TM_ADDTRIGGER: {
+ // wParam = trigger ID
+ DWORD triggerID;
+
+ triggerID = (DWORD)wParam;
+ DBWriteTriggerSettingByte(triggerID, NULL, MODULENAME, SETTING_ENTERFIRST, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_ENTERFIRST));
+ DBWriteTriggerSettingByte(triggerID, NULL, MODULENAME, SETTING_ENTERSECOND, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_ENTERSECOND));
+ DBWriteTriggerSettingByte(triggerID, NULL, MODULENAME, SETTING_LEAVEFIRST, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_LEAVEFIRST));
+ DBWriteTriggerSettingByte(triggerID, NULL, MODULENAME, SETTING_LEAVESECOND, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_LEAVESECOND));
+ DBWriteTriggerSettingByte(triggerID, NULL, MODULENAME, SETTING_BECOMEACTIVE, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_BECOMEACTIVE));
+ break;
+ }
+
+ case TM_DELTRIGGER: {
+ // wParam = triggerID
+ DWORD triggerID;
+ REMOVETRIGGERSETTINGS rts;
+
+ triggerID = (DWORD)wParam;
+ rts.cbSize = sizeof(REMOVETRIGGERSETTINGS);
+ rts.prefix = PREFIX_TRIGGERID;
+ rts.id = triggerID;
+ rts.hContact = NULL;
+ rts.szModule = MODULENAME;
+ CallService(MS_TRIGGER_REMOVESETTINGS, 0, (LPARAM)&rts);
+ break;
+ }
+ }
+
+ return FALSE;
+}
+
+int InitTrigger() {
+
+ TRIGGERREGISTER tr;
+
+ if (!ServiceExists(MS_TRIGGER_REGISTERTRIGGER)) {
+ return -1;
+ }
+ ZeroMemory(&tr, sizeof(tr));
+ tr.cbSize = sizeof(tr);
+ tr.pszName = TRIGGERNAME;
+ tr.hInstance = hInst;
+ tr.pfnDlgProc = DlgProcOptsAAAStateChange;
+ tr.pszTemplate = MAKEINTRESOURCEA(IDD_TRG_AAASTATECHANGE);
+ tr.dFlags = DF_STATUS|DF_PROTO;
+ CallService(MS_TRIGGER_REGISTERTRIGGER, 0, (LPARAM)&tr);
+ hAAAStateChangedHook = HookEvent(ME_AAA_STATECHANGED, AAAStateChanged);
+
+ return 0;
+}
+
+int DeInitTrigger() {
+
+ UnhookEvent(hAAAStateChangedHook);
+
+ return 0;
+} \ No newline at end of file
diff --git a/plugins/StatusPlugins/AdvancedAutoAway/trigger_aaa.h b/plugins/StatusPlugins/AdvancedAutoAway/trigger_aaa.h
new file mode 100644
index 0000000000..52b15edd00
--- /dev/null
+++ b/plugins/StatusPlugins/AdvancedAutoAway/trigger_aaa.h
@@ -0,0 +1,7 @@
+#define TRIGGERNAME "Auto-Away: State change"
+
+#define SETTING_ENTERFIRST "trigger_EnterFirst"
+#define SETTING_ENTERSECOND "trigger_EnterSecond"
+#define SETTING_LEAVEFIRST "trigger_LeaveFirst"
+#define SETTING_LEAVESECOND "trigger_LeaveSecond"
+#define SETTING_BECOMEACTIVE "trigger_BecomeActive" \ No newline at end of file
diff --git a/plugins/StatusPlugins/AdvancedAutoAway/vc6.rc b/plugins/StatusPlugins/AdvancedAutoAway/vc6.rc
new file mode 100644
index 0000000000..730cf1e916
--- /dev/null
+++ b/plugins/StatusPlugins/AdvancedAutoAway/vc6.rc
@@ -0,0 +1,2 @@
+#include "..\resource.rc"
+#include "..\version.rc" \ No newline at end of file
diff --git a/plugins/StatusPlugins/AdvancedAutoAway/version.h b/plugins/StatusPlugins/AdvancedAutoAway/version.h
new file mode 100644
index 0000000000..9c0462460d
--- /dev/null
+++ b/plugins/StatusPlugins/AdvancedAutoAway/version.h
@@ -0,0 +1,56 @@
+// Set the version number here - it will affect the version resource and the version field of the pluginInfo structure
+// (Be careful that you don't have the resource file open when you change this and rebuild, otherwise the changes may not
+// take effect within the version resource)
+// Do not forget to define symbol "_DEBUG" for resource compiler if you use debug configuration (in VisualStudio you can
+// find it under Project properties - Configuration properties - Resource - General - Preprocessor definitions)
+
+// plugin version part
+#define __MAJOR_VERSION 0
+#define __MINOR_VERSION 8
+#define __RELEASE_NUM 0
+#define __BUILD_NUM 42
+
+// minimal MirandaIM version number, with which this plugin supposed to work
+#define __PROD_MAJOR_VERSION 0
+#define __PROD_MINOR_VERSION 8
+#define __PROD_RELEASE_NUM 0
+#define __PROD_BUILD_NUM 0
+// if your plugin works only with Miranda core beginning from specific revision, you can include this information in Product Version resource
+//#define __PROD_REV_NUM 1234
+
+// stuff that will be used in PluginInfo section and in Version resource
+#define __PLUGIN_NAME "Advanced Auto Away"
+#define __FILENAME "AdvancedAutoAway.dll"
+#define __DESC "AdvancedAutoAway, an Auto Away module with some more options than the original."
+#define __AUTHOR "P Boon"
+#define __AUTHOREMAIL "unregistered@users.sourceforge.net"
+#define __AUTHORWEB "http://www.miranda-im.org/"
+#define __COPYRIGHT "(c) 2003-08 P. Boon, 2008-11 George Hazan"
+
+// other stuff for Version resource
+#define __STRINGIFY_IMPL(x) #x
+#define __STRINGIFY(x) __STRINGIFY_IMPL(x)
+
+#define __FILEVERSION_STRING __MAJOR_VERSION,__MINOR_VERSION,__RELEASE_NUM,__BUILD_NUM
+#define __FILEVERSION_STRING_DOTS __MAJOR_VERSION.__MINOR_VERSION.__RELEASE_NUM.__BUILD_NUM
+#ifdef _UNICODE
+#ifdef __REV_NUM
+#define __VERSION_STRING __STRINGIFY(__FILEVERSION_STRING_DOTS rev. __REV_NUM Unicode)
+#else
+#define __VERSION_STRING __STRINGIFY(__FILEVERSION_STRING_DOTS Unicode)
+#endif
+#else
+#ifdef __REV_NUM
+#define __VERSION_STRING __STRINGIFY(__FILEVERSION_STRING_DOTS rev. __REV_NUM)
+#else
+#define __VERSION_STRING __STRINGIFY(__FILEVERSION_STRING_DOTS)
+#endif
+#endif
+
+#define __PRODVERSION_STRING __PROD_MAJOR_VERSION,__PROD_MINOR_VERSION,__PROD_RELEASE_NUM,__PROD_BUILD_NUM
+#define __PRODVERSION_STRING_DOTS __PROD_MAJOR_VERSION.__PROD_MINOR_VERSION.__PROD_RELEASE_NUM.__PROD_BUILD_NUM
+#ifdef __PROD_REV_NUM
+#define __PROD_VERSION_STRING __STRINGIFY(__PRODVERSION_STRING_DOTS rev. __PROD_REV_NUM)
+#else
+#define __PROD_VERSION_STRING __STRINGIFY(__PRODVERSION_STRING_DOTS+)
+#endif
diff --git a/plugins/StatusPlugins/KeepStatus/KeepStatus.dep b/plugins/StatusPlugins/KeepStatus/KeepStatus.dep
new file mode 100644
index 0000000000..c908836870
--- /dev/null
+++ b/plugins/StatusPlugins/KeepStatus/KeepStatus.dep
@@ -0,0 +1,236 @@
+# Microsoft Developer Studio Generated Dependency File, included by KeepStatus.mak
+
+.\action_keepstatus.cpp : \
+ "..\..\..\include\m_addcontact.h"\
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clc.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_clistint.h"\
+ "..\..\..\include\m_clui.h"\
+ "..\..\..\include\m_contacts.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_email.h"\
+ "..\..\..\include\m_file.h"\
+ "..\..\..\include\m_findadd.h"\
+ "..\..\..\include\m_genmenu.h"\
+ "..\..\..\include\m_history.h"\
+ "..\..\..\include\m_idle.h"\
+ "..\..\..\include\m_ignore.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_message.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_options.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protomod.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_skin.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_userinfo.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\helpers\commonheaders.h"\
+ "..\..\helpers\db_helpers.h"\
+ "..\..\helpers\gen_helpers.h"\
+ "..\..\newtriggerplugin\m_trigger.h"\
+ ".\keepstatus.h"\
+ ".\version.h"\
+ {$(INCLUDE)}"ipexport.h"\
+
+
+..\commonstatus.cpp : \
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\helpers\gen_helpers.h"\
+
+
+..\confirmdialog.cpp : \
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\helpers\gen_helpers.h"\
+
+
+..\..\helpers\gen_helpers.cpp : \
+ "..\..\..\include\m_addcontact.h"\
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clc.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_clistint.h"\
+ "..\..\..\include\m_clui.h"\
+ "..\..\..\include\m_contacts.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_email.h"\
+ "..\..\..\include\m_file.h"\
+ "..\..\..\include\m_findadd.h"\
+ "..\..\..\include\m_genmenu.h"\
+ "..\..\..\include\m_history.h"\
+ "..\..\..\include\m_idle.h"\
+ "..\..\..\include\m_ignore.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_message.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_options.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protomod.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_skin.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_userinfo.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\helpers\commonheaders.h"\
+ "..\..\helpers\gen_helpers.h"\
+
+
+.\keepstatus.cpp : \
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_options.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_popup.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_skin.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_system_cpp.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\..\include\win2k.h"\
+ "..\..\helpers\gen_helpers.h"\
+ "..\commonstatus.h"\
+ "..\includes\m_NewAwaySys.h"\
+ "..\includes\m_updater.h"\
+ "..\includes\m_variables.h"\
+ "..\includes\m_vsramm.h"\
+ "..\m_statusplugins.h"\
+ ".\keepstatus.h"\
+ ".\version.h"\
+ {$(INCLUDE)}"ipexport.h"\
+
+
+.\main.cpp : \
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_options.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_popup.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_skin.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_system_cpp.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\..\include\win2k.h"\
+ "..\..\helpers\gen_helpers.h"\
+ "..\commonstatus.h"\
+ "..\includes\m_vsramm.h"\
+ "..\m_statusplugins.h"\
+ ".\keepstatus.h"\
+ ".\version.h"\
+ {$(INCLUDE)}"ipexport.h"\
+
+
+.\options.cpp : \
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_options.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_popup.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_skin.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_system_cpp.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\..\include\win2k.h"\
+ "..\..\helpers\gen_helpers.h"\
+ "..\commonstatus.h"\
+ "..\includes\m_NewAwaySys.h"\
+ "..\includes\m_updater.h"\
+ "..\includes\m_variables.h"\
+ "..\includes\m_vsramm.h"\
+ "..\m_statusplugins.h"\
+ ".\keepstatus.h"\
+ ".\version.h"\
+ {$(INCLUDE)}"ipexport.h"\
+
+
+.\trigger_keepstatus.cpp : \
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_options.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_popup.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_skin.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_system_cpp.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\..\include\win2k.h"\
+ "..\..\helpers\gen_helpers.h"\
+ "..\commonstatus.h"\
+ "..\includes\m_NewAwaySys.h"\
+ "..\includes\m_trigger.h"\
+ "..\includes\m_updater.h"\
+ "..\includes\m_variables.h"\
+ "..\includes\m_vsramm.h"\
+ "..\m_statusplugins.h"\
+ ".\keepstatus.h"\
+ ".\version.h"\
+ {$(INCLUDE)}"ipexport.h"\
+
+
+.\vc6.rc : \
+ "..\resource.rc"\
+
diff --git a/plugins/StatusPlugins/KeepStatus/KeepStatus.dsp b/plugins/StatusPlugins/KeepStatus/KeepStatus.dsp
new file mode 100644
index 0000000000..b28b7b2c48
--- /dev/null
+++ b/plugins/StatusPlugins/KeepStatus/KeepStatus.dsp
@@ -0,0 +1,249 @@
+# Microsoft Developer Studio Project File - Name="KeepStatus" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=KeepStatus - Win32 Debug Unicode
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "KeepStatus.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "KeepStatus.mak" CFG="KeepStatus - Win32 Debug Unicode"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "KeepStatus - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "KeepStatus - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "KeepStatus - Win32 Debug Unicode" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "KeepStatus - Win32 Release Unicode" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "KeepStatus - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "KEEPSTATUS_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "KEEPSTATUS_EXPORTS" /Yu"../commonstatus.h" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib wininet.lib Delayimp.lib ws2_32.lib /nologo /base:"0x11cd0000" /dll /debug /machine:I386 /nodefaultlib /out:"../../../bin/release/plugins/KeepStatus.dll" /delayload:wininet.dll
+# SUBTRACT LINK32 /pdb:none
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "KEEPSTATUS_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "KEEPSTATUS_EXPORTS" /FR /Yu"../commonstatus.h" /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 comctl32.lib wininet.lib Delayimp.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /dll /debug /machine:I386 /out:"../../../bin/debug/plugins/KeepStatus.dll" /pdbtype:sept /DelayLoad:wininet.dll
+# SUBTRACT LINK32 /pdb:none
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug Unicode"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "KeepStatus___Win32_Debug_Unicode"
+# PROP BASE Intermediate_Dir "KeepStatus___Win32_Debug_Unicode"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_Unicode"
+# PROP Intermediate_Dir "Debug_Unicode"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "KEEPSTATUS_EXPORTS" /FR /Yu"../commonstatus.h" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /FR /Yu"../commonstatus.h" /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 comctl32.lib wininet.lib Delayimp.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /dll /debug /machine:I386 /out:"../../../bin/debug/plugins/KeepStatus.dll" /pdbtype:sept /DelayLoad:wininet.dll
+# SUBTRACT BASE LINK32 /pdb:none
+# ADD LINK32 comctl32.lib wininet.lib Delayimp.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /dll /debug /machine:I386 /out:"../../../bin/Debug Unicode/plugins/KeepStatus.dll" /pdbtype:sept /DelayLoad:wininet.dll
+# SUBTRACT LINK32 /pdb:none
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Release Unicode"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "KeepStatus___Win32_Release_Unicode"
+# PROP BASE Intermediate_Dir "KeepStatus___Win32_Release_Unicode"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_Unicode"
+# PROP Intermediate_Dir "Release_Unicode"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "KEEPSTATUS_EXPORTS" /Yu"../commonstatus.h" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /Yu"../commonstatus.h" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib wininet.lib Delayimp.lib ws2_32.lib /nologo /base:"0x11cd0000" /dll /debug /machine:I386 /nodefaultlib /out:"../../../bin/release/plugins/KeepStatus.dll" /delayload:wininet.dll
+# SUBTRACT BASE LINK32 /pdb:none
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib wininet.lib Delayimp.lib ws2_32.lib /nologo /base:"0x11cd0000" /dll /debug /machine:I386 /nodefaultlib /out:"../../../bin/Release Unicode/plugins/KeepStatus.dll" /delayload:wininet.dll
+# SUBTRACT LINK32 /pdb:none
+
+!ENDIF
+
+# Begin Target
+
+# Name "KeepStatus - Win32 Release"
+# Name "KeepStatus - Win32 Debug"
+# Name "KeepStatus - Win32 Debug Unicode"
+# Name "KeepStatus - Win32 Release Unicode"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\action_keepstatus.cpp
+# ADD CPP /Yu"../commonstatus.h"
+# End Source File
+# Begin Source File
+
+SOURCE=..\commonstatus.cpp
+# ADD CPP /Yu"commonstatus.h"
+# End Source File
+# Begin Source File
+
+SOURCE=..\confirmdialog.cpp
+# ADD CPP /Yu"commonstatus.h"
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\helpers\gen_helpers.cpp
+# SUBTRACT CPP /YX /Yc /Yu
+# End Source File
+# Begin Source File
+
+SOURCE=.\keepstatus.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\main.cpp
+# ADD CPP /Yc"../commonstatus.h"
+# End Source File
+# Begin Source File
+
+SOURCE=.\options.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\trigger_keepstatus.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\commonstatus.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\keepstatus.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\m_statusplugins.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\resource.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\vc6.rc
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\Release\KeepStatus.txt
+
+!IF "$(CFG)" == "KeepStatus - Win32 Release"
+
+# PROP Exclude_From_Build 1
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug"
+
+# PROP Exclude_From_Build 1
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug Unicode"
+
+# PROP BASE Exclude_From_Build 1
+# PROP Exclude_From_Build 1
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Release Unicode"
+
+# PROP BASE Exclude_From_Build 1
+# PROP Exclude_From_Build 1
+
+!ENDIF
+
+# End Source File
+# End Target
+# End Project
diff --git a/plugins/StatusPlugins/KeepStatus/KeepStatus.mak b/plugins/StatusPlugins/KeepStatus/KeepStatus.mak
new file mode 100644
index 0000000000..b5690093c8
--- /dev/null
+++ b/plugins/StatusPlugins/KeepStatus/KeepStatus.mak
@@ -0,0 +1,653 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on KeepStatus.dsp
+!IF "$(CFG)" == ""
+CFG=KeepStatus - Win32 Debug Unicode
+!MESSAGE No configuration specified. Defaulting to KeepStatus - Win32 Debug Unicode.
+!ENDIF
+
+!IF "$(CFG)" != "KeepStatus - Win32 Release" && "$(CFG)" != "KeepStatus - Win32 Debug" && "$(CFG)" != "KeepStatus - Win32 Debug Unicode" && "$(CFG)" != "KeepStatus - Win32 Release Unicode"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "KeepStatus.mak" CFG="KeepStatus - Win32 Debug Unicode"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "KeepStatus - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "KeepStatus - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "KeepStatus - Win32 Debug Unicode" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "KeepStatus - Win32 Release Unicode" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "KeepStatus - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+
+ALL : "..\..\..\bin\release\plugins\KeepStatus.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\action_keepstatus.obj"
+ -@erase "$(INTDIR)\commonstatus.obj"
+ -@erase "$(INTDIR)\confirmdialog.obj"
+ -@erase "$(INTDIR)\gen_helpers.obj"
+ -@erase "$(INTDIR)\keepstatus.obj"
+ -@erase "$(INTDIR)\KeepStatus.pch"
+ -@erase "$(INTDIR)\main.obj"
+ -@erase "$(INTDIR)\options.obj"
+ -@erase "$(INTDIR)\trigger_keepstatus.obj"
+ -@erase "$(INTDIR)\vc6.res"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\KeepStatus.exp"
+ -@erase "$(OUTDIR)\KeepStatus.pdb"
+ -@erase "..\..\..\bin\release\plugins\KeepStatus.dll"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "KEEPSTATUS_EXPORTS" /Fp"$(INTDIR)\KeepStatus.pch" /Yu"../commonstatus.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\vc6.res" /d "NDEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\KeepStatus.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib wininet.lib Delayimp.lib ws2_32.lib /nologo /base:"0x11cd0000" /dll /incremental:no /pdb:"$(OUTDIR)\KeepStatus.pdb" /debug /machine:I386 /nodefaultlib /out:"../../../bin/release/plugins/KeepStatus.dll" /implib:"$(OUTDIR)\KeepStatus.lib" /delayload:wininet.dll
+LINK32_OBJS= \
+ "$(INTDIR)\action_keepstatus.obj" \
+ "$(INTDIR)\commonstatus.obj" \
+ "$(INTDIR)\confirmdialog.obj" \
+ "$(INTDIR)\gen_helpers.obj" \
+ "$(INTDIR)\keepstatus.obj" \
+ "$(INTDIR)\main.obj" \
+ "$(INTDIR)\options.obj" \
+ "$(INTDIR)\trigger_keepstatus.obj" \
+ "$(INTDIR)\vc6.res"
+
+"..\..\..\bin\release\plugins\KeepStatus.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "..\..\..\bin\debug\plugins\KeepStatus.dll" "$(OUTDIR)\KeepStatus.bsc"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\action_keepstatus.obj"
+ -@erase "$(INTDIR)\action_keepstatus.sbr"
+ -@erase "$(INTDIR)\commonstatus.obj"
+ -@erase "$(INTDIR)\commonstatus.sbr"
+ -@erase "$(INTDIR)\confirmdialog.obj"
+ -@erase "$(INTDIR)\confirmdialog.sbr"
+ -@erase "$(INTDIR)\gen_helpers.obj"
+ -@erase "$(INTDIR)\gen_helpers.sbr"
+ -@erase "$(INTDIR)\keepstatus.obj"
+ -@erase "$(INTDIR)\KeepStatus.pch"
+ -@erase "$(INTDIR)\keepstatus.sbr"
+ -@erase "$(INTDIR)\main.obj"
+ -@erase "$(INTDIR)\main.sbr"
+ -@erase "$(INTDIR)\options.obj"
+ -@erase "$(INTDIR)\options.sbr"
+ -@erase "$(INTDIR)\trigger_keepstatus.obj"
+ -@erase "$(INTDIR)\trigger_keepstatus.sbr"
+ -@erase "$(INTDIR)\vc6.res"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\KeepStatus.bsc"
+ -@erase "$(OUTDIR)\KeepStatus.exp"
+ -@erase "$(OUTDIR)\KeepStatus.pdb"
+ -@erase "..\..\..\bin\debug\plugins\KeepStatus.dll"
+ -@erase "..\..\..\bin\debug\plugins\KeepStatus.ilk"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "KEEPSTATUS_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\KeepStatus.pch" /Yu"../commonstatus.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\vc6.res" /d "_DEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\KeepStatus.bsc"
+BSC32_SBRS= \
+ "$(INTDIR)\action_keepstatus.sbr" \
+ "$(INTDIR)\commonstatus.sbr" \
+ "$(INTDIR)\confirmdialog.sbr" \
+ "$(INTDIR)\gen_helpers.sbr" \
+ "$(INTDIR)\keepstatus.sbr" \
+ "$(INTDIR)\main.sbr" \
+ "$(INTDIR)\options.sbr" \
+ "$(INTDIR)\trigger_keepstatus.sbr"
+
+"$(OUTDIR)\KeepStatus.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
+ $(BSC32) @<<
+ $(BSC32_FLAGS) $(BSC32_SBRS)
+<<
+
+LINK32=link.exe
+LINK32_FLAGS=comctl32.lib wininet.lib Delayimp.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\KeepStatus.pdb" /debug /machine:I386 /out:"../../../bin/debug/plugins/KeepStatus.dll" /implib:"$(OUTDIR)\KeepStatus.lib" /pdbtype:sept /DelayLoad:wininet.dll
+LINK32_OBJS= \
+ "$(INTDIR)\action_keepstatus.obj" \
+ "$(INTDIR)\commonstatus.obj" \
+ "$(INTDIR)\confirmdialog.obj" \
+ "$(INTDIR)\gen_helpers.obj" \
+ "$(INTDIR)\keepstatus.obj" \
+ "$(INTDIR)\main.obj" \
+ "$(INTDIR)\options.obj" \
+ "$(INTDIR)\trigger_keepstatus.obj" \
+ "$(INTDIR)\vc6.res"
+
+"..\..\..\bin\debug\plugins\KeepStatus.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug Unicode"
+
+OUTDIR=.\Debug_Unicode
+INTDIR=.\Debug_Unicode
+# Begin Custom Macros
+OutDir=.\Debug_Unicode
+# End Custom Macros
+
+ALL : "..\..\..\bin\Debug Unicode\plugins\KeepStatus.dll" "$(OUTDIR)\KeepStatus.bsc"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\action_keepstatus.obj"
+ -@erase "$(INTDIR)\action_keepstatus.sbr"
+ -@erase "$(INTDIR)\commonstatus.obj"
+ -@erase "$(INTDIR)\commonstatus.sbr"
+ -@erase "$(INTDIR)\confirmdialog.obj"
+ -@erase "$(INTDIR)\confirmdialog.sbr"
+ -@erase "$(INTDIR)\gen_helpers.obj"
+ -@erase "$(INTDIR)\gen_helpers.sbr"
+ -@erase "$(INTDIR)\keepstatus.obj"
+ -@erase "$(INTDIR)\KeepStatus.pch"
+ -@erase "$(INTDIR)\keepstatus.sbr"
+ -@erase "$(INTDIR)\main.obj"
+ -@erase "$(INTDIR)\main.sbr"
+ -@erase "$(INTDIR)\options.obj"
+ -@erase "$(INTDIR)\options.sbr"
+ -@erase "$(INTDIR)\trigger_keepstatus.obj"
+ -@erase "$(INTDIR)\trigger_keepstatus.sbr"
+ -@erase "$(INTDIR)\vc6.res"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\KeepStatus.bsc"
+ -@erase "$(OUTDIR)\KeepStatus.exp"
+ -@erase "$(OUTDIR)\KeepStatus.pdb"
+ -@erase "..\..\..\bin\Debug Unicode\plugins\KeepStatus.dll"
+ -@erase "..\..\..\bin\Debug Unicode\plugins\KeepStatus.ilk"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\KeepStatus.pch" /Yu"../commonstatus.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\vc6.res" /d "_DEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\KeepStatus.bsc"
+BSC32_SBRS= \
+ "$(INTDIR)\action_keepstatus.sbr" \
+ "$(INTDIR)\commonstatus.sbr" \
+ "$(INTDIR)\confirmdialog.sbr" \
+ "$(INTDIR)\gen_helpers.sbr" \
+ "$(INTDIR)\keepstatus.sbr" \
+ "$(INTDIR)\main.sbr" \
+ "$(INTDIR)\options.sbr" \
+ "$(INTDIR)\trigger_keepstatus.sbr"
+
+"$(OUTDIR)\KeepStatus.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
+ $(BSC32) @<<
+ $(BSC32_FLAGS) $(BSC32_SBRS)
+<<
+
+LINK32=link.exe
+LINK32_FLAGS=comctl32.lib wininet.lib Delayimp.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\KeepStatus.pdb" /debug /machine:I386 /out:"../../../bin/Debug Unicode/plugins/KeepStatus.dll" /implib:"$(OUTDIR)\KeepStatus.lib" /pdbtype:sept /DelayLoad:wininet.dll
+LINK32_OBJS= \
+ "$(INTDIR)\action_keepstatus.obj" \
+ "$(INTDIR)\commonstatus.obj" \
+ "$(INTDIR)\confirmdialog.obj" \
+ "$(INTDIR)\gen_helpers.obj" \
+ "$(INTDIR)\keepstatus.obj" \
+ "$(INTDIR)\main.obj" \
+ "$(INTDIR)\options.obj" \
+ "$(INTDIR)\trigger_keepstatus.obj" \
+ "$(INTDIR)\vc6.res"
+
+"..\..\..\bin\Debug Unicode\plugins\KeepStatus.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Release Unicode"
+
+OUTDIR=.\Release_Unicode
+INTDIR=.\Release_Unicode
+
+ALL : "..\..\..\bin\Release Unicode\plugins\KeepStatus.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\action_keepstatus.obj"
+ -@erase "$(INTDIR)\commonstatus.obj"
+ -@erase "$(INTDIR)\confirmdialog.obj"
+ -@erase "$(INTDIR)\gen_helpers.obj"
+ -@erase "$(INTDIR)\keepstatus.obj"
+ -@erase "$(INTDIR)\KeepStatus.pch"
+ -@erase "$(INTDIR)\main.obj"
+ -@erase "$(INTDIR)\options.obj"
+ -@erase "$(INTDIR)\trigger_keepstatus.obj"
+ -@erase "$(INTDIR)\vc6.res"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\KeepStatus.exp"
+ -@erase "$(OUTDIR)\KeepStatus.pdb"
+ -@erase "..\..\..\bin\Release Unicode\plugins\KeepStatus.dll"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /Fp"$(INTDIR)\KeepStatus.pch" /Yu"../commonstatus.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\vc6.res" /d "NDEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\KeepStatus.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib wininet.lib Delayimp.lib ws2_32.lib /nologo /base:"0x11cd0000" /dll /incremental:no /pdb:"$(OUTDIR)\KeepStatus.pdb" /debug /machine:I386 /nodefaultlib /out:"../../../bin/Release Unicode/plugins/KeepStatus.dll" /implib:"$(OUTDIR)\KeepStatus.lib" /delayload:wininet.dll
+LINK32_OBJS= \
+ "$(INTDIR)\action_keepstatus.obj" \
+ "$(INTDIR)\commonstatus.obj" \
+ "$(INTDIR)\confirmdialog.obj" \
+ "$(INTDIR)\gen_helpers.obj" \
+ "$(INTDIR)\keepstatus.obj" \
+ "$(INTDIR)\main.obj" \
+ "$(INTDIR)\options.obj" \
+ "$(INTDIR)\trigger_keepstatus.obj" \
+ "$(INTDIR)\vc6.res"
+
+"..\..\..\bin\Release Unicode\plugins\KeepStatus.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("KeepStatus.dep")
+!INCLUDE "KeepStatus.dep"
+!ELSE
+!MESSAGE Warning: cannot find "KeepStatus.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "KeepStatus - Win32 Release" || "$(CFG)" == "KeepStatus - Win32 Debug" || "$(CFG)" == "KeepStatus - Win32 Debug Unicode" || "$(CFG)" == "KeepStatus - Win32 Release Unicode"
+SOURCE=.\action_keepstatus.cpp
+
+!IF "$(CFG)" == "KeepStatus - Win32 Release"
+
+CPP_SWITCHES=/nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "KEEPSTATUS_EXPORTS" /Fp"$(INTDIR)\KeepStatus.pch" /Yu"../commonstatus.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\action_keepstatus.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug"
+
+CPP_SWITCHES=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "KEEPSTATUS_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\KeepStatus.pch" /Yu"../commonstatus.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\action_keepstatus.obj" "$(INTDIR)\action_keepstatus.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug Unicode"
+
+CPP_SWITCHES=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\KeepStatus.pch" /Yu"../commonstatus.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\action_keepstatus.obj" "$(INTDIR)\action_keepstatus.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Release Unicode"
+
+CPP_SWITCHES=/nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /Fp"$(INTDIR)\KeepStatus.pch" /Yu"../commonstatus.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\action_keepstatus.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=..\commonstatus.cpp
+
+!IF "$(CFG)" == "KeepStatus - Win32 Release"
+
+CPP_SWITCHES=/nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "KEEPSTATUS_EXPORTS" /Fp"$(INTDIR)\KeepStatus.pch" /Yu"commonstatus.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\commonstatus.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug"
+
+CPP_SWITCHES=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "KEEPSTATUS_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\KeepStatus.pch" /Yu"commonstatus.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\commonstatus.obj" "$(INTDIR)\commonstatus.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug Unicode"
+
+CPP_SWITCHES=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\KeepStatus.pch" /Yu"commonstatus.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\commonstatus.obj" "$(INTDIR)\commonstatus.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Release Unicode"
+
+CPP_SWITCHES=/nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /Fp"$(INTDIR)\KeepStatus.pch" /Yu"commonstatus.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\commonstatus.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=..\confirmdialog.cpp
+
+!IF "$(CFG)" == "KeepStatus - Win32 Release"
+
+CPP_SWITCHES=/nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "KEEPSTATUS_EXPORTS" /Fp"$(INTDIR)\KeepStatus.pch" /Yu"commonstatus.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\confirmdialog.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug"
+
+CPP_SWITCHES=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "KEEPSTATUS_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\KeepStatus.pch" /Yu"commonstatus.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\confirmdialog.obj" "$(INTDIR)\confirmdialog.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug Unicode"
+
+CPP_SWITCHES=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\KeepStatus.pch" /Yu"commonstatus.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\confirmdialog.obj" "$(INTDIR)\confirmdialog.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Release Unicode"
+
+CPP_SWITCHES=/nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /Fp"$(INTDIR)\KeepStatus.pch" /Yu"commonstatus.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\confirmdialog.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=..\..\helpers\gen_helpers.cpp
+
+!IF "$(CFG)" == "KeepStatus - Win32 Release"
+
+CPP_SWITCHES=/nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "KEEPSTATUS_EXPORTS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\gen_helpers.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug"
+
+CPP_SWITCHES=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "KEEPSTATUS_EXPORTS" /FR"$(INTDIR)\\" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\gen_helpers.obj" "$(INTDIR)\gen_helpers.sbr" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug Unicode"
+
+CPP_SWITCHES=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /FR"$(INTDIR)\\" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\gen_helpers.obj" "$(INTDIR)\gen_helpers.sbr" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Release Unicode"
+
+CPP_SWITCHES=/nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\gen_helpers.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=.\keepstatus.cpp
+
+!IF "$(CFG)" == "KeepStatus - Win32 Release"
+
+
+"$(INTDIR)\keepstatus.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug"
+
+
+"$(INTDIR)\keepstatus.obj" "$(INTDIR)\keepstatus.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug Unicode"
+
+
+"$(INTDIR)\keepstatus.obj" "$(INTDIR)\keepstatus.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Release Unicode"
+
+
+"$(INTDIR)\keepstatus.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+
+
+!ENDIF
+
+SOURCE=.\main.cpp
+
+!IF "$(CFG)" == "KeepStatus - Win32 Release"
+
+CPP_SWITCHES=/nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "KEEPSTATUS_EXPORTS" /Fp"$(INTDIR)\KeepStatus.pch" /Yc"../commonstatus.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\main.obj" "$(INTDIR)\KeepStatus.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug"
+
+CPP_SWITCHES=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "KEEPSTATUS_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\KeepStatus.pch" /Yc"../commonstatus.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\main.obj" "$(INTDIR)\main.sbr" "$(INTDIR)\KeepStatus.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug Unicode"
+
+CPP_SWITCHES=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\KeepStatus.pch" /Yc"../commonstatus.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\main.obj" "$(INTDIR)\main.sbr" "$(INTDIR)\KeepStatus.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Release Unicode"
+
+CPP_SWITCHES=/nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /Fp"$(INTDIR)\KeepStatus.pch" /Yc"../commonstatus.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\main.obj" "$(INTDIR)\KeepStatus.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=.\options.cpp
+
+!IF "$(CFG)" == "KeepStatus - Win32 Release"
+
+
+"$(INTDIR)\options.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug"
+
+
+"$(INTDIR)\options.obj" "$(INTDIR)\options.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug Unicode"
+
+
+"$(INTDIR)\options.obj" "$(INTDIR)\options.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Release Unicode"
+
+
+"$(INTDIR)\options.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+
+
+!ENDIF
+
+SOURCE=.\trigger_keepstatus.cpp
+
+!IF "$(CFG)" == "KeepStatus - Win32 Release"
+
+
+"$(INTDIR)\trigger_keepstatus.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug"
+
+
+"$(INTDIR)\trigger_keepstatus.obj" "$(INTDIR)\trigger_keepstatus.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Debug Unicode"
+
+
+"$(INTDIR)\trigger_keepstatus.obj" "$(INTDIR)\trigger_keepstatus.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+
+
+!ELSEIF "$(CFG)" == "KeepStatus - Win32 Release Unicode"
+
+
+"$(INTDIR)\trigger_keepstatus.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\KeepStatus.pch"
+
+
+!ENDIF
+
+SOURCE=.\vc6.rc
+
+"$(INTDIR)\vc6.res" : $(SOURCE) "$(INTDIR)"
+ $(RSC) $(RSC_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/plugins/StatusPlugins/KeepStatus/KeepStatus.txt b/plugins/StatusPlugins/KeepStatus/KeepStatus.txt
new file mode 100644
index 0000000000..55b3992487
--- /dev/null
+++ b/plugins/StatusPlugins/KeepStatus/KeepStatus.txt
@@ -0,0 +1,145 @@
+KeepStatus plugin for Miranda IM v0.0.2.x
+unregistered@users.sourceforge.net
+
+--- About ---
+
+KeepStatus, a connection checker, for use with (or without)
+StartupStatus and/or AdvancedAutoAway.
+
+--- Usage ---
+
+There are two tabs in the options screen, one with basic options, and
+one with advanced options.
+
+The Basic Tab:
+
+[] Show popups, this will make use of the popup plugin to notify you
+in case of a connection loss or reconnect attempt.
+
+[] Check connection, with this option you can enable or disable the
+plugin.
+
+[count] Max. retries, in case connection is lost, this number of
+reconnect attempts will be made to restore the connection.
+
+[secs] Delay between retries, the number of seconds to wait before a
+new attempt is made.
+
+[] Don't reconnect if no internet connection seems available, if
+enabled, KS will not reconnect if Windows reports that no internet
+connection is available.
+
+[] Continuesly check for internet connection, if enables, KS will keep
+looking for a connection, either by asking Windows, or by pinging a
+host. You can specify multiple hosts by seperating them with
+spaces. If one host replies, a connection is assumed to be available.
+
+Note: All dial-up options are experimental. I cannot test these
+myself. Please let me know if you encounter problems with it (and you
+are willing to run some tests ;) )
+
+The Advanced Tab:
+
+[] Increase delay exponential, if enabled, the delay is multiplied by
+2 after each check. So checks are made at t=10, t=20, t=40, t=40,
+t=40, etc. if "Max. delay" = 40, "Initial delay" = 10, and connection
+was lost at t=0.
+
+[secs] Max. delay, the maximum delay allowed in case "increase delay
+exponential" is enabled.
+
+[secs] Max. protocol connecting time, -experimental-, this is the
+maximum number of seconds a protocol is allowed to be in the
+"connecting state" during a reconnect attempt. After this time, KS
+will force the protocol offline and make a new connection attempt.
+
+[] Ignore locked status of protocols, if enabled, KS will reconnect
+protocols in case of a global status change, even if they are locked
+by the clist (nicer/modern). You can enable this if protocols don't
+reconnect properly after a global status change using a clist that
+doesn't support locking.
+
+[] Set protocol offline before a connection attempt, this will force a
+protocol offline, before KS tries to restore its connection.
+
+[] Cancel all if a protocol connects from another location, this will
+not reconnect any of the protocols if one of them is connected from
+another location. The reason for this option is because not all
+protocols can detect a second login.
+
+[] Reconnect on APM resume, will reconnect you when you come back from
+standby or hibernation. If it for some reason fails, please try
+another clist.
+
+[] React on login errors, influences the way KS deals with login
+errors (default is to keep retrying). A login error can be "wrong
+password" or "server busy" for example.
+
+() Stop trying to reconnect, cancels reconnecting for the protocol.
+
+() Set delay to [secs], this will (possibly) increase the delay before
+a new attempt is made to restore the connection.
+
+Consider connection lost after [count] failed pings, tells KS how many
+ping attempts must fail before the connection should be considered
+"lost" and need to be restored.
+
+[secs] Continuously check interval, the delay between two pings.
+
+--- Notes ---
+
+All options regarding dial-up connections are experimental.
+
+--- Changelog ---
+
+0.0.2.92: - fixes for Miranda 0.8 (added MUID)
+ - some minor fixes.
+
+0.0.2.85: - Different handling of timers
+ - Partitial locked status support (full support requires changes in core)
+ - Fix 'random' crash
+
+0.0.2.74: - A few more fixes
+
+0.0.2.73: - Fix when setting no status message
+
+0.0.2.72: - Fix options dialog glitch
+
+0.0.2.71: - Several bug fixes
+ - Added options for continuously checking
+ - Support for "protocol locking" by clist
+ - Better NAS support (requires NAS v0.3.7.2 (build 2338; April 30, 2006))
+ - Added more convenient service for developers MS_KS_ANNOUNCESTATUSCHANGE
+ - Popups stay until next retry if delay is set to 0
+ - Added option "Max. connecting time", see documentation
+ - Added option to set protocol offline before reconnecting
+ - Set global status when possible
+ - Ping using ICMP instead of using InternetCheckConnection.
+
+0.0.2.4: - popups now show the icon of the first protocol that is about to be reconnected
+ - added popup option to show additional info in popup
+
+0.0.2.3: - you can now change the delay when a login error occurs
+
+0.0.2.2: - many bugfixes (with great help of weinstock and ghazan)
+ - added option to check internet connection by pinging
+ - added more options for popups
+ - added option to reconnect on APM resume (standby, hibernate)
+
+0.0.1.0: - doesn't reconnect when logged in from another location
+ - Added: option reconnect on login failures
+
+0.0.0.4: - fixed: now also works with popups disabled. (thanks to Stefan Waldmann)
+
+0.0.0.3: - Added support for PluginUninstaller
+ - bug fixes
+
+0.0.0.2: - Several bug fixes
+ - Better menu handling
+ - Fixed: Jabber/Tlen support (not in combination with (current) awaysys!)
+
+0.0.0.1: - First release without StartupStatus
+
+--- Disclaimer ---
+
+If something terrible happens, don't blame me. \ No newline at end of file
diff --git a/plugins/StatusPlugins/KeepStatus/KeepStatus.vcproj b/plugins/StatusPlugins/KeepStatus/KeepStatus.vcproj
new file mode 100644
index 0000000000..77b3d00a76
--- /dev/null
+++ b/plugins/StatusPlugins/KeepStatus/KeepStatus.vcproj
@@ -0,0 +1,514 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="KeepStatus"
+ ProjectGUID="{D548A54E-310B-4A86-A545-64BDD5748745}"
+ SccProjectName=""
+ SccLocalPath="">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="1"
+ FavorSizeOrSpeed="2"
+ OmitFramePointers="FALSE"
+ AdditionalIncludeDirectories="../../../include;../includes;"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;KEEPSTATUS_EXPORTS"
+ StringPooling="TRUE"
+ ExceptionHandling="FALSE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="3"
+ PrecompiledHeaderThrough="commonstatus.h"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="vc7to6.lib comctl32.lib wsock32.lib wininet.lib"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="../../../lib"
+ IgnoreAllDefaultLibraries="TRUE"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="TRUE"
+ GenerateMapFile="TRUE"
+ MapFileName="$(OutDir)/$(ProjectName).map"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ BaseAddress="0x11cd0000"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/KeepStatus.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include;../includes;"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;KEEPSTATUS_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ UsePrecompiledHeader="3"
+ PrecompiledHeaderThrough="commonstatus.h"
+ BrowseInformation="1"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="comctl32.lib wsock32.lib wininet.lib"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="TRUE"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/KeepStatus.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include;../includes;"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;KEEPSTATUS_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ UsePrecompiledHeader="3"
+ PrecompiledHeaderThrough="commonstatus.h"
+ BrowseInformation="1"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="comctl32.lib wsock32.lib wininet.lib"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="TRUE"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/KeepStatus.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="1"
+ WholeProgramOptimization="FALSE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ GlobalOptimizations="TRUE"
+ FavorSizeOrSpeed="2"
+ OmitFramePointers="FALSE"
+ OptimizeForProcessor="0"
+ AdditionalIncludeDirectories="../../../include;../includes;"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;KEEPSTATUS_EXPORTS"
+ StringPooling="TRUE"
+ ExceptionHandling="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="TRUE"
+ UsePrecompiledHeader="3"
+ PrecompiledHeaderThrough="commonstatus.h"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="vc7to6.lib comctl32.lib wsock32.lib wininet.lib"
+ AdditionalLibraryDirectories="../../../lib"
+ IgnoreAllDefaultLibraries="TRUE"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="TRUE"
+ GenerateMapFile="TRUE"
+ MapFileName="$(OutDir)/$(ProjectName).map"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ BaseAddress="0x11cd0000"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/KeepStatus.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+ <File
+ RelativePath=".\action_keepstatus.cpp">
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\commonstatus.cpp">
+ </File>
+ <File
+ RelativePath="..\confirmdialog.cpp">
+ </File>
+ <File
+ RelativePath="..\..\helpers\gen_helpers.cpp">
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="keepstatus.cpp">
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ PrecompiledHeaderThrough="../commonstatus.h"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ PrecompiledHeaderThrough="../commonstatus.h"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\main.cpp">
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="../commonstatus.h"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="../commonstatus.h"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="../commonstatus.h"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="../commonstatus.h"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="options.cpp">
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ PrecompiledHeaderThrough="../commonstatus.h"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ PrecompiledHeaderThrough="../commonstatus.h"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\trigger_keepstatus.cpp">
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl">
+ <File
+ RelativePath=".\buildnumber.h">
+ </File>
+ <File
+ RelativePath="..\commonstatus.h">
+ </File>
+ <File
+ RelativePath="keepstatus.h">
+ </File>
+ <File
+ RelativePath="..\m_statusplugins.h">
+ </File>
+ <File
+ RelativePath="..\resource.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+ <File
+ RelativePath="..\resource.rc">
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/plugins/StatusPlugins/KeepStatus/KeepStatus_10.vcxproj b/plugins/StatusPlugins/KeepStatus/KeepStatus_10.vcxproj
new file mode 100644
index 0000000000..c94342c8a3
--- /dev/null
+++ b/plugins/StatusPlugins/KeepStatus/KeepStatus_10.vcxproj
@@ -0,0 +1,467 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug Unicode|Win32">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug Unicode|x64">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|Win32">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|x64">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>KeepStatus</ProjectName>
+ <ProjectGuid>{D548A54E-310B-4A86-A545-64BDD5748745}</ProjectGuid>
+ <RootNamespace>KeepStatus</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</IgnoreImportLibrary>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</IgnoreImportLibrary>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">true</IgnoreImportLibrary>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">true</IgnoreImportLibrary>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(SolutionDir)$(Configuration)64/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\</IntDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Release/KeepStatus.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <AdditionalIncludeDirectories>../../../include;../includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;KEEPSTATUS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>commonstatus.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>comctl32.lib;wsock32.lib;wininet.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DelayLoadDLLs>wininet.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)$(ProjectName).map</MapFileName>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+ <BaseAddress>0x11cd0000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Debug/KeepStatus.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;../includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;KEEPSTATUS_EXPORTS</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>commonstatus.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>comctl32.lib;wsock32.lib;wininet.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DelayLoadDLLs>wininet.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Debug/KeepStatus.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;../includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;KEEPSTATUS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>commonstatus.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>comctl32.lib;wsock32.lib;wininet.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DelayLoadDLLs>wininet.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Release/KeepStatus.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <AdditionalIncludeDirectories>../../../include;../includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>false</ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>commonstatus.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;4100;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>comctl32.lib;wsock32.lib;wininet.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <DelayLoadDLLs>wininet.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+ <BaseAddress>0x11cd0000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <ExceptionHandling>false</ExceptionHandling>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <AdditionalIncludeDirectories>../../../include;../includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <StringPooling>true</StringPooling>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>commonstatus.h</PrecompiledHeaderFile>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ </ClCompile>
+ <Link>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ <Link>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <AdditionalDependencies>comctl32.lib;wsock32.lib;wininet.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <DelayLoadDLLs>wininet.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>../../../include;../includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>commonstatus.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>comctl32.lib;wsock32.lib;wininet.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <DelayLoadDLLs>wininet.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>../../../include;../includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>commonstatus.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>comctl32.lib;wsock32.lib;wininet.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <DelayLoadDLLs>wininet.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>../../../include;../includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <ExceptionHandling>false</ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <StringPooling>true</StringPooling>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <Optimization>Full</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>commonstatus.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>comctl32.lib;wsock32.lib;wininet.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <DelayLoadDLLs>wininet.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="action_keepstatus.cpp">
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">../commonstatus.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ClCompile Include="..\commonstatus.cpp" />
+ <ClCompile Include="..\confirmdialog.cpp" />
+ <ClCompile Include="..\..\helpers\gen_helpers.cpp">
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
+ </ClCompile>
+ <ClCompile Include="keepstatus.cpp">
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">../commonstatus.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ClCompile Include="main.cpp">
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">../commonstatus.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ClCompile Include="options.cpp">
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">../commonstatus.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ClCompile Include="trigger_keepstatus.cpp">
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">../commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">../commonstatus.h</PrecompiledHeaderFile>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\commonstatus.h" />
+ <ClInclude Include="keepstatus.h" />
+ <ClInclude Include="..\m_statusplugins.h" />
+ <ClInclude Include="..\resource.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="..\resource.rc" />
+ <ResourceCompile Include="..\version.rc" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/plugins/StatusPlugins/KeepStatus/KeepStatus_10.vcxproj.filters b/plugins/StatusPlugins/KeepStatus/KeepStatus_10.vcxproj.filters
new file mode 100644
index 0000000000..5c1e406d7f
--- /dev/null
+++ b/plugins/StatusPlugins/KeepStatus/KeepStatus_10.vcxproj.filters
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{6fb49235-e0f0-4889-b5d7-c5f7a5b3a95f}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{be845fa0-70f3-4168-9620-2f231e2702af}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{3795d706-cfb9-43c3-a967-b0759da5b8af}</UniqueIdentifier>
+ <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="action_keepstatus.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\commonstatus.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\confirmdialog.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\helpers\gen_helpers.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="keepstatus.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="main.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="options.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="trigger_keepstatus.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\commonstatus.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="keepstatus.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\m_statusplugins.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\resource.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="..\resource.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ <ResourceCompile Include="..\version.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/plugins/StatusPlugins/KeepStatus/KeepStatus_8.vcproj b/plugins/StatusPlugins/KeepStatus/KeepStatus_8.vcproj
new file mode 100644
index 0000000000..ccfbe086b7
--- /dev/null
+++ b/plugins/StatusPlugins/KeepStatus/KeepStatus_8.vcproj
@@ -0,0 +1,810 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="KeepStatus"
+ ProjectGUID="{D548A54E-310B-4A86-A545-64BDD5748745}"
+ RootNamespace="KeepStatus"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/KeepStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ FavorSizeOrSpeed="2"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="../../../include;../includes;"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;KEEPSTATUS_EXPORTS"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="commonstatus.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="comctl32.lib wsock32.lib wininet.lib"
+ LinkIncremental="0"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/$(ProjectName).map"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ BaseAddress="0x11cd0000"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ 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|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/KeepStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include;../includes;"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;KEEPSTATUS_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="commonstatus.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="comctl32.lib wsock32.lib wininet.lib"
+ LinkIncremental="2"
+ SuppressStartupBanner="true"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ 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="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/KeepStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include;../includes;"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;KEEPSTATUS_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="commonstatus.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="comctl32.lib wsock32.lib wininet.lib"
+ LinkIncremental="2"
+ SuppressStartupBanner="true"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ 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="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/KeepStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ FavorSizeOrSpeed="2"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="../../../include;../includes;"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;KEEPSTATUS_EXPORTS"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="commonstatus.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="comctl32.lib wsock32.lib wininet.lib"
+ LinkIncremental="0"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/$(ProjectName).map"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ BaseAddress="0x11cd0000"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ 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;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath=".\action_keepstatus.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\commonstatus.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;KEEPSTATUS_EXPORTS;$(NoInherit)"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;KEEPSTATUS_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="1"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;KEEPSTATUS_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;KEEPSTATUS_EXPORTS;$(NoInherit)"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\confirmdialog.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;KEEPSTATUS_EXPORTS;$(NoInherit)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;KEEPSTATUS_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;KEEPSTATUS_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;KEEPSTATUS_EXPORTS;$(NoInherit)"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\helpers\gen_helpers.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="keepstatus.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;KEEPSTATUS_EXPORTS;$(NoInherit)"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;KEEPSTATUS_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;KEEPSTATUS_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;KEEPSTATUS_EXPORTS;$(NoInherit)"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\main.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="options.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\trigger_keepstatus.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl"
+ >
+ <File
+ RelativePath="..\commonstatus.h"
+ >
+ </File>
+ <File
+ RelativePath="keepstatus.h"
+ >
+ </File>
+ <File
+ RelativePath="..\m_statusplugins.h"
+ >
+ </File>
+ <File
+ RelativePath="..\resource.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ <File
+ RelativePath="..\resource.rc"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories="\Test\Miranda\miranda\plugins\KeepStatus"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories="\Test\Miranda\miranda\plugins\KeepStatus"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories="\Test\Miranda\miranda\plugins\KeepStatus"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories="\Test\Miranda\miranda\plugins\KeepStatus"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/plugins/StatusPlugins/KeepStatus/KeepStatus_9.vcproj b/plugins/StatusPlugins/KeepStatus/KeepStatus_9.vcproj
new file mode 100644
index 0000000000..262f466d06
--- /dev/null
+++ b/plugins/StatusPlugins/KeepStatus/KeepStatus_9.vcproj
@@ -0,0 +1,1293 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="KeepStatus"
+ ProjectGUID="{D548A54E-310B-4A86-A545-64BDD5748745}"
+ RootNamespace="KeepStatus"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/KeepStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="2"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="../../../include;../includes;"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;KEEPSTATUS_EXPORTS"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ FloatingPointModel="2"
+ RuntimeTypeInfo="false"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="commonstatus.h"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="comctl32.lib wsock32.lib wininet.lib"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/$(ProjectName).map"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ LinkTimeCodeGeneration="1"
+ BaseAddress="0x11cd0000"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)64/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)64/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\Release/KeepStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="2"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="../../../include;../includes;"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;KEEPSTATUS_EXPORTS"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ FloatingPointModel="2"
+ RuntimeTypeInfo="false"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="commonstatus.h"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="comctl32.lib wsock32.lib wininet.lib"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/$(ProjectName).map"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ LinkTimeCodeGeneration="1"
+ BaseAddress="0x11cd0000"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/KeepStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include;../includes;"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;KEEPSTATUS_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="commonstatus.h"
+ WarningLevel="3"
+ DebugInformationFormat="4"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="comctl32.lib wsock32.lib wininet.lib"
+ SuppressStartupBanner="true"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)64/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)64/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\Debug/KeepStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include;../includes;"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="commonstatus.h"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="comctl32.lib wsock32.lib wininet.lib"
+ SuppressStartupBanner="true"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/KeepStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include;../includes;"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;KEEPSTATUS_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="commonstatus.h"
+ WarningLevel="3"
+ DebugInformationFormat="4"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="comctl32.lib wsock32.lib wininet.lib"
+ SuppressStartupBanner="true"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode|x64"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)64/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)64/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\Debug/KeepStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include;../includes;"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;KEEPSTATUS_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="commonstatus.h"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="comctl32.lib wsock32.lib wininet.lib"
+ SuppressStartupBanner="true"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/KeepStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="2"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="../../../include;../includes;"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ FloatingPointModel="2"
+ RuntimeTypeInfo="false"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="commonstatus.h"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4996;4100"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="comctl32.lib wsock32.lib wininet.lib"
+ GenerateManifest="false"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ LinkTimeCodeGeneration="1"
+ BaseAddress="0x11cd0000"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|x64"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)64/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)64/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\Release/KeepStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="2"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="../../../include;../includes;"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;KEEPSTATUS_EXPORTS"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ FloatingPointModel="2"
+ RuntimeTypeInfo="false"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="commonstatus.h"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4996;4100"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="comctl32.lib wsock32.lib wininet.lib"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ LinkTimeCodeGeneration="1"
+ BaseAddress="0x11cd0000"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath=".\action_keepstatus.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\commonstatus.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\confirmdialog.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\helpers\gen_helpers.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="keepstatus.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\main.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="options.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\trigger_keepstatus.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl"
+ >
+ <File
+ RelativePath="..\commonstatus.h"
+ >
+ </File>
+ <File
+ RelativePath="keepstatus.h"
+ >
+ </File>
+ <File
+ RelativePath="..\m_statusplugins.h"
+ >
+ </File>
+ <File
+ RelativePath="..\resource.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ <File
+ RelativePath="..\resource.rc"
+ >
+ </File>
+ <File
+ RelativePath="..\version.rc"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/plugins/StatusPlugins/KeepStatus/action_keepstatus.cpp b/plugins/StatusPlugins/KeepStatus/action_keepstatus.cpp
new file mode 100644
index 0000000000..ac5368dff9
--- /dev/null
+++ b/plugins/StatusPlugins/KeepStatus/action_keepstatus.cpp
@@ -0,0 +1,185 @@
+#include "../commonstatus.h"
+#include "keepstatus.h"
+#include "../resource.h"
+#include "../../NewTriggerPlugin/m_trigger.h"
+#include "../../helpers/db_helpers.h"
+
+extern HINSTANCE hInst;
+
+#define STR_PROTOFROMTRIGGER "PROTO_FT"
+#define SETTING_PROTO_ENABLED "proto_Enabled"
+
+static BOOL ProtocolEnabled(DWORD id, char *szPrefix, REPORTINFO *ri, char *szProto)
+{
+ char dbSetting[128];
+ _snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s_%s", szPrefix, id, szProto, SETTING_PROTO_ENABLED);
+ if (db_getb(dbSetting, 0))
+ return TRUE;
+
+ if ( ri != NULL && ri->td != NULL && (ri->td->dFlags & DF_PROTO) && !strcmp(szProto, ri->td->szProto)) {
+ _snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s_%s", szPrefix, id, STR_PROTOFROMTRIGGER, SETTING_PROTO_ENABLED);
+ return db_getb(dbSetting, 0);
+ }
+
+ return FALSE;
+}
+
+static void BuildProtoList(HWND hList, BOOL bFromTrigger, char* szPrefix, DWORD id)
+{
+ ListView_SetExtendedListViewStyleEx(hList, LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES, LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES);
+
+ LVCOLUMN lvCol = { 0 };
+ lvCol.mask = LVCF_TEXT;
+ lvCol.pszText = TranslateT("Protocol");
+ ListView_InsertColumn(hList, 0, &lvCol);
+
+ LVITEM lvItem = { 0 };
+ lvItem.mask = LVIF_TEXT|LVIF_PARAM;
+ lvItem.iItem = 0;
+ lvItem.iSubItem = 0;
+
+ int count;
+ PROTOACCOUNT** protos;
+ ProtoEnumAccounts( &count, &protos );
+
+ char dbSetting[128];
+
+ for( int i=0; i < count; i++ ) {
+ if ( !IsSuitableProto( protos[i] ))
+ continue;
+
+ lvItem.pszText = Hlp_GetProtocolName( protos[i]->szModuleName );
+ lvItem.lParam = (LPARAM)protos[i]->szModuleName;
+ ListView_InsertItem(hList, &lvItem);
+
+ _snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s_%s", szPrefix, id, protos[i]->szModuleName, SETTING_PROTO_ENABLED);
+ ListView_SetCheckState(hList, lvItem.iItem, db_getb(dbSetting, 0));
+ ListView_SetItem(hList, &lvItem);
+ lvItem.iItem++;
+ if (lvItem.pszText != NULL)
+ free(lvItem.pszText);
+ }
+ if (bFromTrigger) {
+ lvItem.pszText = TranslateT("<from trigger>");
+ ListView_InsertItem(hList, &lvItem);
+ lvItem.lParam = (LPARAM)STR_PROTOFROMTRIGGER;
+ _snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s_%s", szPrefix, id, STR_PROTOFROMTRIGGER, SETTING_PROTO_ENABLED);
+ ListView_SetCheckState(hList, lvItem.iItem, db_getb(dbSetting, 0));
+ ListView_SetItem(hList, &lvItem);
+ lvItem.iItem++;
+ }
+ ListView_SetColumnWidth(hList, 0, LVSCW_AUTOSIZE);
+}
+
+static void SaveProtoList(HWND hList, char *szPrefix, DWORD id)
+{
+ LVITEM lvItem = { 0 };
+ lvItem.mask = LVIF_PARAM;
+ lvItem.iSubItem=0;
+ for ( int i=0; i < ListView_GetItemCount(hList); i++ ) {
+ lvItem.iItem=i;
+ if (ListView_GetItem(hList, &lvItem) == FALSE)
+ continue;
+
+ char dbSetting[128];
+ _snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s_%s", szPrefix, id, (const char*)lvItem.lParam, SETTING_PROTO_ENABLED);
+ if (ListView_GetCheckState(hList, lvItem.iItem))
+ db_setb(dbSetting, TRUE);
+ else {
+ log_debugA("deleting: %s", dbSetting);
+ db_del(dbSetting);
+ }
+ }
+}
+
+static INT_PTR CALLBACK DlgProcOptsActionKeepStatus(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) {
+
+ switch (msg) {
+ case WM_INITDIALOG: {
+ DWORD actionID;
+ TRIGGERINFO ti;
+
+ TranslateDialogDefault(hwndDlg);
+ actionID = (DWORD)lParam;
+ ZeroMemory(&ti, sizeof(TRIGGERINFO));
+ ti.cbSize = sizeof(TRIGGERINFO);
+ SendMessage(GetParent(hwndDlg), TM_GETTRIGGERINFO, 0, (LPARAM)&ti);
+ BuildProtoList(GetDlgItem(hwndDlg, IDC_PROTOLIST), ti.dFlags&DF_PROTO?TRUE:FALSE, PREFIX_ACTIONID, actionID);
+ CheckRadioButton(hwndDlg, IDC_ENABLECHECKING, IDC_DISABLECHECKING, DBGetActionSettingByte(actionID, NULL, MODULENAME, SETTING_ENABLECHECKING, FALSE)?IDC_ENABLECHECKING:IDC_DISABLECHECKING);
+ break;
+ }
+
+ case TM_ADDACTION: { // save the settings
+ DWORD actionID;
+
+ actionID = (DWORD)wParam;
+ DBWriteActionSettingByte(actionID, NULL, MODULENAME, SETTING_ENABLECHECKING, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_ENABLECHECKING));
+ SaveProtoList(GetDlgItem(hwndDlg, IDC_PROTOLIST), PREFIX_ACTIONID, actionID);
+ break;
+ }
+
+ case WM_COMMAND:
+ switch(LOWORD(wParam)) {
+ case IDC_ENABLECHECKING:
+ case IDC_DISABLECHECKING:
+ CheckRadioButton(hwndDlg, IDC_ENABLECHECKING, IDC_DISABLECHECKING, LOWORD(wParam));
+ break;
+ }
+ break;
+ }
+
+ return FALSE;
+}
+
+static int TriggerChecking(DWORD actionID, REPORTINFO *ri)
+{
+ if (ri->flags & ACT_PERFORM) {
+ BOOL checking = DBGetActionSettingByte(actionID, NULL, MODULENAME, SETTING_ENABLECHECKING, FALSE);
+
+ int count;
+ PROTOACCOUNT** protos;
+ ProtoEnumAccounts( &count, &protos );
+
+ for( int i=0; i <count; i++ ) {
+ if ( !IsSuitableProto( protos[i] ))
+ continue;
+
+ if (!ProtocolEnabled(actionID, PREFIX_ACTIONID, ri, protos[i]->szModuleName))
+ continue;
+
+ CallService(MS_KS_ENABLEPROTOCOL, (WPARAM)checking, (LPARAM)protos[i]->szModuleName);
+ }
+ }
+ if (ri->flags & ACT_CLEANUP) {
+ REMOVETRIGGERSETTINGS ras;
+ ras.cbSize = sizeof(REMOVETRIGGERSETTINGS);
+ ras.prefix = PREFIX_ACTIONID;
+ ras.id = actionID;
+ ras.hContact = NULL;
+ ras.szModule = MODULENAME;
+ CallService(MS_TRIGGER_REMOVESETTINGS, 0, (LPARAM)&ras);
+ }
+
+ return 0;
+}
+
+int RegisterAction()
+{
+ if (!ServiceExists(MS_TRIGGER_REGISTERACTION))
+ return -1;
+
+ ACTIONREGISTER ai;
+ ai.cbSize = sizeof(ai);
+ ai.pszName = "KeepStatus: Enable/disable checking";
+ ai.hInstance = hInst;
+ ai.pfnDlgProc = DlgProcOptsActionKeepStatus;
+ ai.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_KS_ACTION);
+ ai.flags = ARF_FUNCTION;
+ ai.actionFunction = TriggerChecking;
+ return CallService(MS_TRIGGER_REGISTERACTION, 0, (LPARAM)&ai);
+}
+
+int DeInitAction() {
+
+ return 0;
+}
diff --git a/plugins/StatusPlugins/KeepStatus/keepstatus.cpp b/plugins/StatusPlugins/KeepStatus/keepstatus.cpp
new file mode 100644
index 0000000000..9aaaf39195
--- /dev/null
+++ b/plugins/StatusPlugins/KeepStatus/keepstatus.cpp
@@ -0,0 +1,1335 @@
+/*
+ KeepStatus Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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 "../commonstatus.h"
+#include "keepstatus.h"
+#include "../resource.h"
+
+struct TimerInfo {
+ int timer;
+ int timeout;
+ BOOL restart;
+ int result;
+ HANDLE hEvent;
+};
+
+static CRITICAL_SECTION GenTimerCS, GenStatusCS, CheckContinueslyCS;
+
+static HANDLE hOptionsHook = NULL;
+static HANDLE hShutdownHook = NULL;
+static HANDLE hAccChangeHook = NULL;
+static HANDLE hProtoAckHook = NULL;
+static HANDLE hStatusChangeHook = NULL;
+static HANDLE hCSStatusChangeHook = NULL;
+static HANDLE hCSStatusChangeExHook = NULL;
+
+extern HANDLE hConnectionEvent;
+extern PLUGININFOEX pluginInfoEx;
+
+static HWND hMessageWindow = NULL;
+
+// variables (general)
+static int CompareConnections( const TConnectionSettings* p1, const TConnectionSettings* p2 )
+{ return lstrcmpA( p1->szName, p2->szName );
+}
+
+static OBJLIST<TConnectionSettings> connectionSettings( 10, CompareConnections );
+
+static UINT_PTR checkConnectionTimerId = 0;
+static UINT_PTR afterCheckTimerId = 0;
+static UINT_PTR processAckTimerId = 0;
+static UINT_PTR checkContinTimerId = 0;
+static UINT_PTR checkConnectingTimerId = 0;
+static int retryCount = 0;
+static BOOL bLastPingResult = TRUE;
+static HMODULE hICMP = NULL;
+// variables (options)
+static int maxRetries = 0;
+static int initDelay = 0;
+static int currentDelay = 0;
+static int maxDelay = 0;
+static int ackDelay = 500;
+static int increaseExponential = 0;
+static int showConnectionPopups = 0;
+// prototypes
+static int StartTimer(int timer, int timeout, BOOL restart);
+static int StopTimer(int timer);
+int LoadMainOptions();
+static void GetCurrentConnectionSettings();
+static int AssignStatus(TConnectionSettings* connSetting, int status, int lastStatus, char *szMsg);
+static int ProcessProtoAck(WPARAM wParam,LPARAM lParam);
+static VOID CALLBACK CheckConnectingTimer(HWND hwnd,UINT message,UINT_PTR idEvent,DWORD dwTime);
+static VOID CALLBACK CheckAckStatusTimer(HWND hwnd,UINT message,UINT_PTR idEvent,DWORD dwTime);
+static int StatusChange(WPARAM wParam, LPARAM lParam);
+static int CSStatusChange(WPARAM wParam, LPARAM lParam);
+static int CSStatusChangeEx(WPARAM wParam, LPARAM lParam);
+static VOID CALLBACK StatusChangeTimer(HWND hwnd,UINT message,UINT_PTR idEvent,DWORD dwTime);
+static VOID CALLBACK CheckConnectionTimer(HWND hwnd,UINT message, UINT_PTR idEvent,DWORD dwTime);
+static int StopChecking();
+static VOID CALLBACK AfterCheckTimer(HWND hwnd,UINT message, UINT_PTR idEvent,DWORD dwTime);
+static void ContinueslyCheckFunction(void *arg);
+static VOID CALLBACK CheckContinueslyTimer(HWND hwnd,UINT message, UINT_PTR idEvent,DWORD dwTime);
+INT_PTR IsProtocolEnabledService(WPARAM wParam, LPARAM lParam);
+
+static int ProcessPopup(int reason, LPARAM lParam);
+static int ShowPopup(char* msg, HICON hIcon);
+int CALLBACK PopupDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
+static DWORD CALLBACK MessageWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
+
+static int Exit(WPARAM wParam, LPARAM lParam);
+
+// options.c
+extern int OptionsInit(WPARAM wparam,LPARAM lparam);
+extern int InitCommonStatus();
+
+#define TRIGGERPLUGIN /* remove this to compile without it */
+
+#ifdef TRIGGERPLUGIN
+extern int RegisterAction();
+extern int DeInitAction();
+extern int RegisterTrigger();
+extern int DeInitTrigger();
+#endif
+
+TConnectionSettings::TConnectionSettings( PROTOACCOUNT* pa )
+{
+ cbSize = sizeof(PROTOCOLSETTINGEX);
+ szName = pa->szModuleName;
+ tszAccName = pa->tszAccountName;
+ szMsg = NULL;
+
+ int status = CallProtoService( pa->szModuleName, PS_GETSTATUS, 0, 0);
+ AssignStatus( this, status, status, NULL);
+}
+
+TConnectionSettings::~TConnectionSettings()
+{
+ if ( szMsg != NULL)
+ free( szMsg );
+}
+
+int LoadMainOptions()
+{
+ UnhookEvent(hProtoAckHook);
+ UnhookEvent(hStatusChangeHook);
+ UnhookEvent(hCSStatusChangeHook);
+ UnhookEvent(hCSStatusChangeExHook);
+ hProtoAckHook = hStatusChangeHook = hCSStatusChangeHook = hCSStatusChangeExHook = 0;
+
+ if (IsWindow(hMessageWindow))
+ DestroyWindow(hMessageWindow);
+ if (StartTimer(IDT_CHECKCONTIN, -1, FALSE)) {
+ FreeLibrary(hICMP);
+ WSACleanup();
+ }
+ StopTimer(IDT_CHECKCONN|IDT_PROCESSACK|IDT_AFTERCHECK|IDT_CHECKCONTIN|IDT_CHECKCONNECTING);
+
+ GetCurrentConnectionSettings();
+
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_CHECKCONNECTION, FALSE)) {
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_CONTCHECK, FALSE)) {
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_BYPING, FALSE)) {
+ WSADATA wsaData;
+
+ WSAStartup(MAKEWORD(2, 2), &wsaData);
+ hICMP = LoadLibraryA("ICMP.DLL");
+ if (hICMP == NULL) {
+ log_infoA("KeepStatus: icmp.dll not found, ping disabled");
+ }
+ }
+ StartTimer(IDT_CHECKCONTIN, 0, FALSE);
+ }
+ increaseExponential = DBGetContactSettingByte(NULL, MODULENAME, SETTING_INCREASEEXPONENTIAL, FALSE);
+ currentDelay = initDelay = 1000*DBGetContactSettingDword(NULL, MODULENAME, SETTING_INITDELAY, DEFAULT_INITDELAY);
+ maxDelay = 1000*DBGetContactSettingDword(NULL, MODULENAME, SETTING_MAXDELAY, DEFAULT_MAXDELAY);
+ maxRetries = DBGetContactSettingByte(NULL, MODULENAME, SETTING_MAXRETRIES,0);
+ if (maxRetries == 0)
+ maxRetries = -1;
+ hProtoAckHook = HookEvent(ME_PROTO_ACK, ProcessProtoAck);
+ hStatusChangeHook = HookEvent(ME_CLIST_STATUSMODECHANGE, StatusChange);
+ if (ServiceExists(ME_CS_STATUSCHANGE))
+ hCSStatusChangeHook = HookEvent(ME_CS_STATUSCHANGE, CSStatusChange);
+ hCSStatusChangeExHook = HookEvent(ME_CS_STATUSCHANGEEX, CSStatusChangeEx);
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_CHECKAPMRESUME, 0)&&(CallService(MS_SYSTEM_GETVERSION,0,0) >= 0x00040000)) {
+ if (!IsWindow(hMessageWindow)) {
+ hMessageWindow = CreateWindowEx(0, _T("STATIC"), NULL, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL);
+ SetWindowLongPtr(hMessageWindow, GWLP_WNDPROC, (LONG_PTR)MessageWndProc);
+ }
+ }
+ retryCount = 0;
+ }
+
+ return 0;
+}
+
+static void GetCurrentConnectionSettings()
+{
+ connectionSettings.destroy();
+
+ int count;
+ PROTOACCOUNT** protos;
+ ProtoEnumAccounts( &count, &protos );
+
+ for ( int i=0; i < count; i++ )
+ if ( IsSuitableProto( protos[i] ))
+ connectionSettings.insert( new TConnectionSettings( protos[i] ));
+}
+
+static PROTOCOLSETTINGEX** GetCurrentProtoSettingsCopy()
+{
+ PROTOCOLSETTINGEX** ps;
+ int i;
+
+ EnterCriticalSection(&GenStatusCS);
+ ps = ( PROTOCOLSETTINGEX** )malloc(connectionSettings.getCount()*sizeof(PROTOCOLSETTINGEX *));
+ if (ps == NULL) {
+ LeaveCriticalSection(&GenStatusCS);
+ return NULL;
+ }
+ for(i=0;i<connectionSettings.getCount();i++) {
+ ps[i] = ( PROTOCOLSETTINGEX* )calloc(1, sizeof(PROTOCOLSETTINGEX));
+ if (ps[i] == NULL) {
+ LeaveCriticalSection(&GenStatusCS);
+ return NULL;
+ }
+
+ TConnectionSettings& cs = connectionSettings[i];
+ ps[i]->cbSize = sizeof(PROTOCOLSETTINGEX);
+ ps[i]->lastStatus = cs.lastStatus;
+ ps[i]->status = cs.status;
+ ps[i]->szMsg = NULL;
+ ps[i]->szName = cs.szName;
+ ps[i]->tszAccName = cs.tszAccName;
+ if ( (ServiceExists(MS_NAS_GETSTATE)) && (CallProtoService(ps[i]->szName, PS_GETSTATUS, 0, 0) == ID_STATUS_OFFLINE) && (ps[i]->status != ID_STATUS_OFFLINE) ) {
+ NAS_PROTOINFO npi;
+
+ ZeroMemory(&npi, sizeof(NAS_PROTOINFO));
+ npi.cbSize = sizeof(NAS_PROTOINFO);
+ npi.status = 0;
+ npi.szProto = ps[i]->szName;
+ if (!CallService(MS_NAS_GETSTATEA, (WPARAM)&npi, (LPARAM)1)) {
+ if (npi.szMsg != NULL) {
+ ps[i]->szMsg = _strdup(npi.szMsg);
+ log_infoA("KeepStatus: Status message for %s retrieved from NAS", ps[i]->szName);
+ }
+ else {
+ npi.status = 0;
+ npi.szProto = NULL;
+ if (!CallService(MS_NAS_GETSTATEA, (WPARAM)&npi, (LPARAM)1)) {
+ if (npi.szMsg != NULL) {
+ ps[i]->szMsg = _strdup(npi.szMsg);
+ log_infoA("KeepStatus: Status message for %s retrieved from NAS (global)", ps[i]->szName);
+ }
+ }
+ }
+ }
+ }
+ }
+ LeaveCriticalSection(&GenStatusCS);
+
+ return ps;
+}
+
+static void FreeProtoSettings(PROTOCOLSETTINGEX** ps)
+{
+ for(int i=0;i<connectionSettings.getCount();i++) {
+ if (ps[i]->szMsg != NULL)
+ free(ps[i]->szMsg);
+ free(ps[i]);
+ }
+ free(ps);
+}
+
+static int AssignStatus(TConnectionSettings* cs, int status, int lastStatus, char *szMsg)
+{
+ if ( status < MIN_STATUS || status > MAX_STATUS )
+ return -1;
+
+ EnterCriticalSection(&GenStatusCS);
+
+ char dbSetting[128];
+ _snprintf(dbSetting, sizeof(dbSetting), "%s_enabled", cs->szName);
+ cs->lastStatus = lastStatus == 0 ? cs->status : lastStatus;
+ if (!DBGetContactSettingByte(NULL, MODULENAME, dbSetting, 1))
+ cs->status = ID_STATUS_DISABLED;
+ else if (status == ID_STATUS_LAST)
+ cs->status = cs->lastStatus;
+ else
+ cs->status = status;
+
+ log_infoA("KeepStatus: assigning status %d to %s", cs->status, cs->szName);
+
+ if ( szMsg != NULL && szMsg != cs->szMsg ) {
+ if ( cs->szMsg != NULL )
+ free(cs->szMsg);
+
+ cs->szMsg = _strdup(szMsg);
+ }
+ else if (szMsg != cs->szMsg) {
+ if (cs->szMsg != NULL)
+ free(cs->szMsg);
+
+ cs->szMsg = NULL;
+ }
+ LeaveCriticalSection(&GenStatusCS);
+ return 0;
+}
+
+static int GetStatus(const TConnectionSettings& cs)
+{
+ if (cs.status == ID_STATUS_CURRENT)
+ return CallProtoService(cs.szName, PS_GETSTATUS, 0, 0);
+
+ return cs.status;
+}
+
+static int SetCurrentStatus()
+{
+ int ret, i, realStatus;
+ PROTOCOLSETTINGEX **ps;
+
+ ps = GetCurrentProtoSettingsCopy();
+ for (i=0;i<connectionSettings.getCount();i++) {
+ realStatus = CallProtoService(ps[i]->szName, PS_GETSTATUS, 0, 0);
+ if ( (ps[i]->status == ID_STATUS_DISABLED) || (ps[i]->status == realStatus) || (DBGetContactSettingByte(NULL, ps[i]->szName, SETTING_PROTORETRY, 0)) ) { // ignore this proto by removing it's name (not so nice)
+ ps[i]->szName = "";
+ }
+ else if ( (ps[i]->status != ID_STATUS_DISABLED) && (ps[i]->status != realStatus) && (realStatus != ID_STATUS_OFFLINE) && (DBGetContactSettingByte(NULL, MODULENAME, SETTING_FIRSTOFFLINE, FALSE)) ) {
+ // force offline before reconnecting
+ log_infoA("KeepStatus: Setting %s offline before making a new connection attempt", ps[i]->szName);
+ CallProtoService(ps[i]->szName, PS_SETSTATUS, (WPARAM)ID_STATUS_OFFLINE, 0);
+ }
+ }
+ ProcessPopup(KS_CONN_STATE_RETRY, (LPARAM)ps);
+ ret = CallService(MS_CS_SETSTATUSEX, (WPARAM)&ps, 0);
+ FreeProtoSettings(ps);
+
+ return ret;
+}
+
+static int StatusChange(WPARAM wParam, LPARAM lParam)
+{
+ char* szProto = (char *)lParam;
+ if (szProto == NULL) { // global status change
+ for (int i=0;i<connectionSettings.getCount();i++) {
+ TConnectionSettings& cs = connectionSettings[i];
+ if (GetStatus(cs) != ID_STATUS_DISABLED)
+ if ( DBGetContactSettingByte(NULL, MODULENAME, SETTING_NOLOCKED, 0) ||
+ !DBGetContactSettingByte(NULL, cs.szName, "LockMainStatus", 0 ))
+ AssignStatus(&cs, wParam, 0, cs.szMsg);
+ }
+ }
+ else {
+ for (int i=0;i<connectionSettings.getCount();i++) {
+ TConnectionSettings& cs = connectionSettings[i];
+ if ( GetStatus(cs) != ID_STATUS_DISABLED && !strcmp(cs.szName, szProto))
+ AssignStatus(&cs, wParam, 0, cs.szMsg);
+ } }
+
+ return 0;
+}
+
+static int CSStatusChange(WPARAM wParam, LPARAM lParam)
+{
+ // the status was changed by commonstatus (old)
+ if (wParam != 0) {
+ int i, j;
+ PROTOCOLSETTING** protoSettings = *(PROTOCOLSETTING***)wParam;
+
+ if (protoSettings == NULL)
+ return -1;
+
+ for (i=0;i<connectionSettings.getCount();i++) {
+ for (j=0;j<connectionSettings.getCount();j++) {
+ if ( (protoSettings[i]->szName == NULL) || (connectionSettings[j].szName == NULL) )
+ continue;
+
+ if (!strcmp(protoSettings[i]->szName, connectionSettings[j].szName))
+ if (GetStatus(connectionSettings[j]) != ID_STATUS_DISABLED)
+ AssignStatus(&connectionSettings[j], protoSettings[i]->status, protoSettings[i]->lastStatus, connectionSettings[j].szMsg);
+ } } }
+
+ return 0;
+}
+
+static int CSStatusChangeEx(WPARAM wParam, LPARAM lParam)
+{
+ // the status was changed by commonstatus (new)
+ if (wParam != 0) {
+ int i, j;
+ PROTOCOLSETTINGEX** protoSettings = *(PROTOCOLSETTINGEX***)wParam;
+
+ if (protoSettings == NULL)
+ return -1;
+
+ for (i=0;i<connectionSettings.getCount();i++) {
+ for (j=0;j<connectionSettings.getCount();j++) {
+ if ( (protoSettings[i]->szName == NULL) || (connectionSettings[j].szName == NULL) )
+ continue;
+ if (!strcmp(protoSettings[i]->szName, connectionSettings[j].szName)) {
+ if (GetStatus(connectionSettings[j]) != ID_STATUS_DISABLED)
+ AssignStatus(&connectionSettings[j], protoSettings[i]->status, protoSettings[i]->lastStatus, protoSettings[i]->szMsg);
+ }
+ }
+ }
+ }
+
+ return 0;
+}
+
+static int StartTimerFunction(int timer, int timeout, BOOL restart)
+{
+ int res = 0;
+
+ EnterCriticalSection(&GenTimerCS);
+ log_debugA("StartTimer: %d, %d, %d", timer, timeout, restart);
+ log_debugA("ack: %u, chk: %u, aft: %u, cnt: %u, con: %u", processAckTimerId, checkConnectionTimerId, afterCheckTimerId, checkContinTimerId, checkConnectingTimerId);
+ if ( timer & IDT_PROCESSACK ) {
+ res = (processAckTimerId == 0)?0:1;
+ if ( ((processAckTimerId == 0) && (checkConnectionTimerId == 0)) || (restart) ) {
+ if (timeout != -1) {
+ if (restart)
+ KillTimer(NULL, processAckTimerId);
+ if (timeout == 0)
+ processAckTimerId = SetTimer(NULL, 0, ackDelay, CheckAckStatusTimer);
+ else
+ processAckTimerId = SetTimer(NULL, 0, timeout, CheckAckStatusTimer);
+ } } }
+
+ if ( timer & IDT_CHECKCONN ) {
+ res = (checkConnectionTimerId == 0?0:1)||res;
+ if ( (checkConnectionTimerId == 0) || (restart) ) {
+ if (timeout != -1) {
+ if (restart)
+ KillTimer(NULL, checkConnectionTimerId);
+ if (timeout == 0)
+ checkConnectionTimerId = SetTimer(NULL, 0, initDelay, CheckConnectionTimer);
+ else
+ checkConnectionTimerId = SetTimer(NULL, 0, timeout, CheckConnectionTimer);
+ } } }
+
+ if ( timer & IDT_AFTERCHECK ) {
+ res = (afterCheckTimerId==0?0:1)||res;
+ if ( (afterCheckTimerId == 0) || (restart) ) {
+ if (timeout != -1) {
+ if (restart)
+ KillTimer(NULL, afterCheckTimerId);
+ if (timeout == 0)
+ afterCheckTimerId = SetTimer(NULL, 0, initDelay/2, AfterCheckTimer);
+ else
+ afterCheckTimerId = SetTimer(NULL, 0, timeout, AfterCheckTimer);
+ } } }
+
+ if ( timer & IDT_CHECKCONTIN ) {
+ res = (checkContinTimerId==0?0:1)||res;
+ if ( (checkContinTimerId == 0) || (restart) ) {
+ if (timeout != -1) {
+ if (restart)
+ KillTimer(NULL, checkContinTimerId);
+ if (timeout == 0) {
+ checkContinTimerId = SetTimer(NULL, 0, 1000*DBGetContactSettingDword(NULL, MODULENAME, SETTING_CNTDELAY, CHECKCONTIN_DELAY), CheckContinueslyTimer);
+ }
+ else
+ checkContinTimerId = SetTimer(NULL, 0, timeout, CheckContinueslyTimer);
+ } } }
+
+ if ( timer & IDT_CHECKCONNECTING ) {
+ res = (checkConnectingTimerId==0?0:1)||res;
+ if ( (checkConnectingTimerId == 0) || (restart) ) {
+ if (timeout != -1) {
+ if (restart)
+ KillTimer(NULL, checkConnectingTimerId);
+ if (timeout == 0) {
+ timeout = initDelay/2;
+ }
+ checkConnectingTimerId = SetTimer(NULL, 0, timeout, CheckConnectingTimer);
+ } } }
+
+ log_debugA("ack: %u, chk: %u, aft: %u, cnt: %u, con: %u", processAckTimerId, checkConnectionTimerId, afterCheckTimerId, checkContinTimerId, checkConnectingTimerId);
+ log_debugA("StartTimer done %d", res);
+ LeaveCriticalSection(&GenTimerCS);
+
+ return res;
+}
+
+static VOID CALLBACK StartTimerApcProc(ULONG_PTR param)
+{
+ struct TimerInfo *ti = (struct TimerInfo *)param;
+ log_debugA("StartTimerApcProc %d %d %d", ti->timer, ti->timeout, ti->restart);
+ ti->result = StartTimerFunction(ti->timer, ti->timeout, ti->restart);
+ SetEvent(ti->hEvent);
+}
+
+static int StartTimer(int timer, int timeout, BOOL restart)
+{
+ if (GetCurrentThreadId() == mainThreadId)
+ return StartTimerFunction(timer, timeout, restart);
+
+ TimerInfo *ti = ( TimerInfo* )calloc(1, sizeof(struct TimerInfo));
+ ti->timer = timer;
+ ti->timeout = timeout;
+ ti->restart = restart;
+ ti->hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
+ QueueUserAPC(StartTimerApcProc, hMainThread, (ULONG_PTR)ti);
+ WaitForSingleObject(ti->hEvent, INFINITE);
+ CloseHandle(ti->hEvent);
+ int res = ti->result;
+ free(ti);
+ return res;
+}
+
+static int StopTimer(int timer)
+{
+ int res = 0;
+
+ EnterCriticalSection(&GenTimerCS);
+ log_debugA("StopTimer %d", timer);
+ log_debugA("ack: %u, chk: %u, aft: %u, cnt: %u, con: %u", processAckTimerId, checkConnectionTimerId, afterCheckTimerId, checkContinTimerId, checkConnectingTimerId);
+
+ if ( timer & IDT_PROCESSACK ) {
+ if (processAckTimerId == 0)
+ res = 0;
+ else {
+ KillTimer(NULL, processAckTimerId);
+ processAckTimerId = 0;
+ res = 1;
+ } }
+
+ if ( timer & IDT_CHECKCONN ) {
+ if (checkConnectionTimerId == 0)
+ res = 0||res;
+ else {
+ KillTimer(NULL, checkConnectionTimerId);
+ checkConnectionTimerId = 0;
+ res = 1;
+ } }
+
+ if ( timer & IDT_AFTERCHECK ) {
+ if (afterCheckTimerId == 0)
+ res = 0||res;
+ else {
+ KillTimer(NULL, afterCheckTimerId);
+ afterCheckTimerId = 0;
+ res = 1;
+ } }
+
+ if ( timer & IDT_CHECKCONTIN ) {
+ if (checkContinTimerId == 0)
+ res = 0||res;
+ else {
+ KillTimer(NULL, checkContinTimerId);
+ checkContinTimerId = 0;
+ res = 1;
+ } }
+
+ if ( timer & IDT_CHECKCONNECTING ) {
+ if (checkConnectingTimerId == 0)
+ res = 0||res;
+ else {
+ KillTimer(NULL, checkConnectingTimerId);
+ checkConnectingTimerId = 0;
+ res = 1;
+ } }
+
+ log_debugA("ack: %u, chk: %u, aft: %u, cnt: %u, con: %u", processAckTimerId, checkConnectionTimerId, afterCheckTimerId, checkContinTimerId, checkConnectingTimerId);
+ log_debugA("StopTimer done %d", res);
+ LeaveCriticalSection(&GenTimerCS);
+
+ return res;
+}
+
+static int ProcessProtoAck(WPARAM wParam,LPARAM lParam)
+{
+ ACKDATA *ack=(ACKDATA*)lParam;
+ char dbSetting[128];
+ int i;
+
+ if ( (ack->type != ACKTYPE_STATUS) && (ack->type != ACKTYPE_LOGIN) )
+ return 0;
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s_enabled", ack->szModule);
+ if (!DBGetContactSettingByte(NULL, MODULENAME, dbSetting, 1))
+ return 0;
+
+ if (DBGetContactSettingByte(NULL, ack->szModule, SETTING_PROTORETRY, 0)) {
+ log_infoA("KeepStatus: %s has built-in reconnection enabled", ack->szModule);
+ return 0;
+ }
+
+ if ( ack->type == ACKTYPE_STATUS && ack->result == ACKRESULT_SUCCESS ) {
+ for ( i=0; i < connectionSettings.getCount(); i++ ) {
+ TConnectionSettings& cs = connectionSettings[i];
+ if ( !strcmp( cs.szName, ack->szModule ))
+ cs.lastStatusAckTime = GetTickCount();
+ }
+ StartTimer(IDT_PROCESSACK, 0, FALSE);
+ return 0;
+ }
+
+ if (ack->type == ACKTYPE_LOGIN) {
+ if (ack->lParam == LOGINERR_OTHERLOCATION) {
+ int i, j;
+
+ for (i=0;i<connectionSettings.getCount();i++) {
+ TConnectionSettings& cs = connectionSettings[i];
+ if (!strcmp(ack->szModule, cs.szName)) {
+ AssignStatus(&cs, ID_STATUS_OFFLINE, 0, NULL);
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_CNCOTHERLOC, 0)) {
+ StopTimer(IDT_PROCESSACK);
+ for (j=0;j<connectionSettings.getCount();j++) {
+ AssignStatus(&connectionSettings[j], ID_STATUS_OFFLINE, 0, NULL);
+ } }
+
+ NotifyEventHooks(hConnectionEvent, (WPARAM)KS_CONN_STATE_OTHERLOCATION, (LPARAM)cs.szName);
+ ProcessPopup(KS_CONN_STATE_OTHERLOCATION, (LPARAM)ack->szModule);
+ } }
+ }
+ else if (ack->result == ACKRESULT_FAILED) {
+ // login failed
+ NotifyEventHooks(hConnectionEvent, (WPARAM)KS_CONN_STATE_LOGINERROR, (LPARAM)ack->szModule);
+ switch (DBGetContactSettingByte(NULL, MODULENAME, SETTING_LOGINERR, LOGINERR_NOTHING)) {
+ case LOGINERR_CANCEL:
+ {
+ log_infoA("KeepStatus: cancel on login error (%s)", ack->szModule);
+ for ( int i=0; i <connectionSettings.getCount(); i++ ) {
+ TConnectionSettings& cs = connectionSettings[i];
+ if (!strcmp(ack->szModule, cs.szName))
+ AssignStatus(&cs, ID_STATUS_OFFLINE, 0, NULL);
+ }
+ ProcessPopup(KS_CONN_STATE_LOGINERROR, (LPARAM)ack->szModule);
+ StopChecking();
+ }
+ break;
+
+ case LOGINERR_SETDELAY:
+ {
+ int newDelay = newDelay = 1000*DBGetContactSettingDword(NULL, MODULENAME, SETTING_LOGINERR_DELAY, DEFAULT_MAXDELAY);
+ log_infoA("KeepStatus: set delay to %d on login error (%s)", newDelay/1000, ack->szModule);
+ StartTimer(IDT_CHECKCONN, newDelay, TRUE);
+ }
+ ProcessPopup(KS_CONN_STATE_LOGINERROR, (LPARAM)ack->szModule);
+ break;
+
+ default:
+ case LOGINERR_NOTHING:
+ StartTimer(IDT_PROCESSACK, 0, FALSE);
+ break;
+ } } }
+
+ return 0;
+}
+
+static VOID CALLBACK CheckConnectingTimer(HWND hwnd,UINT message,UINT_PTR idEvent,DWORD dwTime)
+{
+ int i, maxConnectingTime;
+
+ StopTimer(IDT_CHECKCONNECTING);
+ //log_debugA("KeepStatus: CheckConnectingTimer");
+ for (i=0;i<connectionSettings.getCount();i++) {
+ TConnectionSettings& cs = connectionSettings[i];
+
+ int curStatus = GetStatus(cs);
+ int newStatus = CallProtoService(cs.szName,PS_GETSTATUS, 0, 0);
+ if (curStatus < MAX_CONNECT_RETRIES) { // connecting
+ maxConnectingTime = DBGetContactSettingDword(NULL, MODULENAME, SETTING_MAXCONNECTINGTIME, 0);
+ if (maxConnectingTime > 0) {
+ if ( (unsigned int)maxConnectingTime <= ((GetTickCount() - cs.lastStatusAckTime)/1000) ) {
+ // set offline
+ log_infoA("KeepStatus: %s is too long connecting; setting offline", cs.szName);
+ CallProtoService(cs.szName, PS_SETSTATUS, (WPARAM)ID_STATUS_OFFLINE, 0);
+} } } } }
+
+static VOID CALLBACK CheckAckStatusTimer(HWND hwnd,UINT message,UINT_PTR idEvent,DWORD dwTime)
+{
+ int i, maxConnectingTime;
+ BOOL needChecking;
+
+ StopTimer(IDT_PROCESSACK);
+ needChecking = FALSE;
+ for (i=0;i<connectionSettings.getCount();i++) {
+ TConnectionSettings& cs = connectionSettings[i];
+
+ int curStatus = GetStatus(cs);
+ int newStatus = CallProtoService(cs.szName,PS_GETSTATUS, 0, 0);
+ // ok, np
+ if ( curStatus == ID_STATUS_CURRENT || curStatus == ID_STATUS_DISABLED || curStatus == newStatus || newStatus > MAX_STATUS )
+ continue;
+
+ if (newStatus < MAX_CONNECT_RETRIES) { // connecting
+ maxConnectingTime = DBGetContactSettingDword(NULL, MODULENAME, SETTING_MAXCONNECTINGTIME, 0);
+ if (maxConnectingTime > 0)
+ StartTimer(IDT_CHECKCONNECTING, (maxConnectingTime*1000 - (GetTickCount() - cs.lastStatusAckTime)), FALSE);
+ }
+ // keepstatus' administration was wrong!
+ else if (newStatus != ID_STATUS_OFFLINE)
+ AssignStatus(&cs, newStatus, 0, NULL);
+
+ // connection lost
+ else if (newStatus == ID_STATUS_OFFLINE) {// start checking connection
+ if (!StartTimer(IDT_CHECKCONN, -1, FALSE)) { /* check if not already checking */
+ needChecking = TRUE;
+ log_infoA("KeepStatus: connection lost! (%s)", cs.szName);
+ NotifyEventHooks(hConnectionEvent, (WPARAM)KS_CONN_STATE_LOST, (LPARAM)cs.szName);
+ ProcessPopup(KS_CONN_STATE_LOST, (LPARAM)cs.szName);
+ } } }
+
+ if (needChecking == TRUE)
+ StartTimer(IDT_CHECKCONN, initDelay, FALSE);
+}
+
+static VOID CALLBACK CheckConnectionTimer(HWND hwnd,UINT message,UINT_PTR idEvent,DWORD dwTime)
+{
+ int i, shouldBeStatus, realStatus, setStatus;
+ HICON hIcon;
+
+ log_debugA("CheckConnectionTimer");
+ setStatus = FALSE;
+ if (showConnectionPopups)
+ hIcon = (HICON)CallService(MS_SKIN_LOADICON, (WPARAM)SKINICON_STATUS_OFFLINE, 0);
+
+ for ( i=0; i < connectionSettings.getCount() && !setStatus; i++ ) {
+ TConnectionSettings& cs = connectionSettings[i];
+ realStatus = CallProtoService(cs.szName, PS_GETSTATUS, 0, 0);
+ shouldBeStatus = GetStatus(cs);
+ if (shouldBeStatus == ID_STATUS_LAST)
+ shouldBeStatus = cs.lastStatus;
+ if (shouldBeStatus == ID_STATUS_DISABLED)
+ continue;
+ if ( (shouldBeStatus != realStatus) && (realStatus == ID_STATUS_OFFLINE) || (realStatus < MIN_STATUS) ) {
+ setStatus = TRUE;
+ if (showConnectionPopups)
+ hIcon = (HICON)CallService(MS_SKIN_LOADPROTOICON, (WPARAM)cs.szName, (LPARAM)SKINICON_STATUS_OFFLINE);
+ } }
+
+ // one of the status was wrong
+ if ( setStatus == TRUE && ( maxRetries == -1 || retryCount < maxRetries )) {
+ if (increaseExponential)
+ currentDelay = min(2*currentDelay,maxDelay);
+
+ if ( ((DBGetContactSettingByte(NULL, MODULENAME, SETTING_CHKINET, 0)) && (!InternetGetConnectedState(NULL, 0))) || ((DBGetContactSettingByte(NULL, MODULENAME, SETTING_BYPING, FALSE)) && (!bLastPingResult)) ) {
+ // no network
+ NotifyEventHooks(hConnectionEvent, (WPARAM)KS_CONN_STATE_RETRYNOCONN, (LPARAM)retryCount+1);
+ ProcessPopup(KS_CONN_STATE_RETRYNOCONN, 0);
+ }
+ else {
+ NotifyEventHooks(hConnectionEvent, (WPARAM)KS_CONN_STATE_RETRY, (LPARAM)retryCount+1);
+ /* set the status */
+ SetCurrentStatus();
+ }
+ retryCount += 1;
+ StartTimer(IDT_AFTERCHECK, min(currentDelay, AFTERCHECK_DELAY)/2, FALSE);
+ StartTimer(IDT_CHECKCONN, currentDelay, TRUE); // restart this timer
+ }
+ else // all status set ok already, or stop checking
+ StopChecking();
+
+ log_debugA("CheckConnectionTimer done");
+}
+
+static int StopChecking()
+{
+ StopTimer(IDT_CHECKCONN|IDT_PROCESSACK|IDT_AFTERCHECK|IDT_CHECKCONNECTING);
+
+ BOOL isOk = TRUE;
+ for ( int i=0; i < connectionSettings.getCount() && isOk; i++ ) {
+ TConnectionSettings& cs = connectionSettings[i];
+ int curStatus = GetStatus(cs);
+ int newStatus = CallProtoService(cs.szName, PS_GETSTATUS, 0, 0);
+ if ( newStatus != curStatus && curStatus != ID_STATUS_DISABLED ) {
+ AssignStatus(&cs, newStatus, 0, NULL);
+ isOk = FALSE;
+ } }
+
+ NotifyEventHooks(hConnectionEvent, (WPARAM)KS_CONN_STATE_STOPPEDCHECKING, (LPARAM)isOk);
+ ProcessPopup(KS_CONN_STATE_STOPPEDCHECKING, (LPARAM)isOk);
+ log_infoA("KeepStatus: stop checking (%s)", isOk?"success":"failure");
+ retryCount = 0;
+ currentDelay = initDelay;
+
+ return 0;
+}
+
+static VOID CALLBACK AfterCheckTimer(HWND hwnd,UINT message,UINT_PTR idEvent,DWORD dwTime)
+{
+ // after each connection check, this function is called to see if connection was recovered
+ StopTimer(IDT_AFTERCHECK);
+
+ int setStatus = FALSE;
+
+ for( int i=0; i <connectionSettings.getCount(); i++ ) {
+ TConnectionSettings& cs = connectionSettings[i];
+ int realStatus = CallProtoService(cs.szName, PS_GETSTATUS, 0, 0);
+ int shouldBeStatus = GetStatus(cs);
+ if (shouldBeStatus == ID_STATUS_LAST) // this should never happen
+ shouldBeStatus = cs.lastStatus;
+ if (shouldBeStatus == ID_STATUS_DISABLED) // (on ignoring proto)
+ continue;
+ if ( (shouldBeStatus != realStatus) && (realStatus == ID_STATUS_OFFLINE) || (realStatus < MIN_STATUS) )
+ setStatus = TRUE;
+ }
+
+ if ( setStatus == FALSE || retryCount == maxRetries )
+ StopChecking();
+
+ return;
+}
+
+typedef HANDLE ( WINAPI *pfnIcmpCreateFile )( void );
+typedef BOOL ( WINAPI *pfnIcmpCloseHandle )( HANDLE );
+typedef DWORD ( WINAPI *pfnIcmpSendEcho )( HANDLE, DWORD, int, int, void*, char*, int, int );
+
+static void CheckContinueslyFunction(void *arg)
+{
+ static int pingFailures = 0;
+
+ // one at the time is enough, do it the 'easy' way
+ EnterCriticalSection(&CheckContinueslyCS);
+
+ // do a ping, even if reconnecting
+ BOOL doPing = FALSE;
+ for( int i=0; i < connectionSettings.getCount(); i++ ) {
+ TConnectionSettings& cs = connectionSettings[i];
+ int shouldBeStatus = GetStatus(cs);
+ if (shouldBeStatus == ID_STATUS_LAST)
+ shouldBeStatus = cs.lastStatus;
+
+ if (shouldBeStatus == ID_STATUS_DISABLED)
+ continue;
+
+ if (shouldBeStatus != ID_STATUS_OFFLINE) {
+ log_debugA("CheckContinueslyFunction: %s should be %d", cs.szName, shouldBeStatus);
+ doPing = TRUE;
+ } }
+
+ if (!doPing) {
+ log_debugA("CheckContinueslyFunction: All protocols should be offline, no need to check connection");
+ LeaveCriticalSection(&CheckContinueslyCS);
+ return;
+ }
+
+ BOOL ping = DBGetContactSettingByte(NULL, MODULENAME, SETTING_BYPING, FALSE);
+ if (ping) {
+ DBVARIANT dbv;
+ if (DBGetContactSetting(NULL, MODULENAME, SETTING_PINGHOST, &dbv))
+ ping = FALSE;
+ else {
+ char *start, *end;
+ char host[MAX_PATH];
+ pfnIcmpCreateFile lpfnIcmpCreateFile;
+ pfnIcmpCloseHandle lpfnIcmpCloseHandle;
+ pfnIcmpSendEcho lpfnIcmpSendEcho;
+ HANDLE hICMPFile;
+ DWORD *addr;
+ struct hostent *hostent;
+ char reply[sizeof(ICMP_ECHO_REPLY)+8];
+
+ bLastPingResult = FALSE;
+ lpfnIcmpCreateFile = (pfnIcmpCreateFile)GetProcAddress(hICMP,"IcmpCreateFile");
+ lpfnIcmpCloseHandle = (pfnIcmpCloseHandle)GetProcAddress(hICMP,"IcmpCloseHandle");
+ lpfnIcmpSendEcho = (pfnIcmpSendEcho)GetProcAddress(hICMP,"IcmpSendEcho");
+ if ((hICMP == NULL) || (lpfnIcmpCreateFile == NULL) || (lpfnIcmpCloseHandle == NULL) || (lpfnIcmpSendEcho == NULL)) {
+ bLastPingResult = TRUE;
+ log_infoA("KeepStatus: icmp.dll error (1)");
+ }
+ hICMPFile = (HANDLE) lpfnIcmpCreateFile();
+ if (hICMPFile == INVALID_HANDLE_VALUE) {
+ bLastPingResult = TRUE;
+ log_infoA("KeepStatus: icmp.dll error (2)");
+ }
+ if (bLastPingResult == FALSE) {
+ start = dbv.pszVal;
+ while ( (*start != '\0') && (!bLastPingResult) ) {
+ end = start;
+ while ( (*end != ' ') && (*end != '\0') )
+ end++;
+ memset(host, '\0', sizeof(host));
+ strncpy(host, start, end-start);
+ hostent = gethostbyname(host);
+ if (hostent != NULL) {
+ addr = (DWORD *)( *hostent->h_addr_list );
+ bLastPingResult = (lpfnIcmpSendEcho(hICMPFile, *addr, 0,0,NULL, reply,sizeof(ICMP_ECHO_REPLY)+8,5000) != 0);
+
+ if (bLastPingResult)
+ pingFailures = 0;
+ else
+ pingFailures++;
+
+ log_debugA("CheckContinueslyFunction: pinging %s (result: %d/%d)", host, bLastPingResult, pingFailures);
+ }
+ else log_debugA("CheckContinueslyFunction: unable to resolve %s", host);
+
+ start = end;
+ while (*start == ' ')
+ start++;
+ }
+ }
+ lpfnIcmpCloseHandle(hICMPFile);
+ }
+ DBFreeVariant(&dbv);
+ }
+
+ if (StartTimer(IDT_CHECKCONN, -1, FALSE)) {
+ LeaveCriticalSection(&CheckContinueslyCS);
+ return; // already connecting, leave
+ }
+
+ if ( ((!ping) && (!InternetGetConnectedState(NULL, 0))) || ( (ping) && (!bLastPingResult) && (pingFailures >= DBGetContactSettingWord(NULL, MODULENAME, SETTING_PINGCOUNT, DEFAULT_PINGCOUNT))) ) {
+ pingFailures = 0;
+
+ int count;
+ PROTOACCOUNT** protos;
+ ProtoEnumAccounts( &count, &protos );
+
+ for(int i=0; i < count; i++ ) {
+ if ( !IsSuitableProto( protos[i] ))
+ continue;
+
+ if (CallProtoService(protos[i]->szModuleName, PS_GETSTATUS, 0, 0) < MAX_CONNECT_RETRIES) {
+ log_debugA("CheckContinueslyFunction: %s is connecting", protos[i]->szModuleName);
+ continue; // connecting, leave alone
+ }
+ if (IsProtocolEnabledService(0, (LPARAM)protos[i]->szModuleName)) {
+ log_debugA("CheckContinueslyFunction: forcing %s offline", protos[i]->szModuleName);
+ CallProtoService(protos[i]->szModuleName, PS_SETSTATUS, (WPARAM)ID_STATUS_OFFLINE, 0);
+ }
+ }
+ if (StartTimer(IDT_CHECKCONN|IDT_PROCESSACK, -1, FALSE)) {// are our 'set offlines' noticed?
+ log_debugA("CheckContinueslyFunction: currently checking");
+ LeaveCriticalSection(&CheckContinueslyCS);
+ return;
+ }
+ log_infoA("KeepStatus: connection lost! (continuesly check)");
+ NotifyEventHooks(hConnectionEvent, (WPARAM)KS_CONN_STATE_LOST, (LPARAM)NULL);
+ ProcessPopup(KS_CONN_STATE_LOST, (LPARAM)NULL);
+ maxRetries = DBGetContactSettingByte(NULL, MODULENAME, SETTING_MAXRETRIES, 0);
+ if (maxRetries == 0)
+ maxRetries = -1;
+ StartTimer(IDT_CHECKCONN, initDelay, FALSE);
+ }
+ LeaveCriticalSection(&CheckContinueslyCS);
+}
+
+static VOID CALLBACK CheckContinueslyTimer(HWND hwnd, UINT message, UINT_PTR idEvent, DWORD dwTime)
+{
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_BYPING, FALSE))
+ mir_forkthread(CheckContinueslyFunction, NULL);
+ else
+ CheckContinueslyFunction(NULL);
+}
+
+// =============== popup ======================
+static int ProcessPopup(int reason, LPARAM lParam)
+{
+ HICON hIcon;
+ char text[MAX_SECONDLINE], protoName[128], *szProto;
+
+ if ( !DBGetContactSettingByte(NULL, MODULENAME, SETTING_SHOWCONNECTIONPOPUPS,FALSE) || !ServiceExists(MS_POPUP_ADDPOPUP))
+ return -1;
+
+ memset(protoName, '\0', sizeof(protoName));
+ strcpy(text, Translate("KeepStatus"));
+ hIcon = NULL;
+ szProto = NULL;
+
+ switch(reason) {
+ case KS_CONN_STATE_OTHERLOCATION: // lParam = 1 proto
+ if (!DBGetContactSettingByte(NULL, MODULENAME, SETTING_PUOTHER, TRUE))
+ return -1;
+
+ szProto = (char *)lParam;
+ hIcon = (HICON)CallService(MS_SKIN_LOADPROTOICON, (WPARAM)szProto, (LPARAM)SKINICON_STATUS_OFFLINE);
+ CallProtoService(szProto, PS_GETNAME, sizeof(protoName), (LPARAM)protoName);
+ mir_snprintf(text, sizeof(text), Translate("%s Connected from another location"), protoName);
+ break;
+
+ case KS_CONN_STATE_LOGINERROR: // lParam = 1 proto
+ /*******************
+ rethink this
+ ********************/
+ if (!DBGetContactSettingByte(NULL, MODULENAME, SETTING_PUOTHER, TRUE))
+ return -1;
+
+ szProto = (char *)lParam;
+ hIcon = (HICON)CallService(MS_SKIN_LOADPROTOICON, (WPARAM)szProto, (LPARAM)SKINICON_STATUS_OFFLINE);
+ CallProtoService(szProto, PS_GETNAME, sizeof(protoName), (LPARAM)protoName);
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_LOGINERR, LOGINERR_NOTHING) == LOGINERR_CANCEL)
+ _snprintf(text, sizeof(text), Translate("%s Login error, cancel reconnecting"), protoName);
+
+ else if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_LOGINERR, LOGINERR_NOTHING) == LOGINERR_SETDELAY)
+ _snprintf(text, sizeof(text), Translate("%s Login error (next retry (%d) in %ds)"), protoName, retryCount+1, DBGetContactSettingDword(NULL, MODULENAME, SETTING_LOGINERR_DELAY, DEFAULT_MAXDELAY));
+
+ else
+ return -1;
+
+ break;
+
+ case KS_CONN_STATE_LOST: // lParam = 1 proto, or NULL
+ if (!DBGetContactSettingByte(NULL, MODULENAME, SETTING_PUCONNLOST, TRUE))
+ return -1;
+
+ szProto = (char *)lParam;
+ if (szProto != NULL) {
+ hIcon = (HICON)CallService(MS_SKIN_LOADPROTOICON, (WPARAM)szProto, (LPARAM)SKINICON_STATUS_OFFLINE);
+ CallProtoService(szProto, PS_GETNAME, sizeof(protoName), (LPARAM)protoName);
+ _snprintf(text, sizeof(text), Translate("%s Status error (next retry (%d) in %ds)"), protoName, retryCount+1, currentDelay/1000);
+ }
+ else {
+ hIcon = (HICON)CallService(MS_SKIN_LOADICON, (WPARAM)SKINICON_STATUS_OFFLINE, 0);
+ _snprintf(text, sizeof(text), Translate("Status error (next retry (%d) in %ds)"), retryCount+1, currentDelay/1000);
+ }
+ break;
+
+ case KS_CONN_STATE_RETRY: // lParam = PROTOCOLSETTINGEX**
+ {
+ int i;
+ PROTOCOLSETTINGEX **ps;
+ char protoInfoLine[512], protoInfo[MAX_SECONDLINE];
+
+ if (!DBGetContactSettingByte(NULL, MODULENAME, SETTING_PUCONNRETRY, TRUE))
+ return -1;
+
+ memset(protoInfoLine, '\0', sizeof(protoInfoLine));
+ memset(protoInfo, '\0', sizeof(protoInfo));
+ strcpy(protoInfo, "\r\n");
+ ps = (PROTOCOLSETTINGEX **)lParam;
+ szProto = NULL;
+ for (i=0;i<connectionSettings.getCount();i++) {
+ if (strlen(ps[i]->szName) > 0) {
+ if (szProto == NULL) {
+ szProto = ps[i]->szName;
+ }
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_PUSHOWEXTRA, TRUE)) {
+ CallProtoService(ps[i]->szName, PS_GETNAME, sizeof(protoName), (LPARAM)protoName);
+ //_snprintf(protoInfoLine, sizeof(protoInfoLine), Translate("%s\t(will be set to %s)\r\n"), protoName, (char *)CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION, (WPARAM)ps[i]->status, (LPARAM)0));
+ _snprintf(protoInfoLine, sizeof(protoInfoLine), "%s\t(%s %s)\r\n", protoName, Translate("will be set to"), (char *)CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION, (WPARAM)ps[i]->status, (LPARAM)0));
+ strncat(protoInfo, protoInfoLine, sizeof(protoInfo)-strlen(protoInfo)-1);
+ }
+ }
+ }
+ if (strlen(protoInfo) > 0) {
+ // cut the last end of line (this may also be the first one ;) )
+ *(protoInfo + strlen(protoInfo) - 2) = '\0';
+ }
+ if (szProto != NULL)
+ hIcon = (HICON)CallService(MS_SKIN_LOADPROTOICON, (WPARAM)szProto, (LPARAM)SKINICON_STATUS_OFFLINE);
+ else
+ hIcon = (HICON)CallService(MS_SKIN_LOADICON, (WPARAM)SKINICON_STATUS_OFFLINE, 0);
+
+ if (retryCount == maxRetries-1)
+ _snprintf(text, sizeof(text), Translate("Resetting status... (last try (%d))%s"), retryCount+1, protoInfo);
+ else
+ _snprintf(text, sizeof(text), Translate("Resetting status... (next retry (%d) in %ds)%s"), retryCount+2, currentDelay/1000, protoInfo);
+ }
+ break;
+
+ case KS_CONN_STATE_RETRYNOCONN: // lParam = NULL
+ if (!DBGetContactSettingByte(NULL, MODULENAME, SETTING_PUOTHER, TRUE))
+ return -1;
+
+ hIcon = (HICON)CallService(MS_SKIN_LOADICON, (WPARAM)SKINICON_STATUS_OFFLINE, 0);
+ if (retryCount == maxRetries-1)
+ _snprintf(text, sizeof(text), Translate("No internet connection seems available... (last try (%d))"), retryCount+1);
+ else
+ _snprintf(text, sizeof(text), Translate("No internet connection seems available... (next retry (%d) in %ds)"), retryCount+2, currentDelay/1000);
+ break;
+
+ case KS_CONN_STATE_STOPPEDCHECKING: // lParam == BOOL succes
+ if (!DBGetContactSettingByte(NULL, MODULENAME, SETTING_PURESULT, TRUE))
+ return -1;
+
+ if (lParam) {
+ hIcon = (HICON)CallService(MS_SKIN_LOADICON, (WPARAM)SKINICON_STATUS_ONLINE, 0);
+ _snprintf(text, sizeof(text), Translate("Status was set ok"));
+ }
+ else {
+ hIcon = (HICON)CallService(MS_SKIN_LOADICON, (WPARAM)SKINICON_STATUS_OFFLINE, 0);
+ _snprintf(text, sizeof(text), Translate("Giving up"));
+ }
+ break;
+ }
+ if (hIcon == NULL)
+ hIcon = (HICON)CallService(MS_SKIN_LOADICON, (WPARAM)SKINICON_STATUS_OFFLINE, 0);
+
+ log_infoA("KeepStatus: %s", text);
+ return ShowPopup(text, hIcon);
+}
+
+static int ShowPopup(char* msg, HICON hIcon)
+{
+ POPUPDATAEX ppd = { NULL };
+ ppd.lchContact = NULL;
+ ppd.lchIcon = hIcon;
+ memset(ppd.lpzContactName, '\0', sizeof(ppd.lpzContactName));
+ memset(ppd.lpzText, '\0', sizeof(ppd.lpzText));
+ strncpy(ppd.lpzContactName, Translate("KeepStatus"), sizeof(ppd.lpzContactName)-1);
+ strncpy(ppd.lpzText, msg, sizeof(ppd.lpzText)-1);
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_POPUP_USEWINCOLORS, 0))
+ ppd.colorBack = GetSysColor(COLOR_BTNFACE);
+ else if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_POPUP_USEDEFCOLORS, 0))
+ ppd.colorBack = (COLORREF)NULL;
+ else
+ ppd.colorBack = DBGetContactSettingDword(NULL, MODULENAME, SETTING_POPUP_BACKCOLOR, 0xAAAAAA);
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_POPUP_USEWINCOLORS, 0))
+ ppd.colorText = GetSysColor(COLOR_WINDOWTEXT);
+ else if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_POPUP_USEDEFCOLORS, 0))
+ ppd.colorText = (COLORREF)NULL;
+ else
+ ppd.colorText = DBGetContactSettingDword(NULL, MODULENAME, SETTING_POPUP_TEXTCOLOR, 0x0000CC);
+ ppd.PluginWindowProc = ( WNDPROC )PopupDlgProc;
+ ppd.PluginData = NULL;
+ if (!ServiceExists(MS_POPUP_ADDPOPUPEX))
+ return CallService(MS_POPUP_ADDPOPUP, (WPARAM)&ppd, 0);
+ else {
+ switch (DBGetContactSettingByte(NULL, MODULENAME, SETTING_POPUP_DELAYTYPE, POPUP_DELAYFROMPU)) {
+ case POPUP_DELAYCUSTOM:
+ ppd.iSeconds = (int)DBGetContactSettingDword(NULL, MODULENAME, SETTING_POPUP_TIMEOUT, 0);
+ if (ppd.iSeconds == 0) {
+ ppd.iSeconds = currentDelay/1000-1;
+ }
+ break;
+ case POPUP_DELAYPERMANENT:
+ ppd.iSeconds = -1;
+ break;
+ case POPUP_DELAYFROMPU:
+ default:
+ ppd.iSeconds = 0;
+ break;
+ }
+ return CallService(MS_POPUP_ADDPOPUPEX, (WPARAM)&ppd, 0);
+ }
+}
+
+int CALLBACK PopupDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ switch(message) {
+ case WM_CONTEXTMENU: // right
+ case WM_COMMAND: // left
+ switch( DBGetContactSettingByte( NULL, MODULENAME,
+ (message == WM_COMMAND) ? SETTING_POPUP_LEFTCLICK : SETTING_POPUP_RIGHTCLICK,
+ POPUP_ACT_CLOSEPOPUP )) {
+ case POPUP_ACT_CANCEL:
+ // cancel timer
+ StopChecking();
+ PUDeletePopUp(hWnd);
+ break;
+
+ case POPUP_ACT_CLOSEPOPUP:
+ // close the popup
+ PUDeletePopUp(hWnd);
+ break;
+ }
+ break;
+
+ case UM_FREEPLUGINDATA:
+ break;
+ }
+
+ return DefWindowProc(hWnd, message, wParam, lParam);
+}
+
+// =============== services ===================
+INT_PTR StopReconnectingService(WPARAM wParam, LPARAM lParam)
+{
+ int ret = StartTimer(IDT_CHECKCONN|IDT_AFTERCHECK, -1, FALSE);
+ StopChecking();
+ return ret;
+}
+
+INT_PTR EnableProtocolService(WPARAM wParam, LPARAM lParam)
+{
+ char *szProto = (char *)lParam;
+ if (szProto == NULL)
+ return -1;
+
+ char dbSetting[128];
+ _snprintf(dbSetting, sizeof(dbSetting), "%s_enabled", szProto);
+ if (!DBGetContactSettingByte(NULL, MODULENAME, dbSetting, 1)) // 'hard' disabled
+ return -1;
+
+ int ret = -2;
+ for ( int i=0; i < connectionSettings.getCount(); i++ ) {
+ TConnectionSettings& cs = connectionSettings[i];
+ if (!strcmp(szProto, cs.szName)) {
+ if (wParam) {
+ if (GetStatus(cs) == ID_STATUS_DISABLED)
+ AssignStatus(&cs, CallProtoService(cs.szName, PS_GETSTATUS, 0, 0), 0, NULL);
+ }
+ else AssignStatus(&cs, ID_STATUS_DISABLED, 0, NULL);
+
+ ret = 0;
+ break;
+ }
+ }
+ return ret;
+}
+
+INT_PTR IsProtocolEnabledService(WPARAM wParam, LPARAM lParam)
+{
+ int ret = -2;
+ char *szProto = (char *)lParam;
+
+ char dbSetting[128];
+ _snprintf(dbSetting, sizeof(dbSetting), "%s_enabled", szProto);
+ if ( !DBGetContactSettingByte(NULL, MODULENAME, dbSetting, 1 ))
+ return FALSE;
+
+ for ( int i=0; i < connectionSettings.getCount(); i++ ) {
+ TConnectionSettings& cs = connectionSettings[i];
+ if ( !strcmp(szProto, cs.szName ))
+ return GetStatus(cs) != ID_STATUS_DISABLED;
+ }
+
+ return FALSE;
+}
+
+INT_PTR AnnounceStatusChangeService(WPARAM wParam, LPARAM lParam)
+{
+ PROTOCOLSETTINGEX *newSituation = (PROTOCOLSETTINGEX *)lParam;
+ log_infoA("Another plugin announced a status change to %d for %s", newSituation->status, newSituation->szName==NULL?"all":newSituation->szName);
+
+ for ( int i=0; i < connectionSettings.getCount(); i++ ) {
+ TConnectionSettings& cs = connectionSettings[i];
+ if ( !lstrcmpA( cs.szName, newSituation->szName ))
+ AssignStatus(&cs, newSituation->status, newSituation->lastStatus, newSituation->szMsg);
+ }
+
+ return 0;
+}
+
+// =============== window for suspend ===============
+
+static DWORD CALLBACK MessageWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ static PROTOCOLSETTINGEX** ps = NULL;
+
+ switch(msg) {
+ case WM_POWERBROADCAST:
+ switch (wParam) {
+ case PBT_APMSUSPEND:
+ log_infoA("KeepStatus: suspend state detected: %08X %08X", wParam, lParam);
+ if (ps == NULL) {
+ ps = GetCurrentProtoSettingsCopy();
+ for ( int i=0; i < connectionSettings.getCount(); i++)
+ EnableProtocolService( 0, (LPARAM)ps[i]->szName );
+
+ // set proto's offline, the clist will not try to reconnect in that case
+ CallService(MS_CLIST_SETSTATUSMODE, (WPARAM)ID_STATUS_OFFLINE, 0);
+ }
+ break;
+
+ //case PBT_APMRESUMEAUTOMATIC: ?
+ case PBT_APMRESUMESUSPEND:
+ case PBT_APMRESUMECRITICAL:
+ log_infoA("KeepStatus: resume from suspend state");
+ if (ps != NULL) {
+ for (int i=0;i<connectionSettings.getCount();i++)
+ AssignStatus(&connectionSettings[i], ps[i]->status, ps[i]->lastStatus, ps[i]->szMsg);
+ FreeProtoSettings(ps);
+ ps = NULL;
+ }
+ StartTimer(IDT_PROCESSACK, 0, FALSE);
+ break;
+ }
+ break;
+
+ case WM_DESTROY:
+ if ( ps != NULL ) {
+ FreeProtoSettings(ps);
+ ps = NULL;
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// Account control event
+
+int OnAccChanged(WPARAM wParam,LPARAM lParam)
+{
+ PROTOACCOUNT* pa = ( PROTOACCOUNT* )lParam;
+ switch( wParam ) {
+ case PRAC_ADDED:
+ connectionSettings.insert( new TConnectionSettings( pa ));
+ break;
+
+ case PRAC_REMOVED:
+ {
+ for ( int i=0; i < connectionSettings.getCount(); i++ ) {
+ if ( !lstrcmpA( connectionSettings[i].szName, pa->szModuleName )) {
+ connectionSettings.remove( i );
+ break;
+ } } }
+ break;
+ }
+
+ return 0;
+}
+
+// =============== init stuff =================
+
+int CSModuleLoaded(WPARAM wParam,LPARAM lParam)
+{
+ InitializeCriticalSection(&GenTimerCS);
+ InitializeCriticalSection(&GenStatusCS);
+ InitializeCriticalSection(&CheckContinueslyCS);
+
+ protoList = ( OBJLIST<PROTOCOLSETTINGEX>* )&connectionSettings;
+
+ hMessageWindow = NULL;
+ LoadMainOptions();
+ hOptionsHook = HookEvent(ME_OPT_INITIALISE, OptionsInit);
+ hShutdownHook = HookEvent(ME_SYSTEM_OKTOEXIT, Exit);
+ hAccChangeHook = HookEvent(ME_PROTO_ACCLISTCHANGED, OnAccChanged);
+#ifdef TRIGGERPLUGIN
+ RegisterAction();
+ RegisterTrigger();
+#endif
+ if (ServiceExists(MS_UPDATE_REGISTERFL))
+ CallService(MS_UPDATE_REGISTERFL, 2206, (LPARAM)&pluginInfoEx);
+
+ return 0;
+}
+
+static int Exit(WPARAM wParam, LPARAM lParam)
+{
+#ifdef TRIGGERPLUGIN
+ DeInitTrigger();
+ DeInitAction();
+#endif
+
+ UnhookEvent(hOptionsHook);
+ UnhookEvent(hShutdownHook);
+ UnhookEvent(hAccChangeHook);
+ UnhookEvent(hStatusChangeHook);
+ UnhookEvent(hProtoAckHook);
+ UnhookEvent(hCSStatusChangeHook);
+ UnhookEvent(hCSStatusChangeExHook);
+
+ StopTimer(IDT_CHECKCONN|IDT_PROCESSACK|IDT_AFTERCHECK|IDT_CHECKCONTIN);
+ if (IsWindow(hMessageWindow))
+ DestroyWindow(hMessageWindow);
+
+ connectionSettings.destroy();
+
+ DeleteCriticalSection(&GenTimerCS);
+ DeleteCriticalSection(&GenStatusCS);
+ DeleteCriticalSection(&CheckContinueslyCS);
+ return 0;
+}
diff --git a/plugins/StatusPlugins/KeepStatus/keepstatus.h b/plugins/StatusPlugins/KeepStatus/keepstatus.h
new file mode 100644
index 0000000000..29a92bb80a
--- /dev/null
+++ b/plugins/StatusPlugins/KeepStatus/keepstatus.h
@@ -0,0 +1,138 @@
+/*
+ KeepStatus Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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 __KEEPSTATUS_HEADER
+#define __KEEPSTATUS_HEADER
+
+#include <process.h>
+#include <winsock.h>
+#include <wininet.h>
+#include <ipexport.h>
+#include <m_options.h>
+#include <m_skin.h>
+#include <m_utils.h>
+#include "version.h"
+
+#define __FILENAME "KeepStatus.dll"
+#define MODULENAME "KeepStatus"
+#define SETTING_CHECKCONNECTION "CheckConnection"
+#define SETTING_MAXRETRIES "MaxRetries"
+#define SETTING_INCREASEEXPONENTIAL "IncreaseExponential"
+#define SETTING_INITDELAY "InitDelay"
+#define SETTING_MAXDELAY "MaxDelay"
+#define SETTING_SHOWCONNECTIONPOPUPS "ShowConnectionPopups"
+#define SETTING_CHKINET "CheckInet"
+#define SETTING_CNCOTHERLOC "CancelIfOtherLocation"
+#define SETTING_LOGINERR "OnLoginErr"
+#define SETTING_LOGINERR_DELAY "OnLoginErrDelay"
+#define SETTING_CONTCHECK "ContinueslyCheck"
+#define SETTING_BYPING "ByPingingHost"
+#define SETTING_PINGHOST "HostToPing"
+#define SETTING_CHECKAPMRESUME "CheckAPMResume"
+#define SETTING_FIRSTOFFLINE "FirstOffline"
+#define SETTING_NOLOCKED "NoLocked"
+#define SETTING_MAXCONNECTINGTIME "MaxConnectingTime"
+#define SETTING_PINGCOUNT "PingCount"
+#define DEFAULT_PINGCOUNT 1
+#define SETTING_CNTDELAY "CntDelay"
+#define SETTING_PROTORETRY "Retry" // IRC setting
+#define STATUSCHANGEDELAY 500 // ms
+#define DEFAULT_MAXRETRIES 0
+#define DEFAULT_INITDELAY 10 // s
+#define DEFAULT_MAXDELAY 900 // s
+#define AFTERCHECK_DELAY 10000 //ms (divided by 2)
+#define CHECKCONTIN_DELAY 10 // s
+#define SETTING_POPUP_DELAYTYPE "PopupDelayType"
+#define SETTING_POPUP_USEWINCOLORS "PopupUseWinColors"
+#define SETTING_POPUP_USEDEFCOLORS "PopupUseDefColors"
+#define SETTING_POPUP_BACKCOLOR "PopupBackColor"
+#define SETTING_POPUP_TEXTCOLOR "PopupTextColor"
+#define SETTING_POPUP_TIMEOUT "PopupTimeout"
+#define SETTING_POPUP_LEFTCLICK "PopupLeftClickAction"
+#define SETTING_POPUP_RIGHTCLICK "PopupRightClickAction"
+#define SETTING_PUOTHER "PopupShowOther"
+#define SETTING_PUCONNLOST "PopupShowConnLost"
+#define SETTING_PUCONNRETRY "PopupShowConnRetry"
+#define SETTING_PURESULT "PopupShowResult"
+#define SETTING_PUSHOWEXTRA "PopupShowExtra"
+#define POPUP_ACT_NOTHING 0
+#define POPUP_ACT_CANCEL 1
+#define POPUP_ACT_CLOSEPOPUP 2
+#define POPUP_DELAYFROMPU 0
+#define POPUP_DELAYCUSTOM 1
+#define POPUP_DELAYPERMANENT 2
+#define LOGINERR_NOTHING 0
+#define LOGINERR_CANCEL 1
+#define LOGINERR_SETDELAY 2
+
+#define IDT_PROCESSACK 0x01
+#define IDT_CHECKCONN 0x02
+#define IDT_AFTERCHECK 0x04
+#define IDT_CHECKCONTIN 0x08
+#define IDT_CHECKCONNECTING 0x10
+
+#define KS_ISENABLED WM_APP + 10
+#define KS_ENABLEITEMS WM_APP + 11
+
+// action
+#define SETTING_ENABLECHECKING "EnableChecking"
+// trigger
+#define TRIGGERNAME "KeepStatus: Connection state change"
+#define TRIGGER_CONNLOST 0x01
+#define TRIGGER_LOGINERROR 0x02
+#define TRIGGER_OTHERLOC 0x04
+#define TRIGGER_CONNRETRY 0x08
+#define TRIGGER_CONNSUCCESS 0x10
+#define TRIGGER_CONNGIVEUP 0x20
+#define SETTING_TRIGGERON "TriggerOn"
+
+struct TConnectionSettings : public PROTOCOLSETTINGEX
+{
+ TConnectionSettings( PROTOACCOUNT* pa );
+ ~TConnectionSettings();
+
+ int lastStatusAckTime; // the time the last status ack was received
+};
+
+/* old; replaced by PROTOCOLSETTINGEX see m_statusplugins.h */
+typedef struct {
+ char *szName; // pointer to protocol modulename
+ WORD status; // the status
+ WORD lastStatus;// last status
+} PROTOCOLSETTING;
+
+/* old; replaced by ME_CS_STATUSCHANGE see m_statusplugins.h */
+// wParam = PROTOCOLSETTING**
+// lParam = 0
+#define ME_CS_STATUSCHANGE "CommonStatus/StatusChange"
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// main.cpp
+
+extern HINSTANCE hInst;
+extern HANDLE hMainThread;
+extern unsigned long mainThreadId;
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// keepstatus.cpp
+
+int LoadMainOptions();
+int CALLBACK PopupDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
+
+#endif //__KEEPSTATUS_HEADER
diff --git a/plugins/StatusPlugins/KeepStatus/main.cpp b/plugins/StatusPlugins/KeepStatus/main.cpp
new file mode 100644
index 0000000000..09578aef1a
--- /dev/null
+++ b/plugins/StatusPlugins/KeepStatus/main.cpp
@@ -0,0 +1,138 @@
+/*
+ KeepStatus Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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 "../commonstatus.h"
+#include "keepstatus.h"
+#include "../resource.h"
+
+HANDLE hMainThread = 0;
+unsigned long mainThreadId = 0;
+int hLangpack = 0;
+
+HANDLE hCSModuleLoadedHook = NULL;
+
+HANDLE hConnectionEvent = NULL;
+HANDLE hStopRecon = NULL, hEnableProto = NULL, hIsProtoEnabled = NULL, hAnnounceStat = NULL;
+
+MM_INTERFACE mmi;
+LIST_INTERFACE li;
+
+HINSTANCE hInst;
+PLUGINLINK *pluginLink;
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// dll entry point
+
+BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
+{
+ hInst=hinstDLL;
+ return TRUE;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// returns plugin's extended information
+
+// {A5BB1B7A-B7CD-4cbb-A7DB-CEB4EB71DA49}
+#define MIID_KEEPSTATUS { 0xa5bb1b7a, 0xb7cd, 0x4cbb, { 0xa7, 0xdb, 0xce, 0xb4, 0xeb, 0x71, 0xda, 0x49 } }
+
+PLUGININFOEX pluginInfoEx={
+ sizeof(PLUGININFOEX),
+ #if defined( _UNICODE )
+ __PLUGIN_NAME __PLATFORM_NAME " (Unicode)",
+ #else
+ __PLUGIN_NAME,
+ #endif
+ PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM),
+ __DESC,
+ __AUTHOR,
+ __AUTHOREMAIL,
+ __COPYRIGHT,
+ __AUTHORWEB,
+ UNICODE_AWARE,
+ 0,
+ MIID_KEEPSTATUS
+};
+
+extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
+{
+ return &pluginInfoEx;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// returns plugin's interfaces information
+
+static const MUUID interfaces[] = { MIID_KEEPSTATUS, MIID_LAST };
+
+extern "C" __declspec(dllexport) const MUUID* MirandaPluginInterfaces(void)
+{
+ return interfaces;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// plugin's entry point
+
+int CSModuleLoaded(WPARAM wParam,LPARAM lParam);
+
+INT_PTR StopReconnectingService(WPARAM wParam, LPARAM lParam);
+INT_PTR EnableProtocolService(WPARAM wParam, LPARAM lParam);
+INT_PTR IsProtocolEnabledService(WPARAM wParam, LPARAM lParam);
+INT_PTR AnnounceStatusChangeService(WPARAM wParam, LPARAM lParam);
+
+extern "C" int __declspec(dllexport) Load(PLUGINLINK *link)
+{
+ pluginLink = link;
+ mir_getMMI( &mmi );
+ mir_getLI( &li );
+ mir_getLP( &pluginInfoEx );
+
+ InitCommonStatus();
+
+ hCSModuleLoadedHook = HookEvent(ME_SYSTEM_MODULESLOADED, CSModuleLoaded);
+
+ hConnectionEvent = CreateHookableEvent(ME_KS_CONNECTIONEVENT);
+
+ hStopRecon = CreateServiceFunction(MS_KS_STOPRECONNECTING, StopReconnectingService);
+ hEnableProto = CreateServiceFunction(MS_KS_ENABLEPROTOCOL, EnableProtocolService);
+ hIsProtoEnabled = CreateServiceFunction(MS_KS_ISPROTOCOLENABLED, IsProtocolEnabledService);
+ hAnnounceStat = CreateServiceFunction(MS_KS_ANNOUNCESTATUSCHANGE, AnnounceStatusChangeService);
+
+ DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), GetCurrentProcess(), &hMainThread, THREAD_SET_CONTEXT, FALSE, 0);
+ mainThreadId = GetCurrentThreadId();
+
+ return 0;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// plugin's exit point
+
+extern "C" int __declspec(dllexport) Unload(void)
+{
+ DestroyHookableEvent(hConnectionEvent);
+
+ UnhookEvent(hCSModuleLoadedHook);
+
+ if (hMainThread)
+ CloseHandle(hMainThread);
+ DestroyServiceFunction(hStopRecon);
+ DestroyServiceFunction(hEnableProto);
+ DestroyServiceFunction(hIsProtoEnabled);
+ DestroyServiceFunction(hAnnounceStat);
+
+ return 0;
+}
diff --git a/plugins/StatusPlugins/KeepStatus/options.cpp b/plugins/StatusPlugins/KeepStatus/options.cpp
new file mode 100644
index 0000000000..b434f592ca
--- /dev/null
+++ b/plugins/StatusPlugins/KeepStatus/options.cpp
@@ -0,0 +1,610 @@
+/*
+ KeepStatus Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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 "../commonstatus.h"
+#include "keepstatus.h"
+#include "../resource.h"
+
+static BOOL (WINAPI *pfnEnableThemeDialogTexture)(HANDLE, DWORD) = 0;
+
+// Thanks to TioDuke for cleaning up the ListView handling
+#ifndef ListView_GetCheckState
+#define ListView_GetCheckState(w,i) ((((UINT)(SNDMSG((w),LVM_GETITEMSTATE,(WPARAM)(i),LVIS_STATEIMAGEMASK)))>>12)-1)
+#endif
+#ifndef ListView_SetCheckState
+#define ListView_SetCheckState(w,i,f) ListView_SetItemState(w,i,INDEXTOSTATEIMAGEMASK((f)+1),LVIS_STATEIMAGEMASK)
+#endif
+
+// prototypes
+INT_PTR CALLBACK OptDlgProc(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam);
+INT_PTR CALLBACK PopupOptDlgProc(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam);
+
+static INT_PTR CALLBACK DlgProcKSBasicOpts(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ switch(msg) {
+ case WM_INITDIALOG:
+ TranslateDialogDefault(hwndDlg);
+ {
+ LVCOLUMN lvCol;
+ LVITEM lvItem;
+ HWND hList;
+ int i;
+ DBVARIANT dbv;
+
+ SetDlgItemInt(hwndDlg, IDC_MAXRETRIES, DBGetContactSettingByte(NULL,MODULENAME,SETTING_MAXRETRIES,DEFAULT_MAXRETRIES),FALSE);
+ SetDlgItemInt(hwndDlg, IDC_INITDELAY, DBGetContactSettingDword(NULL,MODULENAME,SETTING_INITDELAY,DEFAULT_INITDELAY),FALSE);
+ CheckDlgButton(hwndDlg, IDC_CHECKCONNECTION, DBGetContactSettingByte(NULL, MODULENAME, SETTING_CHECKCONNECTION,FALSE)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_SHOWCONNECTIONPOPUPS, (DBGetContactSettingByte(NULL, MODULENAME, SETTING_SHOWCONNECTIONPOPUPS,FALSE)&&ServiceExists(MS_POPUP_SHOWMESSAGE))?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CHKINET, DBGetContactSettingByte(NULL, MODULENAME, SETTING_CHKINET, FALSE)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CONTCHECK, DBGetContactSettingByte(NULL, MODULENAME, SETTING_CONTCHECK, FALSE)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_BYPING, DBGetContactSettingByte(NULL, MODULENAME, SETTING_BYPING, FALSE)?BST_CHECKED:BST_UNCHECKED);
+ if (!DBGetContactSetting(NULL, MODULENAME, SETTING_PINGHOST, &dbv))
+ SetDlgItemTextA(hwndDlg, IDC_PINGHOST, dbv.pszVal);
+ // proto list
+ hList = GetDlgItem(hwndDlg,IDC_PROTOCOLLIST);
+ ListView_SetExtendedListViewStyleEx(hList, LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES, LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES);
+ memset(&lvCol,0,sizeof(lvCol));
+ lvCol.mask = LVCF_WIDTH|LVCF_TEXT;
+ lvCol.pszText=TranslateT("Protocol");
+ lvCol.cx = 118;
+ ListView_InsertColumn(hList, 0, &lvCol);
+ // fill the list
+ memset(&lvItem,0,sizeof(lvItem));
+ lvItem.mask=LVIF_TEXT|LVIF_PARAM;
+ lvItem.iItem=0;
+ lvItem.iSubItem=0;
+
+ int count;
+ PROTOACCOUNT** protos;
+ ProtoEnumAccounts( &count, &protos );
+
+ for(i=0;i<count;i++) {
+ if ( !IsSuitableProto( protos[i] ))
+ continue;
+
+ lvItem.pszText = protos[i]->tszAccountName;
+ lvItem.lParam = (LPARAM)protos[i]->szModuleName;
+ ListView_InsertItem(hList,&lvItem);
+
+ char dbSetting[128];
+ _snprintf(dbSetting, sizeof(dbSetting), "%s_enabled", protos[i]->szModuleName);
+ ListView_SetCheckState(hList, lvItem.iItem, DBGetContactSettingByte(NULL, MODULENAME, dbSetting, TRUE));
+ lvItem.iItem++;
+ }
+ EnableWindow(GetDlgItem(hwndDlg, IDC_MAXRETRIES), IsDlgButtonChecked(hwndDlg, IDC_CHECKCONNECTION));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_SHOWCONNECTIONPOPUPS), ServiceExists(MS_POPUP_SHOWMESSAGE)&&IsDlgButtonChecked(hwndDlg, IDC_CHECKCONNECTION));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_INITDELAY), IsDlgButtonChecked(hwndDlg, IDC_CHECKCONNECTION));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_PROTOCOLLIST), IsDlgButtonChecked(hwndDlg, IDC_CHECKCONNECTION));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHKINET), IsDlgButtonChecked(hwndDlg, IDC_CHECKCONNECTION));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CONTCHECK), IsDlgButtonChecked(hwndDlg, IDC_CHECKCONNECTION));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_BYPING), (IsDlgButtonChecked(hwndDlg, IDC_CONTCHECK)&&IsDlgButtonChecked(hwndDlg, IDC_CHECKCONNECTION))?TRUE:FALSE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_PINGHOST), (IsDlgButtonChecked(hwndDlg, IDC_CONTCHECK))&&(IsDlgButtonChecked(hwndDlg, IDC_BYPING)&&IsDlgButtonChecked(hwndDlg, IDC_CHECKCONNECTION))?TRUE:FALSE);
+ }
+ break;
+
+ case WM_COMMAND:
+ if ( ((HIWORD(wParam) == EN_CHANGE) || (HIWORD(wParam) == BN_CLICKED)) && ((HWND)lParam == GetFocus()) )
+ SendMessage(GetParent(hwndDlg),PSM_CHANGED,0,0);
+ // something changed
+ switch (LOWORD(wParam)) {
+ case IDC_CHECKCONNECTION:
+ case IDC_CONTCHECK:
+ case IDC_BYPING:
+ EnableWindow(GetDlgItem(hwndDlg, IDC_MAXRETRIES), SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_SHOWCONNECTIONPOPUPS), ServiceExists(MS_POPUP_SHOWMESSAGE)&&SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_INITDELAY), SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_PROTOCOLLIST), SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHKINET), SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CONTCHECK), SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_BYPING), (IsDlgButtonChecked(hwndDlg, IDC_CONTCHECK)&&SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0))?TRUE:FALSE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_PINGHOST), (IsDlgButtonChecked(hwndDlg, IDC_CONTCHECK))&&(IsDlgButtonChecked(hwndDlg, IDC_BYPING)&&SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0))?TRUE:FALSE);
+ break;
+ }
+ break;
+
+ case WM_NOTIFY:
+ if (((NMHDR*)lParam)->idFrom == IDC_PROTOCOLLIST) {
+ switch(((NMHDR*)lParam)->code) {
+ case LVN_ITEMCHANGED:
+ {
+ NMLISTVIEW *nmlv = (NMLISTVIEW *)lParam;
+ if (IsWindowVisible(GetDlgItem(hwndDlg,IDC_PROTOCOLLIST)) && ((nmlv->uNewState^nmlv->uOldState)&LVIS_STATEIMAGEMASK))
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ }
+ break;
+ } }
+
+ if (((LPNMHDR)lParam)->code == PSN_APPLY) {
+ int i;
+ LVITEM lvItem;
+ HWND hList;
+
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_MAXRETRIES, (BYTE)GetDlgItemInt(hwndDlg,IDC_MAXRETRIES, NULL, FALSE));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_CHECKCONNECTION, (BYTE)SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_SHOWCONNECTIONPOPUPS, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_SHOWCONNECTIONPOPUPS));
+ DBWriteContactSettingDword(NULL, MODULENAME, SETTING_INITDELAY, (DWORD)GetDlgItemInt(hwndDlg,IDC_INITDELAY, NULL, FALSE));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_CHKINET, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_CHKINET));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_CONTCHECK, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_CONTCHECK));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_BYPING, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_BYPING));
+ if (IsDlgButtonChecked(hwndDlg, IDC_BYPING)) {
+ int len;
+ char *host;
+
+ len = SendDlgItemMessage(hwndDlg, IDC_PINGHOST, WM_GETTEXTLENGTH, 0, 0);
+ if (len > 0) {
+ host = ( char* )malloc(len+1);
+ if (host != NULL) {
+ memset(host, '\0', len+1);
+ GetDlgItemTextA(hwndDlg, IDC_PINGHOST, host, len+1);
+ DBWriteContactSettingString(NULL, MODULENAME, SETTING_PINGHOST, host);
+ }
+ }
+ }
+ hList = GetDlgItem(hwndDlg,IDC_PROTOCOLLIST);
+ memset(&lvItem,0,sizeof(lvItem));
+ lvItem.mask=LVIF_PARAM;
+ for (i=0;i<ListView_GetItemCount(hList);i++) {
+ lvItem.iItem=i;
+ lvItem.iSubItem=0;
+ ListView_GetItem(hList, &lvItem);
+
+ char dbSetting[128];
+ _snprintf(dbSetting, sizeof(dbSetting), "%s_enabled", (char *)lvItem.lParam);
+ DBWriteContactSettingByte(NULL, MODULENAME, dbSetting, (BYTE)ListView_GetCheckState(hList, lvItem.iItem));
+ }
+ }
+ break;
+ }
+
+ return 0;
+}
+
+static INT_PTR CALLBACK DlgProcKSAdvOpts(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ switch(msg) {
+ case WM_INITDIALOG: {
+ TranslateDialogDefault(hwndDlg);
+ SetDlgItemInt(hwndDlg, IDC_MAXDELAY, DBGetContactSettingDword(NULL,MODULENAME,SETTING_MAXDELAY,DEFAULT_MAXDELAY),FALSE);
+ SetDlgItemInt(hwndDlg, IDC_MAXCONNECTINGTIME, DBGetContactSettingDword(NULL,MODULENAME,SETTING_MAXCONNECTINGTIME,0),FALSE);
+ CheckDlgButton(hwndDlg, IDC_INCREASEEXPONENTIAL, DBGetContactSettingByte(NULL, MODULENAME, SETTING_INCREASEEXPONENTIAL,FALSE)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CNCOTHERLOC, (DBGetContactSettingByte(NULL, MODULENAME, SETTING_CNCOTHERLOC, FALSE)&&(CallService(MS_SYSTEM_GETVERSION,0,0) >= 0x00040000))?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_LOGINERR, DBGetContactSettingByte(NULL, MODULENAME, SETTING_LOGINERR, LOGINERR_NOTHING)==LOGINERR_NOTHING?FALSE:TRUE);
+ CheckDlgButton(hwndDlg, IDC_CHECKAPMRESUME, (DBGetContactSettingByte(NULL, MODULENAME, SETTING_CHECKAPMRESUME, FALSE)&&(CallService(MS_SYSTEM_GETVERSION,0,0) >= 0x00040000))?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_FIRSTOFFLINE, (DBGetContactSettingByte(NULL, MODULENAME, SETTING_FIRSTOFFLINE, FALSE)));
+ CheckDlgButton(hwndDlg, IDC_NOLOCKED, (DBGetContactSettingByte(NULL, MODULENAME, SETTING_NOLOCKED, FALSE)));
+ SetDlgItemInt(hwndDlg, IDC_LOGINERR_DELAY, DBGetContactSettingDword(NULL, MODULENAME, SETTING_LOGINERR_DELAY, DEFAULT_MAXDELAY), FALSE);
+ SetDlgItemInt(hwndDlg, IDC_PINGCOUNT, DBGetContactSettingWord(NULL, MODULENAME, SETTING_PINGCOUNT, DEFAULT_PINGCOUNT), FALSE);
+ SetDlgItemInt(hwndDlg, IDC_CNTDELAY, DBGetContactSettingDword(NULL, MODULENAME, SETTING_CNTDELAY, CHECKCONTIN_DELAY), FALSE);
+ switch (DBGetContactSettingByte(NULL, MODULENAME, SETTING_LOGINERR, LOGINERR_CANCEL)) {
+ case LOGINERR_SETDELAY:
+ CheckRadioButton(hwndDlg, IDC_LOGINERR_CANCEL, IDC_LOGINERR_SETDELAY, IDC_LOGINERR_SETDELAY);
+ break;
+ default:
+ case LOGINERR_CANCEL:
+ CheckRadioButton(hwndDlg, IDC_LOGINERR_CANCEL, IDC_LOGINERR_SETDELAY, IDC_LOGINERR_CANCEL);
+ break;
+ }
+ SendMessage(hwndDlg, KS_ENABLEITEMS, 0, 0);
+ break;
+ }
+ case WM_COMMAND:
+ if ( ((HIWORD(wParam) == EN_CHANGE) || (HIWORD(wParam) == BN_CLICKED)) && ((HWND)lParam == GetFocus()) )
+ SendMessage(GetParent(hwndDlg),PSM_CHANGED,0,0);
+ // something changed
+ switch (LOWORD(wParam)) {
+ case IDC_INCREASEEXPONENTIAL:
+ case IDC_LOGINERR:
+ SendMessage(hwndDlg, KS_ENABLEITEMS, 0, 0);
+ break;
+
+ case IDC_LOGINERR_CANCEL:
+ case IDC_LOGINERR_SETDELAY:
+ CheckRadioButton(hwndDlg, IDC_LOGINERR_CANCEL, IDC_LOGINERR_SETDELAY, LOWORD(wParam));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_LOGINERR_DELAY), IsDlgButtonChecked(hwndDlg, IDC_LOGINERR_SETDELAY)&&IsDlgButtonChecked(hwndDlg, IDC_LOGINERR)&&SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0));
+ break;
+ }
+ break;
+
+ case WM_NOTIFY:
+ if (((LPNMHDR)lParam)->code == PSN_APPLY) {
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_INCREASEEXPONENTIAL, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_INCREASEEXPONENTIAL));
+ DBWriteContactSettingDword(NULL, MODULENAME, SETTING_MAXDELAY, (DWORD)GetDlgItemInt(hwndDlg,IDC_MAXDELAY, NULL, FALSE));
+ DBWriteContactSettingDword(NULL, MODULENAME, SETTING_MAXCONNECTINGTIME, (DWORD)GetDlgItemInt(hwndDlg,IDC_MAXCONNECTINGTIME, NULL, FALSE));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_FIRSTOFFLINE, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_FIRSTOFFLINE));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_NOLOCKED, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_NOLOCKED));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_CNCOTHERLOC, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_CNCOTHERLOC));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_LOGINERR, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_LOGINERR));
+ if (IsDlgButtonChecked(hwndDlg, IDC_LOGINERR)) {
+ if (IsDlgButtonChecked(hwndDlg, IDC_LOGINERR_SETDELAY)) {
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_LOGINERR, LOGINERR_SETDELAY);
+ DBWriteContactSettingDword(NULL, MODULENAME, SETTING_LOGINERR_DELAY, GetDlgItemInt(hwndDlg, IDC_LOGINERR_DELAY, NULL, FALSE));
+ }
+ else DBWriteContactSettingByte(NULL, MODULENAME, SETTING_LOGINERR, LOGINERR_CANCEL);
+ }
+ else DBWriteContactSettingByte(NULL, MODULENAME, SETTING_LOGINERR, LOGINERR_NOTHING);
+
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_CHECKAPMRESUME, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_CHECKAPMRESUME));
+ DBWriteContactSettingWord(NULL, MODULENAME, SETTING_PINGCOUNT, (WORD)GetDlgItemInt(hwndDlg,IDC_PINGCOUNT, NULL, FALSE));
+ DBWriteContactSettingDword(NULL, MODULENAME, SETTING_CNTDELAY, (DWORD)GetDlgItemInt(hwndDlg,IDC_CNTDELAY, NULL, FALSE)==0?CHECKCONTIN_DELAY:GetDlgItemInt(hwndDlg,IDC_CNTDELAY, NULL, FALSE));
+ }
+ break;
+
+ case KS_ENABLEITEMS:
+ EnableWindow(GetDlgItem(hwndDlg, IDC_INCREASEEXPONENTIAL), SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_MAXCONNECTINGTIME), SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CNCOTHERLOC), SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0)&&(CallService(MS_SYSTEM_GETVERSION,0,0) >= 0x00040000));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_LOGINERR), SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_LOGINERR_SETDELAY), IsDlgButtonChecked(hwndDlg, IDC_LOGINERR)&&SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_LOGINERR_DELAY), IsDlgButtonChecked(hwndDlg, IDC_LOGINERR_SETDELAY)&&IsDlgButtonChecked(hwndDlg, IDC_LOGINERR)&&SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_LOGINERR_CANCEL), IsDlgButtonChecked(hwndDlg, IDC_LOGINERR)&&SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_MAXDELAY), (IsDlgButtonChecked(hwndDlg, IDC_INCREASEEXPONENTIAL)&&SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0))?TRUE:FALSE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHECKAPMRESUME), SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0)&&(CallService(MS_SYSTEM_GETVERSION,0,0) >= 0x00040000));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_FIRSTOFFLINE), SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_NOLOCKED), SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CHECKCONNECTION, 0));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_PINGCOUNT), SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_BYPING, 0));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CNTDELAY), SendMessage(GetParent(hwndDlg), KS_ISENABLED, (WPARAM)IDC_CONTCHECK, 0));
+ break;
+
+ case WM_SHOWWINDOW:
+ if (wParam)
+ SendMessage(hwndDlg, KS_ENABLEITEMS, 0, 0);
+
+ break;
+ }
+
+ return 0;
+}
+
+static INT_PTR CALLBACK DlgProcKsTabs(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ static HWND hBasicTab;
+
+ switch(msg) {
+ case WM_INITDIALOG:
+ {
+ int tabCount;
+ HWND hTab, hShow, hPage;
+ TCITEM tci;
+ RECT rcTabs, rcOptions, rcPage;
+
+ TranslateDialogDefault(hwndDlg);
+
+ // set tabs
+ tabCount = 0;
+ hTab = GetDlgItem(hwndDlg, IDC_TABS);
+ GetWindowRect(hTab, &rcTabs);
+ GetWindowRect(hwndDlg, &rcOptions);
+ ZeroMemory(&tci, sizeof(TCITEM));
+
+ // basic tab
+ tci.mask = TCIF_TEXT|TCIF_PARAM;
+ tci.pszText = TranslateT("Basic");
+ hShow = hBasicTab = hPage = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_OPT_KS_BASIC), hwndDlg, DlgProcKSBasicOpts, (LPARAM)GetParent(hwndDlg));
+ if (pfnEnableThemeDialogTexture)
+ pfnEnableThemeDialogTexture(hPage, ETDT_ENABLETAB);
+
+ tci.lParam = (LPARAM)hPage;
+ GetClientRect(hPage, &rcPage);
+ MoveWindow(hPage, (rcTabs.left - rcOptions.left) + ((rcTabs.right-rcTabs.left)-(rcPage.right-rcPage.left))/2, 10 + (rcTabs.top - rcOptions.top) + ((rcTabs.bottom-rcTabs.top)-(rcPage.bottom-rcPage.top))/2, rcPage.right-rcPage.left, rcPage.bottom-rcPage.top, TRUE);
+ ShowWindow(hPage, SW_HIDE);
+ TabCtrl_InsertItem(hTab, tabCount++, &tci);
+
+ // advanced tab
+ tci.mask = TCIF_TEXT|TCIF_PARAM;
+ tci.pszText = TranslateT("Advanced");
+ hPage = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_OPT_KS_ADV), hwndDlg, DlgProcKSAdvOpts, (LPARAM)GetParent(hwndDlg));
+ if (pfnEnableThemeDialogTexture) {
+ pfnEnableThemeDialogTexture(hPage, ETDT_ENABLETAB);
+ }
+ tci.lParam = (LPARAM)hPage;
+ GetClientRect(hPage, &rcPage);
+ MoveWindow(hPage, (rcTabs.left - rcOptions.left) + ((rcTabs.right-rcTabs.left)-(rcPage.right-rcPage.left))/2, 10 + (rcTabs.top - rcOptions.top) + ((rcTabs.bottom-rcTabs.top)-(rcPage.bottom-rcPage.top))/2, rcPage.right-rcPage.left, rcPage.bottom-rcPage.top, TRUE);
+ ShowWindow(hPage, SW_HIDE);
+ TabCtrl_InsertItem(hTab, tabCount++, &tci);
+ ShowWindow(hShow, SW_SHOW);
+ }
+ break;
+
+ case KS_ISENABLED:
+ SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, (LPARAM)IsDlgButtonChecked(hBasicTab, wParam));
+ return TRUE;
+
+ case PSM_CHANGED:
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+
+ case WM_NOTIFY:
+ if ( (((NMHDR*)lParam)->idFrom == IDC_TABS) ) {
+ if (((NMHDR*)lParam)->code == TCN_SELCHANGING) {
+ TCITEM tci;
+
+ tci.mask = TCIF_PARAM;
+ TabCtrl_GetItem(GetDlgItem(hwndDlg, IDC_TABS), TabCtrl_GetCurSel(GetDlgItem(hwndDlg, IDC_TABS)), &tci);
+ ShowWindow((HWND)tci.lParam, SW_HIDE);
+ }
+ else if (((NMHDR*)lParam)->code == TCN_SELCHANGE) {
+ TCITEM tci;
+
+ tci.mask = TCIF_PARAM;
+ TabCtrl_GetItem(GetDlgItem(hwndDlg, IDC_TABS), TabCtrl_GetCurSel(GetDlgItem(hwndDlg, IDC_TABS)), &tci);
+ ShowWindow((HWND)tci.lParam, SW_SHOW);
+ }
+ }
+ if (((LPNMHDR)lParam)->code == PSN_APPLY) {
+ TCITEM tci;
+ int i, count;
+
+ tci.mask = TCIF_PARAM;
+ count = TabCtrl_GetItemCount(GetDlgItem(hwndDlg, IDC_TABS));
+ for (i=0;i<count;i++) {
+ TabCtrl_GetItem(GetDlgItem(hwndDlg,IDC_TABS), i, &tci);
+ SendMessage((HWND)tci.lParam, WM_NOTIFY, 0, lParam);
+ }
+ // let main reload options
+ LoadMainOptions();
+ }
+ break;
+ }
+
+ return FALSE;
+}
+
+INT_PTR CALLBACK PopupOptDlgProc(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ static bool bFreeze = false;
+
+ switch(msg) {
+ case WM_INITDIALOG:
+ TranslateDialogDefault(hwndDlg);
+
+ bFreeze = true;
+
+ // left action
+ switch ( DBGetContactSettingByte( NULL, MODULENAME, SETTING_POPUP_LEFTCLICK, POPUP_ACT_CANCEL )) {
+ case POPUP_ACT_CLOSEPOPUP:
+ CheckDlgButton(hwndDlg, IDC_LCLOSE, BST_CHECKED);
+ break;
+
+ case POPUP_ACT_CANCEL:
+ CheckDlgButton(hwndDlg, IDC_LCANCEL, BST_CHECKED);
+ break;
+
+ case POPUP_ACT_NOTHING:
+ default:
+ CheckDlgButton(hwndDlg, IDC_LNOTHING, BST_CHECKED);
+ break;
+ }
+ // right action
+ switch ( DBGetContactSettingByte( NULL, MODULENAME, SETTING_POPUP_RIGHTCLICK, POPUP_ACT_CANCEL )) {
+ case POPUP_ACT_CLOSEPOPUP:
+ CheckDlgButton(hwndDlg, IDC_RCLOSE, BST_CHECKED);
+ break;
+
+ case POPUP_ACT_CANCEL:
+ CheckDlgButton(hwndDlg, IDC_RCANCEL, BST_CHECKED);
+ break;
+
+ case POPUP_ACT_NOTHING:
+ default:
+ CheckDlgButton(hwndDlg, IDC_RNOTHING, BST_CHECKED);
+ break;
+ }
+ // delay
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DELAYCUSTOM), ServiceExists(MS_POPUP_ADDPOPUPEX));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DELAYFROMPU), ServiceExists(MS_POPUP_ADDPOPUPEX));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DELAYPERMANENT), ServiceExists(MS_POPUP_ADDPOPUPEX));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DELAY), ServiceExists(MS_POPUP_ADDPOPUPEX));
+ switch (DBGetContactSettingByte(NULL, MODULENAME, SETTING_POPUP_DELAYTYPE, POPUP_DELAYFROMPU)) {
+ case POPUP_DELAYCUSTOM:
+ CheckDlgButton(hwndDlg, IDC_DELAYCUSTOM, BST_CHECKED);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DELAY), ServiceExists(MS_POPUP_ADDPOPUPEX));
+ break;
+
+ case POPUP_DELAYPERMANENT:
+ CheckDlgButton(hwndDlg, IDC_DELAYPERMANENT, BST_CHECKED);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DELAY), FALSE);
+ break;
+
+ case POPUP_DELAYFROMPU:
+ default:
+ CheckDlgButton(hwndDlg, IDC_DELAYFROMPU, BST_CHECKED);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DELAY), FALSE);
+ break;
+ }
+ // delay
+ SetDlgItemInt(hwndDlg,IDC_DELAY, DBGetContactSettingDword(NULL, MODULENAME, SETTING_POPUP_TIMEOUT, 0), FALSE);
+ // back color
+ SendDlgItemMessage(hwndDlg,IDC_BGCOLOR,CPM_SETCOLOUR,0,DBGetContactSettingDword(NULL, MODULENAME, SETTING_POPUP_BACKCOLOR, 0xAAAAAA));
+ // text
+ SendDlgItemMessage(hwndDlg,IDC_TEXTCOLOR,CPM_SETCOLOUR,0,DBGetContactSettingDword(NULL, MODULENAME, SETTING_POPUP_TEXTCOLOR, 0x0000CC));
+ // wincolors
+ CheckDlgButton(hwndDlg, IDC_WINCOLORS, DBGetContactSettingByte(NULL, MODULENAME, SETTING_POPUP_USEWINCOLORS, 0));
+ // defaultcolors
+ CheckDlgButton(hwndDlg, IDC_DEFAULTCOLORS, ( (DBGetContactSettingByte(NULL, MODULENAME, SETTING_POPUP_USEDEFCOLORS, 0)) && (!IsDlgButtonChecked(hwndDlg, IDC_WINCOLORS)) ));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_BGCOLOR), ((!IsDlgButtonChecked(hwndDlg, IDC_WINCOLORS)) && (!IsDlgButtonChecked(hwndDlg, IDC_DEFAULTCOLORS))));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_TEXTCOLOR), ((!IsDlgButtonChecked(hwndDlg, IDC_WINCOLORS)) && (!IsDlgButtonChecked(hwndDlg, IDC_DEFAULTCOLORS))));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DEFAULTCOLORS), (!IsDlgButtonChecked(hwndDlg, IDC_WINCOLORS)));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_WINCOLORS), (!IsDlgButtonChecked(hwndDlg, IDC_DEFAULTCOLORS)));
+ // popup types
+ CheckDlgButton(hwndDlg, IDC_PUCONNLOST, DBGetContactSettingByte(NULL, MODULENAME, SETTING_PUCONNLOST, TRUE)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_PUOTHER, DBGetContactSettingByte(NULL, MODULENAME, SETTING_PUOTHER, TRUE)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_PUCONNRETRY, DBGetContactSettingByte(NULL, MODULENAME, SETTING_PUCONNRETRY, TRUE)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_PURESULT, DBGetContactSettingByte(NULL, MODULENAME, SETTING_PURESULT, TRUE)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_PUSHOWEXTRA, DBGetContactSettingByte(NULL, MODULENAME, SETTING_PUSHOWEXTRA, TRUE)?BST_CHECKED:BST_UNCHECKED);
+ bFreeze = false;
+ break;
+
+ case WM_COMMAND:
+ switch (LOWORD(wParam)) {
+ case IDC_WINCOLORS:
+ case IDC_DEFAULTCOLORS:
+ EnableWindow(GetDlgItem(hwndDlg, IDC_BGCOLOR), ((!IsDlgButtonChecked(hwndDlg, IDC_WINCOLORS)) && (!IsDlgButtonChecked(hwndDlg, IDC_DEFAULTCOLORS))));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_TEXTCOLOR), ((!IsDlgButtonChecked(hwndDlg, IDC_WINCOLORS)) && (!IsDlgButtonChecked(hwndDlg, IDC_DEFAULTCOLORS))));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DEFAULTCOLORS), (!IsDlgButtonChecked(hwndDlg, IDC_WINCOLORS)));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_WINCOLORS), (!IsDlgButtonChecked(hwndDlg, IDC_DEFAULTCOLORS)));
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+
+ case IDC_DELAYFROMPU:
+ case IDC_DELAYPERMANENT:
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DELAY), FALSE);
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+
+ case IDC_DELAYCUSTOM:
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DELAY), TRUE);
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+
+ case IDC_BGCOLOR:
+ case IDC_TEXTCOLOR:
+ case IDC_DELAY:
+ case IDC_LNOTHING:
+ case IDC_LCLOSE:
+ case IDC_LCANCEL:
+ case IDC_RNOTHING:
+ case IDC_RCLOSE:
+ case IDC_RCANCEL:
+ case IDC_PUCONNLOST:
+ case IDC_PUOTHER:
+ case IDC_PUCONNRETRY:
+ case IDC_PURESULT:
+ case IDC_PUSHOWEXTRA:
+ if ( !bFreeze )
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+
+ case IDC_PREV:
+ {
+ POPUPDATAEX ppd = { NULL };
+
+ ppd.lchContact = NULL;
+ ppd.lchIcon = (HICON)CallService(MS_SKIN_LOADICON, (WPARAM)SKINICON_STATUS_OFFLINE, 0);
+ strcpy( ppd.lpzContactName, Translate("KeepStatus") );
+ strcpy( ppd.lpzText, Translate("You broke the Internet!") );
+ if (IsDlgButtonChecked(hwndDlg, IDC_WINCOLORS))
+ ppd.colorBack = GetSysColor(COLOR_BTNFACE);
+ else if (IsDlgButtonChecked(hwndDlg, IDC_DEFAULTCOLORS))
+ ppd.colorBack = (COLORREF)NULL;
+ else
+ ppd.colorBack = SendDlgItemMessage(hwndDlg,IDC_BGCOLOR,CPM_GETCOLOUR,0,0);
+ if (IsDlgButtonChecked(hwndDlg, IDC_WINCOLORS))
+ ppd.colorText = GetSysColor(COLOR_WINDOWTEXT);
+ else if (IsDlgButtonChecked(hwndDlg, IDC_DEFAULTCOLORS))
+ ppd.colorText = (COLORREF)NULL;
+ else
+ ppd.colorText = SendDlgItemMessage(hwndDlg,IDC_TEXTCOLOR,CPM_GETCOLOUR,0,0);
+ ppd.PluginWindowProc = ( WNDPROC )PopupDlgProc;
+ ppd.PluginData = NULL;
+ if (!ServiceExists(MS_POPUP_ADDPOPUPEX))
+ CallService(MS_POPUP_ADDPOPUP, (WPARAM)&ppd, 0);
+ else {
+ if (IsDlgButtonChecked(hwndDlg, IDC_DELAYFROMPU))
+ ppd.iSeconds = 0;
+ else if (IsDlgButtonChecked(hwndDlg, IDC_DELAYCUSTOM))
+ ppd.iSeconds = GetDlgItemInt(hwndDlg, IDC_DELAY, NULL, FALSE);
+ else if (IsDlgButtonChecked(hwndDlg, IDC_DELAYPERMANENT))
+ ppd.iSeconds = -1;
+ CallService(MS_POPUP_ADDPOPUPEX, (WPARAM)&ppd, 0);
+ }
+ }
+ break;
+ }
+ break;
+
+ case WM_NOTIFY:
+ if (((LPNMHDR)lParam)->code == PSN_APPLY) {
+ // left action
+ if (IsDlgButtonChecked(hwndDlg, IDC_LNOTHING))
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_POPUP_LEFTCLICK, POPUP_ACT_NOTHING);
+ else if (IsDlgButtonChecked(hwndDlg, IDC_LCLOSE))
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_POPUP_LEFTCLICK, POPUP_ACT_CLOSEPOPUP);
+ else if (IsDlgButtonChecked(hwndDlg, IDC_LCANCEL))
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_POPUP_LEFTCLICK, POPUP_ACT_CANCEL);
+ // right action
+ if (IsDlgButtonChecked(hwndDlg, IDC_RNOTHING))
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_POPUP_RIGHTCLICK, POPUP_ACT_NOTHING);
+ else if (IsDlgButtonChecked(hwndDlg, IDC_RCLOSE))
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_POPUP_RIGHTCLICK, POPUP_ACT_CLOSEPOPUP);
+ else if (IsDlgButtonChecked(hwndDlg, IDC_RCANCEL))
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_POPUP_RIGHTCLICK, POPUP_ACT_CANCEL);
+ // delay
+ if (IsDlgButtonChecked(hwndDlg, IDC_DELAYFROMPU))
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_POPUP_DELAYTYPE, POPUP_DELAYFROMPU);
+ else if (IsDlgButtonChecked(hwndDlg, IDC_DELAYCUSTOM))
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_POPUP_DELAYTYPE, POPUP_DELAYCUSTOM);
+ else if (IsDlgButtonChecked(hwndDlg, IDC_DELAYPERMANENT))
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_POPUP_DELAYTYPE, POPUP_DELAYPERMANENT);
+ // delay
+ DBWriteContactSettingDword(NULL, MODULENAME, SETTING_POPUP_TIMEOUT, GetDlgItemInt(hwndDlg,IDC_DELAY, NULL, FALSE));
+ // back color
+ DBWriteContactSettingDword(NULL, MODULENAME, SETTING_POPUP_BACKCOLOR, SendDlgItemMessage(hwndDlg,IDC_BGCOLOR,CPM_GETCOLOUR,0,0));
+ // text color
+ DBWriteContactSettingDword(NULL, MODULENAME, SETTING_POPUP_TEXTCOLOR, SendDlgItemMessage(hwndDlg,IDC_TEXTCOLOR,CPM_GETCOLOUR,0,0));
+ // use win
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_POPUP_USEWINCOLORS, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_WINCOLORS));
+ // use def
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_POPUP_USEDEFCOLORS, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_DEFAULTCOLORS));
+ // store types
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_PUCONNLOST, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_PUCONNLOST));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_PUOTHER, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_PUOTHER));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_PUCONNRETRY, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_PUCONNRETRY));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_PURESULT, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_PURESULT));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_PUSHOWEXTRA, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_PUSHOWEXTRA));
+ }
+ break;
+ }
+
+ return 0;
+}
+
+int OptionsInit(WPARAM wparam,LPARAM lparam)
+{
+ if ( IsWinVerXPPlus()) {
+ HMODULE hUxTheme = GetModuleHandle(_T("uxtheme.dll"));
+ if (hUxTheme)
+ pfnEnableThemeDialogTexture = (BOOL (WINAPI *)(HANDLE, DWORD))GetProcAddress(hUxTheme, "EnableThemeDialogTexture");
+ }
+
+ OPTIONSDIALOGPAGE odp = { 0 };
+ odp.cbSize = sizeof(odp);
+ odp.hInstance = hInst;
+ odp.pszGroup = LPGEN("Status");
+ odp.pszTitle = LPGEN("KeepStatus");
+ odp.flags = ODPF_BOLDGROUPS;
+
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_TABS);
+ odp.pfnDlgProc = DlgProcKsTabs;
+ CallService(MS_OPT_ADDPAGE,wparam,(LPARAM)&odp);
+
+ if ( ServiceExists( MS_POPUP_ADDPOPUP )) {
+ ZeroMemory(&odp,sizeof(odp));
+ odp.cbSize = sizeof(odp);
+ odp.position = 150000000;
+ odp.pszGroup = LPGEN("PopUps");
+ odp.groupPosition = 910000000;
+ odp.hInstance = hInst;
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_PUOPT_KEEPSTATUS);
+ odp.pszTitle = LPGEN("KeepStatus");
+ odp.pfnDlgProc = PopupOptDlgProc;
+ odp.flags = ODPF_BOLDGROUPS;
+ CallService(MS_OPT_ADDPAGE,wparam,(LPARAM)&odp);
+ }
+
+ return 0;
+}
diff --git a/plugins/StatusPlugins/KeepStatus/pack.cmd b/plugins/StatusPlugins/KeepStatus/pack.cmd
new file mode 100644
index 0000000000..fac897d0fe
--- /dev/null
+++ b/plugins/StatusPlugins/KeepStatus/pack.cmd
@@ -0,0 +1,44 @@
+@echo off
+set PluginName=KeepStatus
+nmake -f %PluginName%.mak CFG="%PluginName% - Win32 Release"
+nmake -f %PluginName%.mak CFG="%PluginName% - Win32 Release Unicode"
+if errorlevel 1 (
+ echo "Make failed"
+ goto :eof )
+
+del "%temp%\%PluginName%.zip" > nul
+del "%temp%\%PluginName%W.zip" > nul
+del "%temp%\%PluginName%Src.zip" > nul
+del *.user > nul
+
+rd /S /Q Release
+rd /S /Q Release_Unicode
+
+for /F "tokens=1-6 delims=, " %%i in (buildnumber.h) do call :Translate %%i %%j %%k %%l %%m %%n
+
+"%PROGRAMFILES%\7-zip\7z.exe" a -tzip -r- -mx=9 "%temp%\%PluginName%.zip" ../../../bin/Release/Plugins/%PluginName%.dll ../statusplugins-translation.txt ../m_statusplugins.h
+del ../../../bin/Release/Plugins/%PluginName%.dll >nul
+
+"%PROGRAMFILES%\7-zip\7z.exe" a -tzip -r- -mx=9 "%temp%\%PluginName%W.zip" "../../../bin/Release Unicode/Plugins/%PluginName%.dll" ../statusplugins-translation.txt ../m_statusplugins.h
+del "../../../bin/Release Unicode/Plugins/%PluginName%.dll" >nul
+
+if exist "%PROGRAMFILES%\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe" (
+ "%PROGRAMFILES%\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe" KeepStatus_9.vcproj /Build "Release Unicode|x64"
+ copy "Release Unicode64\Plugins\%PluginName%.dll" .
+ "%PROGRAMFILES%\7-zip\7z.exe" a -tzip -r0 -mx=9 "%temp%\%PluginName%64.zip" %PluginName%.dll ../statusplugins-translation.txt ../m_statusplugins.h
+ del %PluginName%.dll
+ rd /S /Q "Release Unicode64"
+ )
+
+cd ../..
+"%PROGRAMFILES%\7-zip\7z.exe" a -tzip -r0 -mx=9 "%temp%\%PluginName%Src.zip" -ir!helpers/*.* -ir!StatusPlugins/*.* -ir!NewTriggerPlugin/*.* -xr!StatusPlugins/AdvancedAutoAway/* -xr!StatusPlugins/StartupStatus/* -xr!.svn -x!*.cmd
+
+goto :eof
+
+:Translate
+if %2 == __FILEVERSION_STRING (
+ pushd ..
+ perl lpgen.pl status version %3 %4 %5 %6
+ popd)
+
+goto :eof
diff --git a/plugins/StatusPlugins/KeepStatus/trigger_keepstatus.cpp b/plugins/StatusPlugins/KeepStatus/trigger_keepstatus.cpp
new file mode 100644
index 0000000000..adbc8716c8
--- /dev/null
+++ b/plugins/StatusPlugins/KeepStatus/trigger_keepstatus.cpp
@@ -0,0 +1,181 @@
+/*
+ KeepStatus Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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 "../commonstatus.h"
+#include "keepstatus.h"
+#include "../resource.h"
+#include <m_trigger.h>
+
+extern HINSTANCE hInst;
+static HANDLE hKeepStatusHook;
+
+static INT_PTR CALLBACK DlgProcOptsTriggerKeepStatus(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) {
+
+ switch (msg) {
+ case WM_INITDIALOG:
+ TranslateDialogDefault(hwndDlg);
+ {
+ /* lParam = (LPARAM)(DWORD)triggerID, or 0 if this is a new trigger */
+ DWORD triggerID = (DWORD)lParam;
+ CheckDlgButton(hwndDlg, IDC_CONNLOST, (DBGetTriggerSettingWord(triggerID, NULL, MODULENAME, SETTING_TRIGGERON, 0)&TRIGGER_CONNLOST)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_LOGINERROR, (DBGetTriggerSettingWord(triggerID, NULL, MODULENAME, SETTING_TRIGGERON, 0)&TRIGGER_LOGINERROR)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_OTHERLOC, (DBGetTriggerSettingWord(triggerID, NULL, MODULENAME, SETTING_TRIGGERON, 0)&TRIGGER_OTHERLOC)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CONNRETRY, (DBGetTriggerSettingWord(triggerID, NULL, MODULENAME, SETTING_TRIGGERON, 0)&TRIGGER_CONNRETRY)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CONNSUCCESS, (DBGetTriggerSettingWord(triggerID, NULL, MODULENAME, SETTING_TRIGGERON, 0)&TRIGGER_CONNSUCCESS)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CONNGIVEUP, (DBGetTriggerSettingWord(triggerID, NULL, MODULENAME, SETTING_TRIGGERON, 0)&TRIGGER_CONNGIVEUP)?BST_CHECKED:BST_UNCHECKED);
+ break;
+ }
+
+ case WM_COMMAND:
+ break;
+
+ case TM_ADDTRIGGER:
+ {
+ // wParam = (WPARAM)(DWORD)triggerID
+ DWORD triggerID;
+ int flags;
+
+ triggerID = (DWORD)wParam;
+ flags = 0;
+ flags |= IsDlgButtonChecked(hwndDlg, IDC_CONNLOST)?TRIGGER_CONNLOST:0;
+ flags |= IsDlgButtonChecked(hwndDlg, IDC_LOGINERROR)?TRIGGER_LOGINERROR:0;
+ flags |= IsDlgButtonChecked(hwndDlg, IDC_OTHERLOC)?TRIGGER_OTHERLOC:0;
+ flags |= IsDlgButtonChecked(hwndDlg, IDC_CONNRETRY)?TRIGGER_CONNRETRY:0;
+ flags |= IsDlgButtonChecked(hwndDlg, IDC_CONNSUCCESS)?TRIGGER_CONNSUCCESS:0;
+ flags |= IsDlgButtonChecked(hwndDlg, IDC_CONNGIVEUP)?TRIGGER_CONNGIVEUP:0;
+ DBWriteTriggerSettingWord(triggerID, NULL, MODULENAME, SETTING_TRIGGERON, (WORD)flags);
+ break;
+ }
+
+ case TM_DELTRIGGER:
+ {
+ /* wParam = (WPARAM)(DWORD)triggerID */
+ // wParam = triggerID
+ DWORD triggerID;
+ REMOVETRIGGERSETTINGS rts;
+
+ triggerID = (DWORD)wParam;
+ rts.cbSize = sizeof(REMOVETRIGGERSETTINGS);
+ rts.prefix = PREFIX_TRIGGERID;
+ rts.id = triggerID;
+ rts.hContact = NULL;
+ rts.szModule = MODULENAME;
+ CallService(MS_TRIGGER_REMOVESETTINGS, 0, (LPARAM)&rts);
+ break;
+ }
+
+ case WM_DESTROY:
+ break;
+ }
+
+ return FALSE;
+}
+
+static int KeepStatusEvent(WPARAM wParam, LPARAM lParam) {
+
+ DWORD triggerID;
+ TRIGGERDATA td;
+ int flags;
+
+ triggerID = 0;
+ do {
+ triggerID = (DWORD)CallService(MS_TRIGGER_FINDNEXTTRIGGERID, triggerID, (LPARAM)TRIGGERNAME);
+ if (triggerID == 0)
+ continue;
+
+ ZeroMemory(&td, sizeof(TRIGGERDATA));
+ td.cbSize = sizeof(TRIGGERDATA);
+ flags = DBGetTriggerSettingWord(triggerID, NULL, MODULENAME, SETTING_TRIGGERON, 0);
+ switch (wParam) {
+ case KS_CONN_STATE_LOST:
+ if (!(flags&TRIGGER_CONNLOST))
+ continue;
+
+ td.dFlags |= DF_PROTO;
+ td.szProto = (char *)lParam;
+ break;
+ case KS_CONN_STATE_LOGINERROR:
+ if (!(flags&TRIGGER_LOGINERROR))
+ continue;
+
+ td.dFlags |= DF_PROTO;
+ td.szProto = (char *)lParam;
+ break;
+ case KS_CONN_STATE_OTHERLOCATION:
+ if (!(flags&TRIGGER_OTHERLOC))
+ continue;
+
+ td.dFlags |= DF_PROTO;
+ td.szProto = (char *)lParam;
+ break;
+ case KS_CONN_STATE_RETRY:
+ if (!(flags&TRIGGER_CONNRETRY))
+ continue;
+
+ break;
+ case KS_CONN_STATE_STOPPEDCHECKING:
+ if ( (lParam) && (!(flags&TRIGGER_CONNSUCCESS)) )
+ continue;
+
+ if ( (!lParam) && (!(flags&TRIGGER_CONNGIVEUP)) )
+ continue;
+
+ break;
+
+ default:
+ continue;
+ }
+
+ REPORTINFO ri = { 0 };
+ ri.cbSize = sizeof(REPORTINFO);
+ ri.flags = TRG_PERFORM;
+ ri.triggerID = triggerID;
+ ri.td = &td;
+ CallService(MS_TRIGGER_REPORTEVENT, 0, (LPARAM)&ri);
+ }
+ while (triggerID != 0);
+
+ return 0;
+}
+
+int RegisterTrigger()
+{
+ if (!ServiceExists(MS_TRIGGER_REGISTERTRIGGER))
+ return -1;
+
+ hKeepStatusHook = HookEvent(ME_KS_CONNECTIONEVENT, KeepStatusEvent);
+
+ TRIGGERREGISTER tr = { 0 };
+ tr.cbSize = sizeof(TRIGGERREGISTER);
+ tr.pszName = TRIGGERNAME;
+ tr.hInstance = hInst;
+ tr.pfnDlgProc = DlgProcOptsTriggerKeepStatus;
+ tr.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_KS_TRIGGER);
+ tr.dFlags = DF_PROTO;
+ /* register the trigger at the TriggerPlugin */
+ CallService(MS_TRIGGER_REGISTERTRIGGER, 0, (LPARAM)&tr);
+
+ return 0;
+}
+
+int DeInitTrigger()
+{
+ UnhookEvent(hKeepStatusHook);
+ return 0;
+}
diff --git a/plugins/StatusPlugins/KeepStatus/vc6.rc b/plugins/StatusPlugins/KeepStatus/vc6.rc
new file mode 100644
index 0000000000..730cf1e916
--- /dev/null
+++ b/plugins/StatusPlugins/KeepStatus/vc6.rc
@@ -0,0 +1,2 @@
+#include "..\resource.rc"
+#include "..\version.rc" \ No newline at end of file
diff --git a/plugins/StatusPlugins/KeepStatus/version.h b/plugins/StatusPlugins/KeepStatus/version.h
new file mode 100644
index 0000000000..26a301582a
--- /dev/null
+++ b/plugins/StatusPlugins/KeepStatus/version.h
@@ -0,0 +1,56 @@
+// Set the version number here - it will affect the version resource and the version field of the pluginInfo structure
+// (Be careful that you don't have the resource file open when you change this and rebuild, otherwise the changes may not
+// take effect within the version resource)
+// Do not forget to define symbol "_DEBUG" for resource compiler if you use debug configuration (in VisualStudio you can
+// find it under Project properties - Configuration properties - Resource - General - Preprocessor definitions)
+
+// plugin version part
+#define __MAJOR_VERSION 0
+#define __MINOR_VERSION 8
+#define __RELEASE_NUM 0
+#define __BUILD_NUM 97
+
+// minimal MirandaIM version number, with which this plugin supposed to work
+#define __PROD_MAJOR_VERSION 0
+#define __PROD_MINOR_VERSION 8
+#define __PROD_RELEASE_NUM 0
+#define __PROD_BUILD_NUM 0
+// if your plugin works only with Miranda core beginning from specific revision, you can include this information in Product Version resource
+//#define __PROD_REV_NUM 1234
+
+// stuff that will be used in PluginInfo section and in Version resource
+#define __PLUGIN_NAME "KeepStatus"
+#define __FILENAME "KeepStatus.dll"
+#define __DESC "KeepStatus, A connection checker, for use with (or without) StartupStatus and/or AdvancedAutoAway."
+#define __AUTHOR "P Boon"
+#define __AUTHOREMAIL "unregistered@users.sourceforge.net"
+#define __AUTHORWEB "http://www.miranda-im.org/"
+#define __COPYRIGHT "(c) 2003-08 P. Boon, 2008-10 George Hazan"
+
+// other stuff for Version resource
+#define __STRINGIFY_IMPL(x) #x
+#define __STRINGIFY(x) __STRINGIFY_IMPL(x)
+
+#define __FILEVERSION_STRING __MAJOR_VERSION,__MINOR_VERSION,__RELEASE_NUM,__BUILD_NUM
+#define __FILEVERSION_STRING_DOTS __MAJOR_VERSION.__MINOR_VERSION.__RELEASE_NUM.__BUILD_NUM
+#ifdef _UNICODE
+#ifdef __REV_NUM
+#define __VERSION_STRING __STRINGIFY(__FILEVERSION_STRING_DOTS rev. __REV_NUM Unicode)
+#else
+#define __VERSION_STRING __STRINGIFY(__FILEVERSION_STRING_DOTS Unicode)
+#endif
+#else
+#ifdef __REV_NUM
+#define __VERSION_STRING __STRINGIFY(__FILEVERSION_STRING_DOTS rev. __REV_NUM)
+#else
+#define __VERSION_STRING __STRINGIFY(__FILEVERSION_STRING_DOTS)
+#endif
+#endif
+
+#define __PRODVERSION_STRING __PROD_MAJOR_VERSION,__PROD_MINOR_VERSION,__PROD_RELEASE_NUM,__PROD_BUILD_NUM
+#define __PRODVERSION_STRING_DOTS __PROD_MAJOR_VERSION.__PROD_MINOR_VERSION.__PROD_RELEASE_NUM.__PROD_BUILD_NUM
+#ifdef __PROD_REV_NUM
+#define __PROD_VERSION_STRING __STRINGIFY(__PRODVERSION_STRING_DOTS rev. __PROD_REV_NUM)
+#else
+#define __PROD_VERSION_STRING __STRINGIFY(__PRODVERSION_STRING_DOTS+)
+#endif
diff --git a/plugins/StatusPlugins/StartupStatus/StartupStatus.dep b/plugins/StatusPlugins/StartupStatus/StartupStatus.dep
new file mode 100644
index 0000000000..1c80942be0
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/StartupStatus.dep
@@ -0,0 +1,291 @@
+# Microsoft Developer Studio Generated Dependency File, included by StartupStatus.mak
+
+..\commonstatus.cpp : \
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_popup.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_system_cpp.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\..\include\win2k.h"\
+ "..\..\helpers\gen_helpers.h"\
+ "..\commonstatus.h"\
+ "..\includes\m_NewAwaySys.h"\
+ "..\includes\m_updater.h"\
+ "..\includes\m_variables.h"\
+ "..\includes\m_vsramm.h"\
+ "..\m_statusplugins.h"\
+
+
+..\confirmdialog.cpp : \
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_popup.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_system_cpp.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\..\include\win2k.h"\
+ "..\..\helpers\gen_helpers.h"\
+ "..\commonstatus.h"\
+ "..\includes\m_NewAwaySys.h"\
+ "..\includes\m_updater.h"\
+ "..\includes\m_variables.h"\
+ "..\includes\m_vsramm.h"\
+ "..\m_statusplugins.h"\
+
+
+..\..\helpers\gen_helpers.cpp : \
+ "..\..\..\include\m_addcontact.h"\
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clc.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_clistint.h"\
+ "..\..\..\include\m_clui.h"\
+ "..\..\..\include\m_contacts.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_email.h"\
+ "..\..\..\include\m_file.h"\
+ "..\..\..\include\m_findadd.h"\
+ "..\..\..\include\m_genmenu.h"\
+ "..\..\..\include\m_history.h"\
+ "..\..\..\include\m_idle.h"\
+ "..\..\..\include\m_ignore.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_message.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_options.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protomod.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_skin.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_userinfo.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\helpers\commonheaders.h"\
+ "..\..\helpers\gen_helpers.h"\
+ "..\includes\m_variables.h"\
+
+
+.\main.cpp : \
+ "..\..\..\include\m_addcontact.h"\
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clc.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_clistint.h"\
+ "..\..\..\include\m_clui.h"\
+ "..\..\..\include\m_contacts.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_email.h"\
+ "..\..\..\include\m_file.h"\
+ "..\..\..\include\m_findadd.h"\
+ "..\..\..\include\m_genmenu.h"\
+ "..\..\..\include\m_history.h"\
+ "..\..\..\include\m_idle.h"\
+ "..\..\..\include\m_ignore.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_message.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_options.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_popup.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protomod.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_skin.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_system_cpp.h"\
+ "..\..\..\include\m_userinfo.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\..\include\win2k.h"\
+ "..\..\helpers\commonheaders.h"\
+ "..\..\helpers\db_helpers.h"\
+ "..\..\helpers\gen_helpers.h"\
+ "..\commonstatus.h"\
+ "..\includes\m_NewAwaySys.h"\
+ "..\includes\m_toolbar.h"\
+ "..\includes\m_toptoolbar.h"\
+ "..\includes\m_updater.h"\
+ "..\includes\m_variables.h"\
+ "..\includes\m_vsramm.h"\
+ "..\m_statusplugins.h"\
+ ".\startupstatus.h"\
+ ".\version.h"\
+
+
+.\options.cpp : \
+ "..\..\..\include\m_addcontact.h"\
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clc.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_clistint.h"\
+ "..\..\..\include\m_clui.h"\
+ "..\..\..\include\m_contacts.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_email.h"\
+ "..\..\..\include\m_file.h"\
+ "..\..\..\include\m_findadd.h"\
+ "..\..\..\include\m_genmenu.h"\
+ "..\..\..\include\m_history.h"\
+ "..\..\..\include\m_idle.h"\
+ "..\..\..\include\m_ignore.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_message.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_options.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_popup.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protomod.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_skin.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_system_cpp.h"\
+ "..\..\..\include\m_userinfo.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\..\include\win2k.h"\
+ "..\..\helpers\commonheaders.h"\
+ "..\..\helpers\db_helpers.h"\
+ "..\..\helpers\gen_helpers.h"\
+ "..\commonstatus.h"\
+ "..\includes\m_NewAwaySys.h"\
+ "..\includes\m_toolbar.h"\
+ "..\includes\m_toptoolbar.h"\
+ "..\includes\m_updater.h"\
+ "..\includes\m_variables.h"\
+ "..\includes\m_vsramm.h"\
+ "..\m_statusplugins.h"\
+ ".\startupstatus.h"\
+ ".\version.h"\
+
+
+.\profiles.cpp : \
+ "..\..\..\include\m_addcontact.h"\
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clc.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_clistint.h"\
+ "..\..\..\include\m_clui.h"\
+ "..\..\..\include\m_contacts.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_email.h"\
+ "..\..\..\include\m_file.h"\
+ "..\..\..\include\m_findadd.h"\
+ "..\..\..\include\m_genmenu.h"\
+ "..\..\..\include\m_history.h"\
+ "..\..\..\include\m_idle.h"\
+ "..\..\..\include\m_ignore.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_message.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_options.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_popup.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protomod.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_skin.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_system_cpp.h"\
+ "..\..\..\include\m_userinfo.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\..\include\win2k.h"\
+ "..\..\helpers\commonheaders.h"\
+ "..\..\helpers\db_helpers.h"\
+ "..\..\helpers\gen_helpers.h"\
+ "..\commonstatus.h"\
+ "..\includes\m_NewAwaySys.h"\
+ "..\includes\m_toolbar.h"\
+ "..\includes\m_toptoolbar.h"\
+ "..\includes\m_updater.h"\
+ "..\includes\m_variables.h"\
+ "..\includes\m_vsramm.h"\
+ "..\m_statusplugins.h"\
+ ".\startupstatus.h"\
+ ".\version.h"\
+
+
+.\startupstatus.cpp : \
+ "..\..\..\include\m_addcontact.h"\
+ "..\..\..\include\m_awaymsg.h"\
+ "..\..\..\include\m_button.h"\
+ "..\..\..\include\m_clc.h"\
+ "..\..\..\include\m_clist.h"\
+ "..\..\..\include\m_clistint.h"\
+ "..\..\..\include\m_clui.h"\
+ "..\..\..\include\m_contacts.h"\
+ "..\..\..\include\m_database.h"\
+ "..\..\..\include\m_email.h"\
+ "..\..\..\include\m_file.h"\
+ "..\..\..\include\m_findadd.h"\
+ "..\..\..\include\m_genmenu.h"\
+ "..\..\..\include\m_history.h"\
+ "..\..\..\include\m_idle.h"\
+ "..\..\..\include\m_ignore.h"\
+ "..\..\..\include\m_langpack.h"\
+ "..\..\..\include\m_message.h"\
+ "..\..\..\include\m_netlib.h"\
+ "..\..\..\include\m_options.h"\
+ "..\..\..\include\m_plugins.h"\
+ "..\..\..\include\m_popup.h"\
+ "..\..\..\include\m_protocols.h"\
+ "..\..\..\include\m_protomod.h"\
+ "..\..\..\include\m_protosvc.h"\
+ "..\..\..\include\m_skin.h"\
+ "..\..\..\include\m_system.h"\
+ "..\..\..\include\m_system_cpp.h"\
+ "..\..\..\include\m_userinfo.h"\
+ "..\..\..\include\m_utils.h"\
+ "..\..\..\include\newpluginapi.h"\
+ "..\..\..\include\statusmodes.h"\
+ "..\..\..\include\win2k.h"\
+ "..\..\helpers\commonheaders.h"\
+ "..\..\helpers\db_helpers.h"\
+ "..\..\helpers\gen_helpers.h"\
+ "..\commonstatus.h"\
+ "..\includes\m_NewAwaySys.h"\
+ "..\includes\m_toolbar.h"\
+ "..\includes\m_toptoolbar.h"\
+ "..\includes\m_updater.h"\
+ "..\includes\m_variables.h"\
+ "..\includes\m_vsramm.h"\
+ "..\m_statusplugins.h"\
+ ".\startupstatus.h"\
+ ".\version.h"\
+
+
+.\vc6.rc : \
+ "..\resource.rc"\
+ "..\version.rc"\
+ ".\version.h"\
+
diff --git a/plugins/StatusPlugins/StartupStatus/StartupStatus.dsp b/plugins/StatusPlugins/StartupStatus/StartupStatus.dsp
new file mode 100644
index 0000000000..0e8df5cca3
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/StartupStatus.dsp
@@ -0,0 +1,244 @@
+# Microsoft Developer Studio Project File - Name="StartupStatus" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=StartupStatus - Win32 Debug Unicode
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "StartupStatus.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "StartupStatus.mak" CFG="StartupStatus - Win32 Debug Unicode"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "StartupStatus - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "StartupStatus - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "StartupStatus - Win32 Debug Unicode" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "StartupStatus - Win32 Release Unicode" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "StartupStatus - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "STARTUPSTATUS_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "STARTUPSTATUS_EXPORTS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib msvcrt.lib wininet.lib Delayimp.lib /nologo /base:"0x11bd0000" /dll /debug /machine:I386 /nodefaultlib /out:"../../../bin/release/plugins/StartupStatus.dll" /DELAYLOAD:wininet.dll
+# SUBTRACT LINK32 /pdb:none
+
+!ELSEIF "$(CFG)" == "StartupStatus - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "STARTUPSTATUS_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "STARTUPSTATUS_EXPORTS" /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 wininet.lib Delayimp.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /dll /debug /machine:I386 /out:"../../../bin/debug/plugins/StartupStatus.dll" /pdbtype:sept /DELAYLOAD:wininet.dll
+# SUBTRACT LINK32 /pdb:none
+
+!ELSEIF "$(CFG)" == "StartupStatus - Win32 Debug Unicode"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "StartupStatus___Win32_Debug_Unicode"
+# PROP BASE Intermediate_Dir "StartupStatus___Win32_Debug_Unicode"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_Unicode"
+# PROP Intermediate_Dir "Debug_Unicode"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "STARTUPSTATUS_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 wininet.lib Delayimp.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /dll /debug /machine:I386 /out:"../../../bin/debug/plugins/StartupStatus.dll" /pdbtype:sept /DELAYLOAD:wininet.dll
+# SUBTRACT BASE LINK32 /pdb:none
+# ADD LINK32 wininet.lib Delayimp.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /dll /debug /machine:I386 /out:"../../../bin/Debug Unicode/plugins/StartupStatus.dll" /pdbtype:sept /DELAYLOAD:wininet.dll
+# SUBTRACT LINK32 /pdb:none
+
+!ELSEIF "$(CFG)" == "StartupStatus - Win32 Release Unicode"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "StartupStatus___Win32_Release_Unicode"
+# PROP BASE Intermediate_Dir "StartupStatus___Win32_Release_Unicode"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_Unicode"
+# PROP Intermediate_Dir "Release_Unicode"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "STARTUPSTATUS_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib msvcrt.lib wininet.lib Delayimp.lib /nologo /base:"0x11bd0000" /dll /debug /machine:I386 /nodefaultlib /out:"../../../bin/release/plugins/StartupStatus.dll" /DELAYLOAD:wininet.dll
+# SUBTRACT BASE LINK32 /pdb:none
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib msvcrt.lib wininet.lib Delayimp.lib /nologo /base:"0x11bd0000" /dll /debug /machine:I386 /nodefaultlib /out:"../../../bin/Release Unicode/plugins/StartupStatus.dll" /DELAYLOAD:wininet.dll
+# SUBTRACT LINK32 /pdb:none
+
+!ENDIF
+
+# Begin Target
+
+# Name "StartupStatus - Win32 Release"
+# Name "StartupStatus - Win32 Debug"
+# Name "StartupStatus - Win32 Debug Unicode"
+# Name "StartupStatus - Win32 Release Unicode"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\commonstatus.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\confirmdialog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\helpers\gen_helpers.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\main.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\options.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\profiles.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\startupstatus.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\toolbars.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\commonstatus.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\m_statusplugins.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\resource.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\startupstatus.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\vc6.rc
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\Release\StartupStatus.txt
+
+!IF "$(CFG)" == "StartupStatus - Win32 Release"
+
+# PROP Exclude_From_Build 1
+
+!ELSEIF "$(CFG)" == "StartupStatus - Win32 Debug"
+
+# PROP Exclude_From_Build 1
+
+!ELSEIF "$(CFG)" == "StartupStatus - Win32 Debug Unicode"
+
+# PROP BASE Exclude_From_Build 1
+# PROP Exclude_From_Build 1
+
+!ELSEIF "$(CFG)" == "StartupStatus - Win32 Release Unicode"
+
+# PROP BASE Exclude_From_Build 1
+# PROP Exclude_From_Build 1
+
+!ENDIF
+
+# End Source File
+# End Target
+# End Project
diff --git a/plugins/StatusPlugins/StartupStatus/StartupStatus.mak b/plugins/StatusPlugins/StartupStatus/StartupStatus.mak
new file mode 100644
index 0000000000..3a338643e5
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/StartupStatus.mak
@@ -0,0 +1,342 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on StartupStatus.dsp
+!IF "$(CFG)" == ""
+CFG=StartupStatus - Win32 Debug Unicode
+!MESSAGE No configuration specified. Defaulting to StartupStatus - Win32 Debug Unicode.
+!ENDIF
+
+!IF "$(CFG)" != "StartupStatus - Win32 Release" && "$(CFG)" != "StartupStatus - Win32 Debug" && "$(CFG)" != "StartupStatus - Win32 Debug Unicode" && "$(CFG)" != "StartupStatus - Win32 Release Unicode"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "StartupStatus.mak" CFG="StartupStatus - Win32 Debug Unicode"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "StartupStatus - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "StartupStatus - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "StartupStatus - Win32 Debug Unicode" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "StartupStatus - Win32 Release Unicode" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "StartupStatus - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+
+ALL : "..\..\..\bin\release\plugins\StartupStatus.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\commonstatus.obj"
+ -@erase "$(INTDIR)\confirmdialog.obj"
+ -@erase "$(INTDIR)\gen_helpers.obj"
+ -@erase "$(INTDIR)\main.obj"
+ -@erase "$(INTDIR)\options.obj"
+ -@erase "$(INTDIR)\profiles.obj"
+ -@erase "$(INTDIR)\startupstatus.obj"
+ -@erase "$(INTDIR)\toolbars.obj"
+ -@erase "$(INTDIR)\vc6.res"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\StartupStatus.exp"
+ -@erase "$(OUTDIR)\StartupStatus.lib"
+ -@erase "$(OUTDIR)\StartupStatus.pdb"
+ -@erase "..\..\..\bin\release\plugins\StartupStatus.dll"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "STARTUPSTATUS_EXPORTS" /Fp"$(INTDIR)\StartupStatus.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\vc6.res" /d "NDEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\StartupStatus.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib msvcrt.lib wininet.lib Delayimp.lib /nologo /base:"0x11bd0000" /dll /incremental:no /pdb:"$(OUTDIR)\StartupStatus.pdb" /debug /machine:I386 /nodefaultlib /out:"../../../bin/release/plugins/StartupStatus.dll" /implib:"$(OUTDIR)\StartupStatus.lib" /DELAYLOAD:wininet.dll
+LINK32_OBJS= \
+ "$(INTDIR)\commonstatus.obj" \
+ "$(INTDIR)\confirmdialog.obj" \
+ "$(INTDIR)\gen_helpers.obj" \
+ "$(INTDIR)\main.obj" \
+ "$(INTDIR)\options.obj" \
+ "$(INTDIR)\profiles.obj" \
+ "$(INTDIR)\startupstatus.obj" \
+ "$(INTDIR)\vc6.res" \
+ "$(INTDIR)\toolbars.obj"
+
+"..\..\..\bin\release\plugins\StartupStatus.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "StartupStatus - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+
+ALL : "..\..\..\bin\debug\plugins\StartupStatus.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\commonstatus.obj"
+ -@erase "$(INTDIR)\confirmdialog.obj"
+ -@erase "$(INTDIR)\gen_helpers.obj"
+ -@erase "$(INTDIR)\main.obj"
+ -@erase "$(INTDIR)\options.obj"
+ -@erase "$(INTDIR)\profiles.obj"
+ -@erase "$(INTDIR)\startupstatus.obj"
+ -@erase "$(INTDIR)\toolbars.obj"
+ -@erase "$(INTDIR)\vc6.res"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\StartupStatus.exp"
+ -@erase "$(OUTDIR)\StartupStatus.lib"
+ -@erase "$(OUTDIR)\StartupStatus.pdb"
+ -@erase "..\..\..\bin\debug\plugins\StartupStatus.dll"
+ -@erase "..\..\..\bin\debug\plugins\StartupStatus.ilk"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "STARTUPSTATUS_EXPORTS" /Fp"$(INTDIR)\StartupStatus.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\vc6.res" /d "_DEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\StartupStatus.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=wininet.lib Delayimp.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\StartupStatus.pdb" /debug /machine:I386 /out:"../../../bin/debug/plugins/StartupStatus.dll" /implib:"$(OUTDIR)\StartupStatus.lib" /pdbtype:sept /DELAYLOAD:wininet.dll
+LINK32_OBJS= \
+ "$(INTDIR)\commonstatus.obj" \
+ "$(INTDIR)\confirmdialog.obj" \
+ "$(INTDIR)\gen_helpers.obj" \
+ "$(INTDIR)\main.obj" \
+ "$(INTDIR)\options.obj" \
+ "$(INTDIR)\profiles.obj" \
+ "$(INTDIR)\startupstatus.obj" \
+ "$(INTDIR)\vc6.res" \
+ "$(INTDIR)\toolbars.obj"
+
+"..\..\..\bin\debug\plugins\StartupStatus.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "StartupStatus - Win32 Debug Unicode"
+
+OUTDIR=.\Debug_Unicode
+INTDIR=.\Debug_Unicode
+
+ALL : "..\..\..\bin\Debug Unicode\plugins\StartupStatus.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\commonstatus.obj"
+ -@erase "$(INTDIR)\confirmdialog.obj"
+ -@erase "$(INTDIR)\gen_helpers.obj"
+ -@erase "$(INTDIR)\main.obj"
+ -@erase "$(INTDIR)\options.obj"
+ -@erase "$(INTDIR)\profiles.obj"
+ -@erase "$(INTDIR)\startupstatus.obj"
+ -@erase "$(INTDIR)\toolbars.obj"
+ -@erase "$(INTDIR)\vc6.res"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\StartupStatus.exp"
+ -@erase "$(OUTDIR)\StartupStatus.lib"
+ -@erase "$(OUTDIR)\StartupStatus.pdb"
+ -@erase "..\..\..\bin\Debug Unicode\plugins\StartupStatus.dll"
+ -@erase "..\..\..\bin\Debug Unicode\plugins\StartupStatus.ilk"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../includes" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /Fp"$(INTDIR)\StartupStatus.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\vc6.res" /d "_DEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\StartupStatus.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=wininet.lib Delayimp.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\StartupStatus.pdb" /debug /machine:I386 /out:"../../../bin/Debug Unicode/plugins/StartupStatus.dll" /implib:"$(OUTDIR)\StartupStatus.lib" /pdbtype:sept /DELAYLOAD:wininet.dll
+LINK32_OBJS= \
+ "$(INTDIR)\commonstatus.obj" \
+ "$(INTDIR)\confirmdialog.obj" \
+ "$(INTDIR)\gen_helpers.obj" \
+ "$(INTDIR)\main.obj" \
+ "$(INTDIR)\options.obj" \
+ "$(INTDIR)\profiles.obj" \
+ "$(INTDIR)\startupstatus.obj" \
+ "$(INTDIR)\vc6.res" \
+ "$(INTDIR)\toolbars.obj"
+
+"..\..\..\bin\Debug Unicode\plugins\StartupStatus.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "StartupStatus - Win32 Release Unicode"
+
+OUTDIR=.\Release_Unicode
+INTDIR=.\Release_Unicode
+
+ALL : "..\..\..\bin\Release Unicode\plugins\StartupStatus.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\commonstatus.obj"
+ -@erase "$(INTDIR)\confirmdialog.obj"
+ -@erase "$(INTDIR)\gen_helpers.obj"
+ -@erase "$(INTDIR)\main.obj"
+ -@erase "$(INTDIR)\options.obj"
+ -@erase "$(INTDIR)\profiles.obj"
+ -@erase "$(INTDIR)\startupstatus.obj"
+ -@erase "$(INTDIR)\toolbars.obj"
+ -@erase "$(INTDIR)\vc6.res"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\StartupStatus.exp"
+ -@erase "$(OUTDIR)\StartupStatus.lib"
+ -@erase "$(OUTDIR)\StartupStatus.pdb"
+ -@erase "..\..\..\bin\Release Unicode\plugins\StartupStatus.dll"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /MD /W3 /GX /Zi /O1 /I "../../../include" /I "../includes" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /Fp"$(INTDIR)\StartupStatus.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\vc6.res" /d "NDEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\StartupStatus.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib msvcrt.lib wininet.lib Delayimp.lib /nologo /base:"0x11bd0000" /dll /incremental:no /pdb:"$(OUTDIR)\StartupStatus.pdb" /debug /machine:I386 /nodefaultlib /out:"../../../bin/Release Unicode/plugins/StartupStatus.dll" /implib:"$(OUTDIR)\StartupStatus.lib" /DELAYLOAD:wininet.dll
+LINK32_OBJS= \
+ "$(INTDIR)\commonstatus.obj" \
+ "$(INTDIR)\confirmdialog.obj" \
+ "$(INTDIR)\gen_helpers.obj" \
+ "$(INTDIR)\main.obj" \
+ "$(INTDIR)\options.obj" \
+ "$(INTDIR)\profiles.obj" \
+ "$(INTDIR)\startupstatus.obj" \
+ "$(INTDIR)\vc6.res" \
+ "$(INTDIR)\toolbars.obj"
+
+"..\..\..\bin\Release Unicode\plugins\StartupStatus.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("StartupStatus.dep")
+!INCLUDE "StartupStatus.dep"
+!ELSE
+!MESSAGE Warning: cannot find "StartupStatus.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "StartupStatus - Win32 Release" || "$(CFG)" == "StartupStatus - Win32 Debug" || "$(CFG)" == "StartupStatus - Win32 Debug Unicode" || "$(CFG)" == "StartupStatus - Win32 Release Unicode"
+SOURCE=..\commonstatus.cpp
+
+"$(INTDIR)\commonstatus.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\confirmdialog.cpp
+
+"$(INTDIR)\confirmdialog.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\helpers\gen_helpers.cpp
+
+"$(INTDIR)\gen_helpers.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=.\main.cpp
+
+"$(INTDIR)\main.obj" : $(SOURCE) "$(INTDIR)"
+
+
+SOURCE=.\options.cpp
+
+"$(INTDIR)\options.obj" : $(SOURCE) "$(INTDIR)"
+
+
+SOURCE=.\profiles.cpp
+
+"$(INTDIR)\profiles.obj" : $(SOURCE) "$(INTDIR)"
+
+
+SOURCE=.\startupstatus.cpp
+
+"$(INTDIR)\startupstatus.obj" : $(SOURCE) "$(INTDIR)"
+
+
+SOURCE=.\toolbars.cpp
+
+"$(INTDIR)\toolbars.obj" : $(SOURCE) "$(INTDIR)"
+
+
+SOURCE=.\vc6.rc
+
+"$(INTDIR)\vc6.res" : $(SOURCE) "$(INTDIR)"
+ $(RSC) $(RSC_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/plugins/StatusPlugins/StartupStatus/StartupStatus.rc b/plugins/StatusPlugins/StartupStatus/StartupStatus.rc
new file mode 100644
index 0000000000..fd2f96e9f3
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/StartupStatus.rc
@@ -0,0 +1,72 @@
+// 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
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Bitmap
+//
+
+IDI_TTBDOWN ICON "res\\ttbDown.ico"
+IDI_TTBUP ICON "res\\ttbUp.ico"
+IDB_TTBDOWN BITMAP "res\\ttbDown.bmp"
+IDB_TTBUP BITMAP "res\\ttbUp.bmp"
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/plugins/StatusPlugins/StartupStatus/StartupStatus.vcproj b/plugins/StatusPlugins/StartupStatus/StartupStatus.vcproj
new file mode 100644
index 0000000000..c5b631bc45
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/StartupStatus.vcproj
@@ -0,0 +1,576 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="StartupStatus"
+ ProjectGUID="{1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}"
+ SccProjectName=""
+ SccLocalPath="">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="1"
+ FavorSizeOrSpeed="2"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;STARTUPSTATUS_EXPORTS"
+ StringPooling="TRUE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="3"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="vc7to6.lib wininet.lib Delayimp.lib"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="../../../lib"
+ IgnoreAllDefaultLibraries="TRUE"
+ DelayLoadDLLs="wininet.dll"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ BaseAddress="0x11bd0000"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/StartupStatus.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;STARTUPSTATUS_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="3"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="wininet.lib Delayimp.lib odbc32.lib odbccp32.lib ws2_32.lib"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="TRUE"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/StartupStatus.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;STARTUPSTATUS_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="3"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="wininet.lib Delayimp.lib odbc32.lib odbccp32.lib ws2_32.lib"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="TRUE"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/StartupStatus.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="1"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="1"
+ FavorSizeOrSpeed="2"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;STARTUPSTATUS_EXPORTS"
+ StringPooling="TRUE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="3"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="vc7to6.lib wininet.lib Delayimp.lib"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="../../../lib"
+ IgnoreAllDefaultLibraries="TRUE"
+ DelayLoadDLLs="wininet.dll"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ BaseAddress="0x11bd0000"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/StartupStatus.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+ <File
+ RelativePath="..\commonstatus.cpp">
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\confirmdialog.cpp">
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PrecompiledHeaderThrough="commonstatus.h"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"
+ PrecompiledHeaderThrough="commonstatus.h"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"
+ PrecompiledHeaderThrough="commonstatus.h"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PrecompiledHeaderThrough="commonstatus.h"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\helpers\gen_helpers.cpp">
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="0"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="0"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\main.cpp">
+ </File>
+ <File
+ RelativePath="options.cpp">
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="profiles.cpp">
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="startupstatus.cpp">
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ BasicRuntimeChecks="3"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl">
+ <File
+ RelativePath="..\commonstatus.h">
+ </File>
+ <File
+ RelativePath="..\m_statusplugins.h">
+ </File>
+ <File
+ RelativePath="..\resource.h">
+ </File>
+ <File
+ RelativePath="startupstatus.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+ <File
+ RelativePath="..\resource.rc">
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories="\Miranda\miranda\plugins\StatusPlugins"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories="\Miranda\miranda\plugins\StatusPlugins"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories="\Miranda\miranda\plugins\StatusPlugins"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories="\Miranda\miranda\plugins\StatusPlugins"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath="Release\StartupStatus.txt">
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCustomBuildTool"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCustomBuildTool"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCustomBuildTool"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCustomBuildTool"/>
+ </FileConfiguration>
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/plugins/StatusPlugins/StartupStatus/StartupStatus_10.vcxproj b/plugins/StatusPlugins/StartupStatus/StartupStatus_10.vcxproj
new file mode 100644
index 0000000000..755883644b
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/StartupStatus_10.vcxproj
@@ -0,0 +1,466 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug Unicode|Win32">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug Unicode|x64">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|Win32">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|x64">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>StartupStatus</ProjectName>
+ <ProjectGuid>{1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}</ProjectGuid>
+ <RootNamespace>StartupStatus</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</IgnoreImportLibrary>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</IgnoreImportLibrary>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">true</IgnoreImportLibrary>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">true</IgnoreImportLibrary>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">$(SolutionDir)$(Configuration)64/Plugins\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Configuration)64/Plugins\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(SolutionDir)$(Configuration)64/Plugins\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Configuration)64/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">$(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\</IntDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Release/StartupStatus.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <AdditionalIncludeDirectories>../../../include;../includes</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;STARTUPSTATUS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>../commonstatus.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <CompileAs>Default</CompileAs>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <ExceptionHandling>false</ExceptionHandling>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>wininet.lib;Delayimp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DelayLoadDLLs>wininet.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+ <BaseAddress>0x11bd0000</BaseAddress>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Debug/StartupStatus.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;../includes</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;STARTUPSTATUS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>../commonstatus.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <CompileAs>Default</CompileAs>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>wininet.lib;Delayimp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DelayLoadDLLs>wininet.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Debug/StartupStatus.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;../includes</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;STARTUPSTATUS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>../commonstatus.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <CompileAs>Default</CompileAs>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>wininet.lib;Delayimp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DelayLoadDLLs>wininet.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Release/StartupStatus.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <AdditionalIncludeDirectories>../../../include;../includes</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;STARTUPSTATUS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>false</ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>../commonstatus.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <CompileAs>Default</CompileAs>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>wininet.lib;Delayimp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <DelayLoadDLLs>wininet.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <BaseAddress>0x11bd0000</BaseAddress>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ <ClCompile>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ <ClCompile>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ <ClCompile>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PreprocessorDefinitions>
+ </PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>false</ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>../commonstatus.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories>../../../include;../includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link />
+ <Link>
+ <AdditionalDependencies>wininet.lib;Delayimp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <DelayLoadDLLs>wininet.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">
+ <ClCompile>
+ <PrecompiledHeaderFile>../commonstatus.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories>../../../include;../includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>wininet.lib;Delayimp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <DelayLoadDLLs>wininet.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeaderFile>../commonstatus.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories>../../../include;../includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>wininet.lib;Delayimp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <DelayLoadDLLs>wininet.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <PrecompiledHeaderFile>../commonstatus.h</PrecompiledHeaderFile>
+ <Optimization>Full</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <ExceptionHandling>false</ExceptionHandling>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <AdditionalIncludeDirectories>../../../include;../includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link />
+ <Link>
+ <AdditionalDependencies>wininet.lib;Delayimp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <DelayLoadDLLs>wininet.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\commonstatus.cpp">
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">commonstatus.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ClCompile Include="..\confirmdialog.cpp">
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Use</PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">commonstatus.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">commonstatus.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ClCompile Include="..\..\helpers\gen_helpers.cpp">
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">NotUsing</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
+ </ClCompile>
+ <ClCompile Include="main.cpp" />
+ <ClCompile Include="options.cpp" />
+ <ClCompile Include="profiles.cpp" />
+ <ClCompile Include="startupstatus.cpp" />
+ <ClCompile Include="toolbars.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\commonstatus.h" />
+ <ClInclude Include="..\m_statusplugins.h" />
+ <ClInclude Include="..\resource.h" />
+ <ClInclude Include="startupstatus.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="..\resource.rc" />
+ <ResourceCompile Include="..\version.rc" />
+ <ResourceCompile Include="StartupStatus.rc" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/plugins/StatusPlugins/StartupStatus/StartupStatus_10.vcxproj.filters b/plugins/StatusPlugins/StartupStatus/StartupStatus_10.vcxproj.filters
new file mode 100644
index 0000000000..6ce8394dea
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/StartupStatus_10.vcxproj.filters
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{05912809-2743-4a01-8ca7-689106a3141a}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{2f9d749c-d579-43b5-af4c-485fec64ddfa}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{3731744d-2cbc-4ec4-bc69-7e184a77f957}</UniqueIdentifier>
+ <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\commonstatus.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\confirmdialog.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\helpers\gen_helpers.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="main.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="options.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="profiles.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="startupstatus.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="toolbars.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\commonstatus.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\m_statusplugins.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\resource.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="startupstatus.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="..\resource.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ <ResourceCompile Include="..\version.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ <ResourceCompile Include="StartupStatus.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/plugins/StatusPlugins/StartupStatus/StartupStatus_8.vcproj b/plugins/StatusPlugins/StartupStatus/StartupStatus_8.vcproj
new file mode 100644
index 0000000000..ddc2fc56e5
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/StartupStatus_8.vcproj
@@ -0,0 +1,790 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="StartupStatus"
+ ProjectGUID="{1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/StartupStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ FavorSizeOrSpeed="2"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;STARTUPSTATUS_EXPORTS"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="odbc32.lib odbccp32.lib msvcrt.lib wininet.lib Delayimp.lib"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ IgnoreAllDefaultLibraries="true"
+ DelayLoadDLLs="wininet.dll"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ BaseAddress="0x11bd0000"
+ 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|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/StartupStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;STARTUPSTATUS_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="wininet.lib Delayimp.lib odbc32.lib odbccp32.lib ws2_32.lib"
+ LinkIncremental="2"
+ SuppressStartupBanner="true"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ 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="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/StartupStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;STARTUPSTATUS_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="wininet.lib Delayimp.lib odbc32.lib odbccp32.lib ws2_32.lib"
+ LinkIncremental="2"
+ SuppressStartupBanner="true"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ 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="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/StartupStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ FavorSizeOrSpeed="2"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;STARTUPSTATUS_EXPORTS"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="odbc32.lib odbccp32.lib msvcrt.lib wininet.lib Delayimp.lib"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ IgnoreAllDefaultLibraries="true"
+ DelayLoadDLLs="wininet.dll"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ BaseAddress="0x11bd0000"
+ 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;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath="..\commonstatus.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\confirmdialog.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\helpers\gen_helpers.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\main.cpp"
+ >
+ </File>
+ <File
+ RelativePath="options.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="profiles.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="startupstatus.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;STARTUPSTATUS_EXPORTS;$(NoInherit)"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\toolbars.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl"
+ >
+ <File
+ RelativePath="..\commonstatus.h"
+ >
+ </File>
+ <File
+ RelativePath="..\m_statusplugins.h"
+ >
+ </File>
+ <File
+ RelativePath="..\resource.h"
+ >
+ </File>
+ <File
+ RelativePath="startupstatus.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ <File
+ RelativePath="..\resource.rc"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories="\Miranda\miranda\plugins\StatusPlugins"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories="\Miranda\miranda\plugins\StatusPlugins"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories="\Miranda\miranda\plugins\StatusPlugins"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ AdditionalIncludeDirectories="\Miranda\miranda\plugins\StatusPlugins"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath="Release\StartupStatus.txt"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/plugins/StatusPlugins/StartupStatus/StartupStatus_9.vcproj b/plugins/StatusPlugins/StartupStatus/StartupStatus_9.vcproj
new file mode 100644
index 0000000000..ada02cbb54
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/StartupStatus_9.vcproj
@@ -0,0 +1,1049 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9,00"
+ Name="StartupStatus"
+ ProjectGUID="{1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}"
+ RootNamespace="StartupStatus"
+ TargetFrameworkVersion="0"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/StartupStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="2"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;STARTUPSTATUS_EXPORTS"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="wininet.lib Delayimp.lib"
+ SuppressStartupBanner="true"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="0"
+ LinkTimeCodeGeneration="1"
+ BaseAddress="0x11bd0000"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)64/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)64/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\Release/StartupStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="2"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;STARTUPSTATUS_EXPORTS"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="wininet.lib Delayimp.lib"
+ SuppressStartupBanner="true"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="0"
+ LinkTimeCodeGeneration="1"
+ BaseAddress="0x11bd0000"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/StartupStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;STARTUPSTATUS_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="wininet.lib Delayimp.lib"
+ SuppressStartupBanner="true"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)64/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)64/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\Debug/StartupStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;STARTUPSTATUS_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="wininet.lib Delayimp.lib"
+ SuppressStartupBanner="true"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/StartupStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;STARTUPSTATUS_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="wininet.lib Delayimp.lib"
+ SuppressStartupBanner="true"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode|x64"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)64/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)64/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\Debug/StartupStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;STARTUPSTATUS_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="wininet.lib Delayimp.lib"
+ SuppressStartupBanner="true"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/StartupStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="2"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;STARTUPSTATUS_EXPORTS"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ FloatingPointModel="2"
+ RuntimeTypeInfo="false"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="wininet.lib Delayimp.lib"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ BaseAddress="0x11bd0000"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|x64"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)64/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)64/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\Release/StartupStatus.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="2"
+ AdditionalIncludeDirectories="../../../include,../includes"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;STARTUPSTATUS_EXPORTS"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ FloatingPointModel="2"
+ RuntimeTypeInfo="false"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="../commonstatus.h"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="wininet.lib Delayimp.lib"
+ DelayLoadDLLs="wininet.dll"
+ GenerateDebugInformation="true"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ BaseAddress="0x11bd0000"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath="..\commonstatus.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\confirmdialog.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PrecompiledHeaderThrough="commonstatus.h"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\helpers\gen_helpers.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\main.cpp"
+ >
+ </File>
+ <File
+ RelativePath="options.cpp"
+ >
+ </File>
+ <File
+ RelativePath="profiles.cpp"
+ >
+ </File>
+ <File
+ RelativePath="startupstatus.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\toolbars.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl"
+ >
+ <File
+ RelativePath="..\commonstatus.h"
+ >
+ </File>
+ <File
+ RelativePath="..\m_statusplugins.h"
+ >
+ </File>
+ <File
+ RelativePath="..\resource.h"
+ >
+ </File>
+ <File
+ RelativePath="startupstatus.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ <File
+ RelativePath="..\resource.rc"
+ >
+ </File>
+ <File
+ RelativePath=".\StartupStatus.rc"
+ >
+ </File>
+ <File
+ RelativePath="..\ttbDown.bmp"
+ >
+ </File>
+ <File
+ RelativePath="..\ttbUp.bmp"
+ >
+ </File>
+ <File
+ RelativePath="..\version.rc"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/plugins/StatusPlugins/StartupStatus/main.cpp b/plugins/StatusPlugins/StartupStatus/main.cpp
new file mode 100644
index 0000000000..b024013ce8
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/main.cpp
@@ -0,0 +1,141 @@
+/*
+ StartupStatus Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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 "../commonstatus.h"
+#include "startupstatus.h"
+
+// {4B733944-5A70-4b52-AB2D-68B1EF38FFE8}
+#define MIID_STARTUPSTATUS { 0x4b733944, 0x5a70, 0x4b52, { 0xab, 0x2d, 0x68, 0xb1, 0xef, 0x38, 0xff, 0xe8 } }
+
+static HANDLE
+ hCSModuleLoadedHook,
+ hGetProfileService,
+ hGetProfileCountService,
+ hGetProfileNameService;
+
+HINSTANCE hInst;
+PLUGINLINK *pluginLink;
+
+MM_INTERFACE mmi;
+LIST_INTERFACE li;
+int hLangpack = 0;
+
+int CSModuleLoaded( WPARAM, LPARAM );
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// dll entry point
+
+BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
+{
+ hInst = hinstDLL;
+ return TRUE;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// returns plugin's extended information
+
+PLUGININFOEX pluginInfoEx={
+ sizeof(PLUGININFOEX),
+ #if defined( _UNICODE )
+ __PLUGIN_NAME __PLATFORM_NAME " (Unicode)",
+ #else
+ __PLUGIN_NAME,
+ #endif
+ PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM),
+ __DESC,
+ __AUTHOR,
+ __AUTHOREMAIL,
+ __COPYRIGHT,
+ __AUTHORWEB,
+ UNICODE_AWARE,
+ 0,
+ MIID_STARTUPSTATUS
+};
+
+extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
+{
+ if ( mirandaVersion < PLUGIN_MAKE_VERSION( 0, 8, 0, 0 )) {
+ MessageBox(NULL, TranslateT("Startup requires Miranda IM of version 0.8, get it at www.miranda-im.org"), TranslateT("KeepStatus"), MB_OK);
+ return 0;
+ }
+
+ return &pluginInfoEx;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// returns plugin's interfaces information
+
+static const MUUID interfaces[] = { MIID_STARTUPSTATUS, MIID_LAST };
+
+extern "C" __declspec(dllexport) const MUUID* MirandaPluginInterfaces(void)
+{
+ return interfaces;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// plugin's entry point
+
+static INT_PTR SrvGetProfile( WPARAM wParam, LPARAM lParam )
+{ return GetProfile(( int )wParam, *(TSettingsList*)lParam );
+}
+
+extern "C" int __declspec(dllexport) Load(PLUGINLINK *link)
+{
+ pluginLink = link;
+ mir_getMMI(&mmi);
+ mir_getLI(&li);
+ mir_getLP( &pluginInfoEx );
+
+ if ( DBGetContactSettingByte(NULL, MODULENAME, SETTING_SETPROFILE, 1) ||
+ DBGetContactSettingByte(NULL, MODULENAME, SETTING_OFFLINECLOSE, 0))
+ DBWriteContactSettingWord(NULL, "CList", "Status", (WORD)ID_STATUS_OFFLINE);
+
+ // docking
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_SETDOCKED, 0)) {
+ int docked = DBGetContactSettingByte(NULL, MODULENAME, SETTING_DOCKED, DOCKED_NONE);
+ if ( docked == DOCKED_LEFT || docked == DOCKED_RIGHT )
+ docked = -docked;
+
+ DBWriteContactSettingByte(NULL, MODULE_CLIST, SETTING_DOCKED, (BYTE)docked);
+ }
+
+ // Create service functions; the get functions are created here; they don't rely on commonstatus
+ hGetProfileService = CreateServiceFunction(MS_SS_GETPROFILE, SrvGetProfile);
+ hGetProfileCountService = CreateServiceFunction(MS_SS_GETPROFILECOUNT, GetProfileCount);
+ hGetProfileNameService = CreateServiceFunction(MS_SS_GETPROFILENAME, GetProfileName);
+
+ LoadProfileModule();
+
+ // protocols must be loaded first
+ InitCommonStatus();
+ hCSModuleLoadedHook = HookEvent(ME_SYSTEM_MODULESLOADED, CSModuleLoaded);
+ return 0;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// plugin's exit point
+
+extern "C" int __declspec(dllexport) Unload(void)
+{
+ UnhookEvent(hCSModuleLoadedHook);
+
+ DestroyServiceFunction(hGetProfileService);
+ DestroyServiceFunction(hGetProfileCountService);
+ DestroyServiceFunction(hGetProfileNameService);
+ return 0;
+}
diff --git a/plugins/StatusPlugins/StartupStatus/options.cpp b/plugins/StatusPlugins/StartupStatus/options.cpp
new file mode 100644
index 0000000000..6422091cc6
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/options.cpp
@@ -0,0 +1,1034 @@
+/*
+ StartupStatus Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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 "../commonstatus.h"
+#include "startupstatus.h"
+#include "../resource.h"
+
+// for db cleanup
+static int settingIndex;
+
+// prototypes
+INT_PTR CALLBACK CmdlOptionsDlgProc(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam);
+INT_PTR CALLBACK OptDlgProc(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam);
+INT_PTR CALLBACK addProfileDlgProc(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam);
+
+BOOL MyGetSpecialFolderPath(HWND hwndOwner, LPTSTR lpszPath, int nFolder, BOOL fCreate);
+static int CountSettings(const char *szSetting,LPARAM lParam);
+static int DeleteSetting(const char *szSetting,LPARAM lParam);
+static int ClearDatabase(char* filter);
+
+int LoadMainOptions();
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+static TSettingsList* GetCurrentProtoSettings()
+{
+ int count;
+ PROTOACCOUNT** protos;
+ ProtoEnumAccounts( &count, &protos );
+
+ TSettingsList* result = new TSettingsList( count, CompareSettings );
+ if ( result == NULL )
+ return NULL;
+
+ for ( int i=0; i < count; i++ )
+ if ( IsSuitableProto( protos[i] ))
+ result->insert( new TSSSetting( protos[i] ));
+
+ return result;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// Command line processing
+
+static char* GetStatusDesc(int status)
+{
+ switch (status) {
+ case ID_STATUS_AWAY: return "away";
+ case ID_STATUS_NA: return "na";
+ case ID_STATUS_DND: return "dnd";
+ case ID_STATUS_OCCUPIED: return "occupied";
+ case ID_STATUS_FREECHAT: return "freechat";
+ case ID_STATUS_ONLINE: return "online";
+ case ID_STATUS_OFFLINE: return "offline";
+ case ID_STATUS_INVISIBLE: return "invisible";
+ case ID_STATUS_ONTHEPHONE: return "onthephone";
+ case ID_STATUS_OUTTOLUNCH: return "outtolunch";
+ case ID_STATUS_LAST: return "last";
+ }
+ return "offline";
+}
+
+static char* GetCMDLArguments(TSettingsList& protoSettings)
+{
+ if ( protoSettings.getCount() == NULL )
+ return NULL;
+
+ char *cmdl, *pnt;
+ pnt = cmdl = ( char* )malloc(strlen(protoSettings[0].szName) + strlen(GetStatusDesc(protoSettings[0].status)) + 4);
+
+ for (int i=0; i < protoSettings.getCount(); i++ ) {
+ *pnt++ = '/';
+ strcpy(pnt, protoSettings[i].szName);
+ pnt += strlen(protoSettings[i].szName);
+ *pnt++ = '=';
+ strcpy(pnt, GetStatusDesc(protoSettings[i].status));
+ pnt += strlen(GetStatusDesc(protoSettings[i].status));
+ if (i != protoSettings.getCount()-1) {
+ *pnt++ = ' ';
+ *pnt++ = '\0';
+ cmdl = ( char* )realloc(cmdl, strlen(cmdl) + strlen(protoSettings[i+1].szName) + strlen(GetStatusDesc(protoSettings[i+1].status)) + 4);
+ pnt = cmdl + strlen(cmdl);
+ } }
+
+ if ( DBGetContactSettingByte( NULL, MODULENAME, SETTING_SHOWDIALOG, FALSE ) == TRUE ) {
+ *pnt++ = ' ';
+ *pnt++ = '\0';
+ cmdl = ( char* )realloc(cmdl, strlen(cmdl) + 12);
+ pnt = cmdl + strlen(cmdl);
+ strcpy(pnt, "/showdialog");
+ pnt += 11;
+ *pnt = '\0';
+ }
+
+ return cmdl;
+}
+
+static char* GetCMDL(TSettingsList& protoSettings)
+{
+ char path[MAX_PATH];
+ GetModuleFileNameA(NULL, path, MAX_PATH);
+
+ char* cmdl = ( char* )malloc(strlen(path) + 4);
+ _snprintf(cmdl, strlen(path) + 4, "\"%s\" ", path);
+
+ char* args = GetCMDLArguments(protoSettings);
+ if ( args ) {
+ cmdl = ( char* )realloc(cmdl, strlen(cmdl) + strlen(args) + 1);
+ strcat(cmdl, args);
+ free(args);
+ }
+ return cmdl;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// Link processing
+
+static char* GetLinkDescription(TSettingsList& protoSettings)
+{
+ if ( protoSettings.getCount() == 0 )
+ return NULL;
+
+ char *pnt, *desc;
+ pnt = desc = ( char* )malloc(strlen(SHORTCUT_DESC) + 1);
+ strcpy(desc, SHORTCUT_DESC);
+ pnt = desc + strlen(desc);
+ for ( int i=0; i < protoSettings.getCount(); i++ ) {
+ char szName[128];
+ CallProtoService(protoSettings[i].szName, PS_GETNAME, sizeof(szName), (LPARAM)szName );
+
+ char* status;
+ if ( protoSettings[i].status == ID_STATUS_LAST )
+ status = Translate("<last>");
+ else if ( protoSettings[i].status == ID_STATUS_CURRENT )
+ status = Translate("<current>");
+ else if ( protoSettings[i].status >= MIN_STATUS && protoSettings[i].status <= MAX_STATUS )
+ status = (char *)CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION, (WPARAM)protoSettings[i].status, (LPARAM)0);
+ if (status == NULL)
+ status = "<unknown>";
+
+ desc = ( char* )realloc(desc, strlen(desc) + strlen(szName) + strlen(status) + 4);
+ pnt = desc + strlen(desc);
+ *pnt++ = '\r';
+ strcpy(pnt, szName);
+ pnt += strlen(szName);
+ *pnt++ = ':';
+ *pnt++ = ' ';
+ strcpy(pnt, status);
+ }
+
+ return desc;
+}
+
+HRESULT CreateLink(TSettingsList& protoSettings)
+{
+ HRESULT hres;
+ IShellLink* psl;
+ TCHAR savePath[MAX_PATH];
+ char *args = GetCMDLArguments(protoSettings);
+ char *desc = GetLinkDescription(protoSettings);
+
+ if (MyGetSpecialFolderPath(NULL, savePath, 0x10, FALSE))
+ _tcscat(savePath, _T(SHORTCUT_FILENAME));
+ else
+ _stprintf(savePath, _T(".\\%s"), _T(SHORTCUT_FILENAME));
+
+ // Get a pointer to the IShellLink interface.
+ hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, ( void** )&psl);
+ if (SUCCEEDED(hres)) {
+ // Set the path to the shortcut target, and add the
+ // description.
+ TCHAR path[MAX_PATH];
+ GetModuleFileName(NULL, path, SIZEOF(path));
+ psl->SetPath(path);
+ #if defined( _UNICODE )
+ TCHAR* p = mir_a2t( desc );
+ psl->SetDescription( p );
+ mir_free( p );
+ p = mir_a2t( args );
+ psl->SetArguments( p );
+ mir_free( p );
+ #else
+ psl->SetDescription(desc);
+ psl->SetArguments(args);
+ #endif
+
+ // Query IShellLink for the IPersistFile interface for saving the
+ // shortcut in persistent storage.
+ IPersistFile* ppf;
+ hres = psl->QueryInterface(IID_IPersistFile, ( void** )&ppf);
+
+ if (SUCCEEDED(hres)) {
+ #if defined( _UNICODE )
+ WCHAR* wsz = savePath;
+ #else
+ WCHAR wsz[MAX_PATH];
+
+ // Ensure that the string is ANSI.
+ MultiByteToWideChar(CP_ACP, 0, savePath, -1, wsz, MAX_PATH);
+ #endif
+
+ // Save the link by calling IPersistFile::Save.
+ hres = ppf->Save(wsz, TRUE);
+ ppf->Release();
+ }
+ psl->Release();
+ }
+
+ free(args);
+ free(desc);
+ return hres;
+}
+
+INT_PTR CALLBACK CmdlOptionsDlgProc(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ static TSettingsList* optionsProtoSettings;
+
+ switch(msg) {
+ case WM_INITDIALOG:
+ TranslateDialogDefault(hwndDlg);
+ {
+ optionsProtoSettings = (TSettingsList*)lParam;
+ char* cmdl = GetCMDL(*optionsProtoSettings);
+ SetDlgItemTextA(hwndDlg, IDC_CMDL, cmdl);
+ free(cmdl);
+ }
+ break;
+
+ case WM_COMMAND:
+ switch (LOWORD(wParam)) {
+ case IDC_COPY:
+ if ( OpenClipboard( hwndDlg )) {
+ EmptyClipboard();
+
+ char cmdl[2048];
+ GetDlgItemTextA(hwndDlg,IDC_CMDL, cmdl, sizeof(cmdl));
+ HGLOBAL cmdlGlob = GlobalAlloc(GMEM_MOVEABLE, sizeof(cmdl));
+ if (cmdlGlob == NULL) {
+ CloseClipboard();
+ break;
+ }
+ LPTSTR cmdlStr = ( LPTSTR )GlobalLock(cmdlGlob);
+ memcpy(cmdlStr, &cmdl, sizeof(cmdl));
+ GlobalUnlock(cmdlGlob);
+ SetClipboardData(CF_TEXT, cmdlGlob);
+ CloseClipboard();
+ }
+ break;
+
+ case IDC_SHORTCUT:
+ CreateLink(*optionsProtoSettings);
+ break;
+
+ case IDC_OK:
+ DestroyWindow(hwndDlg);
+ break;
+ }
+ break;
+
+ case WM_CLOSE:
+ DestroyWindow(hwndDlg);
+ break;
+
+ case WM_DESTROY:
+ delete optionsProtoSettings; optionsProtoSettings = 0;
+ break;
+ }
+
+ return 0;
+}
+
+static INT_PTR CALLBACK StartupStatusOptDlgProc(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ static BOOL bInitDone = FALSE;
+
+ switch(msg) {
+ case WM_INITDIALOG:
+ bInitDone = FALSE;
+
+ TranslateDialogDefault(hwndDlg);
+ CheckDlgButton(hwndDlg, IDC_SETPROFILE, DBGetContactSettingByte(NULL, MODULENAME, SETTING_SETPROFILE, 1)?TRUE:FALSE);
+ CheckDlgButton(hwndDlg, IDC_OVERRIDE, DBGetContactSettingByte(NULL, MODULENAME, SETTING_OVERRIDE, 1)?TRUE:FALSE);
+ CheckDlgButton(hwndDlg, IDC_SHOWDIALOG, DBGetContactSettingByte(NULL, MODULENAME, SETTING_SHOWDIALOG, 0)?TRUE:FALSE);
+ CheckDlgButton(hwndDlg, IDC_SETWINSTATE, DBGetContactSettingByte(NULL, MODULENAME, SETTING_SETWINSTATE, 0)?TRUE:FALSE);
+ CheckDlgButton(hwndDlg, IDC_SETWINLOCATION, DBGetContactSettingByte(NULL, MODULENAME, SETTING_SETWINLOCATION, 0)?TRUE:FALSE);
+ CheckDlgButton(hwndDlg, IDC_SETDOCKED, DBGetContactSettingByte(NULL, MODULENAME, SETTING_SETDOCKED, 0)?TRUE:FALSE);
+ CheckDlgButton(hwndDlg, IDC_SETWINSIZE, DBGetContactSettingByte(NULL, MODULENAME, SETTING_SETWINSIZE, 0)?TRUE:FALSE);
+ CheckDlgButton(hwndDlg, IDC_OFFLINECLOSE, DBGetContactSettingByte(NULL, MODULENAME, SETTING_OFFLINECLOSE, 1)?TRUE:FALSE);
+ CheckDlgButton(hwndDlg, IDC_AUTODIAL, DBGetContactSettingByte(NULL, MODULENAME, SETTING_AUTODIAL, 0)?TRUE:FALSE);
+ CheckDlgButton(hwndDlg, IDC_AUTOHANGUP, DBGetContactSettingByte(NULL, MODULENAME, SETTING_AUTOHANGUP, 0)?TRUE:FALSE);
+ SetDlgItemInt(hwndDlg, IDC_SETPROFILEDELAY, DBGetContactSettingDword(NULL, MODULENAME, SETTING_SETPROFILEDELAY, 500), FALSE);
+ SetDlgItemInt(hwndDlg, IDC_DLGTIMEOUT, DBGetContactSettingDword(NULL, MODULENAME, SETTING_DLGTIMEOUT, 5), FALSE);
+ SetDlgItemInt(hwndDlg, IDC_XPOS, DBGetContactSettingDword(NULL, MODULENAME, SETTING_XPOS, 0), TRUE);
+ SetDlgItemInt(hwndDlg, IDC_YPOS, DBGetContactSettingDword(NULL, MODULENAME, SETTING_YPOS, 0), TRUE);
+ SetDlgItemInt(hwndDlg, IDC_WIDTH, DBGetContactSettingDword(NULL, MODULENAME, SETTING_WIDTH, 0), FALSE);
+ SetDlgItemInt(hwndDlg, IDC_HEIGHT, DBGetContactSettingDword(NULL, MODULENAME, SETTING_HEIGHT, 0), FALSE);
+ {
+ int val = DBGetContactSettingByte(NULL, MODULENAME, SETTING_DOCKED, DOCKED_NONE);
+ int item = SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_ADDSTRING, 0, (LPARAM)TranslateT("Left"));
+ SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_SETITEMDATA, (WPARAM)item, (LPARAM)DOCKED_LEFT);
+ if (val == DOCKED_LEFT)
+ SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_SETCURSEL, (WPARAM)item, 0);
+
+ item = SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_ADDSTRING, 0, (LPARAM)TranslateT("Right"));
+ SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_SETITEMDATA, (WPARAM)item, (LPARAM)DOCKED_RIGHT);
+ if (val == DOCKED_RIGHT)
+ SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_SETCURSEL, (WPARAM)item, 0);
+
+ item = SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_ADDSTRING, 0, (LPARAM)TranslateT("None"));
+ SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_SETITEMDATA, (WPARAM)item, (LPARAM)DOCKED_NONE);
+ if (val == DOCKED_NONE)
+ SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_SETCURSEL, (WPARAM)item, 0);
+ }
+
+ EnableWindow(GetDlgItem(hwndDlg, IDC_PROFILE), IsDlgButtonChecked(hwndDlg, IDC_SETPROFILE)||IsDlgButtonChecked(hwndDlg, IDC_SHOWDIALOG));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_SETPROFILEDELAY), IsDlgButtonChecked(hwndDlg, IDC_SETPROFILE));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_OVERRIDE), IsDlgButtonChecked(hwndDlg, IDC_SETPROFILE));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DLGTIMEOUT), IsDlgButtonChecked(hwndDlg, IDC_SHOWDIALOG));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_WINSTATE), IsDlgButtonChecked(hwndDlg, IDC_SETWINSTATE));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_XPOS), IsDlgButtonChecked(hwndDlg, IDC_SETWINLOCATION));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_YPOS), IsDlgButtonChecked(hwndDlg, IDC_SETWINLOCATION));
+ SendMessage(hwndDlg, UM_REINITPROFILES, 0, 0);
+ SendMessage(hwndDlg, UM_REINITDOCKED, 0, 0);
+ SendMessage(hwndDlg, UM_REINITWINSTATE, 0, 0);
+ SendMessage(hwndDlg, UM_REINITWINSIZE, 0, 0);
+ SetTimer(hwndDlg, 0, 100, NULL);
+ bInitDone = TRUE;
+ break;
+
+ case WM_TIMER:
+ if ( !IsDlgButtonChecked(hwndDlg, IDC_SETWINLOCATION) && !IsDlgButtonChecked(hwndDlg, IDC_SETWINSIZE)) {
+ SetDlgItemTextA(hwndDlg, IDC_CURWINSIZE, "");
+ SetDlgItemTextA(hwndDlg, IDC_CURWINLOC, "");
+ break;
+ }
+ else {
+ TCHAR text[128];
+ mir_sntprintf(text, SIZEOF(text), TranslateT("size: %d x %d"),
+ DBGetContactSettingDword(NULL, MODULE_CLIST, SETTING_WIDTH, 0),
+ DBGetContactSettingDword(NULL, MODULE_CLIST, SETTING_HEIGHT, 0));
+ SetDlgItemText(hwndDlg, IDC_CURWINSIZE, text);
+
+ mir_sntprintf(text, SIZEOF(text), TranslateT("loc: %d x %d"),
+ DBGetContactSettingDword(NULL, MODULE_CLIST, SETTING_XPOS, 0),
+ DBGetContactSettingDword(NULL, MODULE_CLIST, SETTING_YPOS, 0));
+ SetDlgItemText(hwndDlg, IDC_CURWINLOC, text);
+ }
+ break;
+
+ case UM_REINITPROFILES:
+ // creates profile combo box according to 'dat'
+ SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_RESETCONTENT, 0, 0);
+ {
+ int defProfile;
+ int profileCount = GetProfileCount((WPARAM)&defProfile, 0);
+ for ( int i=0; i < profileCount; i++ ) {
+ char profileName[128];
+ if (GetProfileName((WPARAM)i, (LPARAM)profileName))
+ continue;
+
+ int item = SendDlgItemMessageA(hwndDlg, IDC_PROFILE, CB_ADDSTRING, 0, (LPARAM)profileName);
+ SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_SETITEMDATA, (WPARAM)item, (LPARAM)i);
+ }
+ SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_SETCURSEL, (WPARAM)defProfile, 0);
+ }
+ break;
+
+ case UM_REINITDOCKED:
+ EnableWindow(GetDlgItem(hwndDlg, IDC_SETDOCKED), DBGetContactSettingByte(NULL, MODULE_CLIST, SETTING_TOOLWINDOW, 1));
+ if (!IsWindowEnabled(GetDlgItem(hwndDlg,IDC_SETDOCKED)))
+ CheckDlgButton(hwndDlg, IDC_SETDOCKED, BST_UNCHECKED);
+
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DOCKED), IsDlgButtonChecked(hwndDlg, IDC_SETDOCKED));
+ break;
+
+ case UM_REINITWINSTATE:
+ {
+ int val = DBGetContactSettingByte(NULL, MODULENAME, SETTING_WINSTATE, SETTING_STATE_NORMAL);
+ SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_RESETCONTENT, 0, 0);
+
+ int item = SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_ADDSTRING, 0, (LPARAM)TranslateT("Hidden"));
+ SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_SETITEMDATA, (WPARAM)item, (LPARAM)SETTING_STATE_HIDDEN);
+ if (val == SETTING_STATE_HIDDEN)
+ SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_SETCURSEL, (WPARAM)item, 0);
+
+ if (!DBGetContactSettingByte(NULL, MODULE_CLIST, SETTING_TOOLWINDOW, 0)) {
+ item = SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_ADDSTRING, 0, (LPARAM)TranslateT("Minimized"));
+ SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_SETITEMDATA, (WPARAM)item, (LPARAM)SETTING_STATE_MINIMIZED);
+ if (val == SETTING_STATE_MINIMIZED)
+ SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_SETCURSEL, (WPARAM)item, 0);
+ }
+ item = SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_ADDSTRING, 0, (LPARAM)TranslateT("Normal"));
+ SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_SETITEMDATA, (WPARAM)item, (LPARAM)SETTING_STATE_NORMAL);
+ if ( val == SETTING_STATE_NORMAL || (val == SETTING_STATE_MINIMIZED) && DBGetContactSettingByte(NULL, MODULE_CLIST, SETTING_TOOLWINDOW, 0))
+ SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_SETCURSEL, (WPARAM)item, 0);
+ }
+ break;
+
+ case UM_REINITWINSIZE:
+ EnableWindow(GetDlgItem(hwndDlg, IDC_WIDTH), IsDlgButtonChecked(hwndDlg, IDC_SETWINSIZE));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_HEIGHT), !DBGetContactSettingByte(NULL, MODULE_CLUI, SETTING_AUTOSIZE, 0)&&IsDlgButtonChecked(hwndDlg, IDC_SETWINSIZE));
+
+ case WM_COMMAND:
+ if ( HIWORD(wParam) == BN_CLICKED || HIWORD(wParam) == LBN_SELCHANGE || HIWORD(wParam) == CBN_SELCHANGE || HIWORD(wParam) == EN_CHANGE )
+ if ( bInitDone )
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+
+ switch (LOWORD(wParam)) {
+ case IDC_SETPROFILE:
+ EnableWindow(GetDlgItem(hwndDlg, IDC_PROFILE), IsDlgButtonChecked(hwndDlg, IDC_SETPROFILE)||IsDlgButtonChecked(hwndDlg, IDC_SHOWDIALOG));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_SETPROFILEDELAY), IsDlgButtonChecked(hwndDlg, IDC_SETPROFILE));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_OVERRIDE), IsDlgButtonChecked(hwndDlg, IDC_SETPROFILE));
+ break;
+ case IDC_SHOWDIALOG:
+ EnableWindow(GetDlgItem(hwndDlg, IDC_PROFILE), IsDlgButtonChecked(hwndDlg, IDC_SETPROFILE)||IsDlgButtonChecked(hwndDlg, IDC_SHOWDIALOG));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DLGTIMEOUT), IsDlgButtonChecked(hwndDlg, IDC_SHOWDIALOG));
+ break;
+ case IDC_SETWINSTATE:
+ EnableWindow(GetDlgItem(hwndDlg, IDC_WINSTATE), IsDlgButtonChecked(hwndDlg, IDC_SETWINSTATE));
+ break;
+ case IDC_SETDOCKED:
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DOCKED), IsDlgButtonChecked(hwndDlg, IDC_SETDOCKED));
+ break;
+ case IDC_SETWINLOCATION:
+ EnableWindow(GetDlgItem(hwndDlg, IDC_XPOS), IsDlgButtonChecked(hwndDlg, IDC_SETWINLOCATION));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_YPOS), IsDlgButtonChecked(hwndDlg, IDC_SETWINLOCATION));
+ break;
+ case IDC_SETWINSIZE:
+ SendMessage(hwndDlg, UM_REINITWINSIZE, 0, 0);
+ break;
+ case IDC_SHOWCMDL:
+ {
+ int defProfile = (int)SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_GETITEMDATA,
+ SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_GETCURSEL, 0, 0), 0);
+
+ TSettingsList* ps = GetCurrentProtoSettings();
+ if ( ps ) {
+ GetProfile( defProfile, *ps );
+ for ( int i=0; i < ps->getCount(); i++ )
+ if ( (*ps)[i].szMsg != NULL )
+ (*ps)[i].szMsg = _strdup( (*ps)[i].szMsg );
+
+ CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_CMDLOPTIONS), hwndDlg, CmdlOptionsDlgProc, (LPARAM)ps);
+ }
+ break;
+ }
+ }
+ break;
+
+ case WM_SHOWWINDOW:
+ if (wParam == FALSE)
+ break;
+
+ bInitDone = FALSE;
+ SendMessage(hwndDlg, UM_REINITPROFILES, 0, 0);
+ SendMessage(hwndDlg, UM_REINITDOCKED, 0, 0);
+ SendMessage(hwndDlg, UM_REINITWINSTATE, 0, 0);
+ SendMessage(hwndDlg, UM_REINITWINSIZE, 0, 0);
+ bInitDone = TRUE;
+ break;
+
+ case WM_NOTIFY:
+ if (((LPNMHDR)lParam)->code == PSN_APPLY) {
+ int val;
+
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_SETPROFILE, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_SETPROFILE));
+ if (IsDlgButtonChecked(hwndDlg, IDC_SETPROFILE))
+ DBWriteContactSettingDword(NULL, MODULENAME, SETTING_SETPROFILEDELAY, GetDlgItemInt(hwndDlg, IDC_SETPROFILEDELAY, NULL, FALSE));
+
+ if (IsDlgButtonChecked(hwndDlg, IDC_SETPROFILE) || IsDlgButtonChecked(hwndDlg, IDC_SHOWDIALOG)) {
+ val = (int)SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_GETITEMDATA,
+ SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_GETCURSEL, 0, 0), 0);
+ DBWriteContactSettingWord(NULL, MODULENAME, SETTING_DEFAULTPROFILE, (WORD)val);
+ }
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_OVERRIDE, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_OVERRIDE));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_SHOWDIALOG, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_SHOWDIALOG));
+ if (IsDlgButtonChecked(hwndDlg, IDC_SHOWDIALOG))
+ DBWriteContactSettingDword(NULL, MODULENAME, SETTING_DLGTIMEOUT, GetDlgItemInt(hwndDlg, IDC_DLGTIMEOUT, NULL, FALSE));
+
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_SETWINSTATE, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_SETWINSTATE));
+ if (IsDlgButtonChecked(hwndDlg, IDC_SETWINSTATE)) {
+ val = (int)SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_GETITEMDATA,
+ SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_GETCURSEL, 0, 0), 0);
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_WINSTATE, (BYTE)val);
+ }
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_SETDOCKED, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_SETDOCKED));
+ if (IsDlgButtonChecked(hwndDlg, IDC_SETDOCKED)) {
+ val = (int)SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_GETITEMDATA,
+ SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_GETCURSEL, 0, 0), 0);
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_DOCKED, (BYTE)val);
+ }
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_SETWINLOCATION, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_SETWINLOCATION));
+ if (IsDlgButtonChecked(hwndDlg, IDC_SETWINLOCATION)) {
+ DBWriteContactSettingDword(NULL, MODULENAME, SETTING_XPOS, GetDlgItemInt(hwndDlg, IDC_XPOS, NULL, TRUE));
+ DBWriteContactSettingDword(NULL, MODULENAME, SETTING_YPOS, GetDlgItemInt(hwndDlg, IDC_YPOS, NULL, TRUE));
+ }
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_SETWINSIZE, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_SETWINSIZE));
+ if (IsDlgButtonChecked(hwndDlg, IDC_SETWINSIZE)) {
+ DBWriteContactSettingDword(NULL, MODULENAME, SETTING_WIDTH, GetDlgItemInt(hwndDlg, IDC_WIDTH, NULL, FALSE));
+ DBWriteContactSettingDword(NULL, MODULENAME, SETTING_HEIGHT, GetDlgItemInt(hwndDlg, IDC_HEIGHT, NULL, FALSE));
+ }
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_OFFLINECLOSE, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_OFFLINECLOSE));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_AUTODIAL, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_AUTODIAL));
+ DBWriteContactSettingByte(NULL, MODULENAME, SETTING_AUTOHANGUP, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_AUTOHANGUP));
+ }
+ break;
+ }
+
+ return FALSE;
+}
+
+static INT_PTR CALLBACK StatusProfilesOptDlgProc(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ static PROFILEOPTIONS *dat = NULL;
+ static int profileCount = 0;
+ static BOOL bNeedRebuildMenu = FALSE;
+ static BOOL bInitDone = FALSE;
+
+ dat = (PROFILEOPTIONS *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
+ switch(msg) {
+ case WM_INITDIALOG: {
+ int i, j, defProfile;
+
+ bInitDone = false;
+
+ TranslateDialogDefault(hwndDlg);
+ if (ServiceExists(MS_CLIST_ADDSTATUSMENUITEM))
+ SetDlgItemText(hwndDlg, IDC_CREATEMMI, TranslateT("Create a status menu item"));
+
+ profileCount = GetProfileCount((WPARAM)&defProfile, 0);
+ if (profileCount == 0) {
+ profileCount = 1;
+ defProfile = 0;
+ }
+ dat = ( PROFILEOPTIONS* )malloc(profileCount*sizeof(PROFILEOPTIONS));
+ ZeroMemory(dat, profileCount*sizeof(PROFILEOPTIONS));
+ for (i=0;i<profileCount;i++) {
+ dat[i].ps = GetCurrentProtoSettings();
+ TSettingsList& ar = *dat[i].ps;
+
+ if ( GetProfile( i, ar ) == -1) {
+ /* create an empty profile */
+ if (i == defProfile)
+ dat[i].szName = _strdup(Translate("default"));
+ else
+ dat[i].szName = _strdup(Translate("unknown"));
+ }
+ else {
+ for ( j=0; j < ar.getCount(); j++ )
+ if ( ar[j].szMsg != NULL)
+ ar[j].szMsg = _strdup( ar[j].szMsg );
+
+ dat[i].szName = dbi_getAs(i, SETTING_PROFILENAME, NULL);
+ if (dat[i].szName == NULL) {
+ if (i == defProfile)
+ dat[i].szName = _strdup(Translate("default"));
+ else
+ dat[i].szName = _strdup(Translate("unknown"));
+ }
+ dat[i].createTtb = dbi_getb(i, SETTING_CREATETTBBUTTON, 0);
+ dat[i].showDialog = dbi_getb(i, SETTING_SHOWCONFIRMDIALOG, 0);
+ dat[i].createMmi = dbi_getb(i, SETTING_CREATEMMITEM, 0);
+ dat[i].inSubMenu = dbi_getb(i, SETTING_INSUBMENU, 1);
+ dat[i].regHotkey = dbi_getb(i, SETTING_REGHOTKEY, 0);
+ dat[i].hotKey = dbi_getw(i, SETTING_HOTKEY, MAKEWORD((char)('0'+i), HOTKEYF_CONTROL|HOTKEYF_SHIFT));
+ }
+ }
+ if ( !ServiceExists( MS_TTB_ADDBUTTON ) && !ServiceExists( MS_TB_ADDBUTTON ))
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CREATETTB), FALSE);
+
+ SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)dat);
+ SendMessage(hwndDlg, UM_REINITPROFILES, 0, 0);
+ ShowWindow(GetDlgItem(hwndDlg, IDC_VARIABLESHELP), ServiceExists(MS_VARS_SHOWHELPEX)?SW_SHOW:SW_HIDE);
+ bInitDone = true;
+ break;
+ }
+
+ case UM_REINITPROFILES:
+ bInitDone = false;
+ {
+ // creates profile combo box according to 'dat'
+ SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_RESETCONTENT, 0, 0);
+ for (int i=0; i < profileCount; i++ ) {
+ int item = SendDlgItemMessageA(hwndDlg, IDC_PROFILE, CB_ADDSTRING, 0, (LPARAM)dat[i].szName);
+ SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_SETITEMDATA, (WPARAM)item, (LPARAM)i);
+ }
+ SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_SETCURSEL, 0, 0);
+ SendMessage(hwndDlg, UM_SETPROFILE, 0, 0);
+ }
+ bInitDone = true;
+ break;
+
+ case UM_SETPROFILE:
+ {
+ int sel = (int)SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_GETITEMDATA,
+ SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_GETCURSEL, 0, 0), 0);
+ CheckDlgButton(hwndDlg, IDC_CREATETTB, dat[sel].createTtb?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_SHOWDIALOG, dat[sel].showDialog?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CREATEMMI, dat[sel].createMmi?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_INSUBMENU, dat[sel].inSubMenu?BST_CHECKED:BST_UNCHECKED);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_INSUBMENU), IsDlgButtonChecked(hwndDlg, IDC_CREATEMMI));
+ CheckDlgButton(hwndDlg, IDC_REGHOTKEY, dat[sel].regHotkey?BST_CHECKED:BST_UNCHECKED);
+ SendDlgItemMessage(hwndDlg, IDC_HOTKEY, HKM_SETHOTKEY, dat[sel].hotKey, 0);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_HOTKEY), IsDlgButtonChecked(hwndDlg, IDC_REGHOTKEY));
+ SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, LB_RESETCONTENT, 0, 0);
+
+ // fill proto list
+ TSettingsList& ar = *dat[sel].ps;
+ for ( int i=0; i < ar.getCount(); i++ ) {
+ int item = SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, LB_ADDSTRING, 0, (LPARAM)ar[i].tszAccName );
+ SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, LB_SETITEMDATA, (WPARAM)item, (LPARAM)&ar[i]);
+ }
+ SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, LB_SETCURSEL, 0, 0);
+ SendMessage(hwndDlg, UM_SETPROTOCOL, 0, 0);
+ }
+ break;
+
+ case UM_SETPROTOCOL:
+ {
+ int idx = SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, LB_GETCURSEL, 0, 0);
+ if ( idx != -1 ) {
+ // fill status box
+ TSSSetting* ps = ( TSSSetting* )SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, LB_GETITEMDATA, idx, 0);
+
+ int flags = (CallProtoService(ps->szName, PS_GETCAPS, PFLAGNUM_2, 0))&~(CallProtoService(ps->szName, PS_GETCAPS, PFLAGNUM_5, 0));
+ SendDlgItemMessage(hwndDlg, IDC_STATUS, LB_RESETCONTENT, 0, 0);
+ for ( int i=0; i < SIZEOF(statusModeList); i++ ) {
+ if ( (flags&statusModePf2List[i]) || (statusModeList[i] == ID_STATUS_OFFLINE)) {
+ TCHAR* szStatus = ( TCHAR* )CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION, statusModeList[i], GSMDF_TCHAR);
+ if ( szStatus != NULL ) {
+ int item = SendDlgItemMessage(hwndDlg, IDC_STATUS, LB_ADDSTRING, 0, (LPARAM)szStatus);
+ SendDlgItemMessage(hwndDlg, IDC_STATUS, LB_SETITEMDATA, (WPARAM)item, (LPARAM)statusModeList[i]);
+ if (ps->status == statusModeList[i])
+ SendDlgItemMessage(hwndDlg, IDC_STATUS, LB_SETCURSEL, (WPARAM)item, 0);
+ } } }
+
+ int item = SendDlgItemMessage(hwndDlg, IDC_STATUS, LB_ADDSTRING, 0, (LPARAM)TranslateT("<current>"));
+ SendDlgItemMessage(hwndDlg, IDC_STATUS, LB_SETITEMDATA, (WPARAM)item, (LPARAM)ID_STATUS_CURRENT);
+ if (ps->status == ID_STATUS_CURRENT)
+ SendDlgItemMessage(hwndDlg, IDC_STATUS, LB_SETCURSEL, (WPARAM)item, 0);
+
+ item = SendDlgItemMessage(hwndDlg, IDC_STATUS, LB_ADDSTRING, 0, (LPARAM)TranslateT("<last>"));
+ SendDlgItemMessage(hwndDlg, IDC_STATUS, LB_SETITEMDATA, (WPARAM)item, (LPARAM)ID_STATUS_LAST);
+ if (ps->status == ID_STATUS_LAST)
+ SendDlgItemMessage(hwndDlg, IDC_STATUS, LB_SETCURSEL, (WPARAM)item, 0);
+ }
+
+ SendMessage(hwndDlg, UM_SETSTATUSMSG, 0, 0);
+ }
+ break;
+
+ case UM_SETSTATUSMSG:
+ {
+ // set status message
+ BOOL bStatusMsg = FALSE;
+ int idx = SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, LB_GETCURSEL, 0, 0);
+ if ( idx != -1 ) {
+ TSSSetting* ps = ( TSSSetting* )SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, LB_GETITEMDATA, idx, 0);
+
+ CheckRadioButton(hwndDlg, IDC_MIRANDAMSG, IDC_CUSTOMMSG, ps->szMsg!=NULL?IDC_CUSTOMMSG:IDC_MIRANDAMSG);
+ if (ps->szMsg != NULL)
+ SetDlgItemTextA(hwndDlg, IDC_STATUSMSG, ps->szMsg);
+
+ bStatusMsg = ( (((CallProtoService(ps->szName, PS_GETCAPS, (WPARAM)PFLAGNUM_1, 0)&PF1_MODEMSGSEND&~PF1_INDIVMODEMSG)) &&
+ (CallProtoService(ps->szName, PS_GETCAPS, (WPARAM)PFLAGNUM_3, 0)&Proto_Status2Flag(ps->status))) || (ps->status == ID_STATUS_CURRENT) || (ps->status == ID_STATUS_LAST) );
+ }
+ EnableWindow(GetDlgItem(hwndDlg, IDC_MIRANDAMSG), bStatusMsg);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CUSTOMMSG), bStatusMsg);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_STATUSMSG), bStatusMsg&&IsDlgButtonChecked(hwndDlg, IDC_CUSTOMMSG));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_VARIABLESHELP), bStatusMsg&&IsDlgButtonChecked(hwndDlg, IDC_CUSTOMMSG));
+ }
+ break;
+
+ case UM_ADDPROFILE:
+ {
+ char *szName = (char *)lParam;
+ if (szName == NULL)
+ break;
+
+ dat = ( PROFILEOPTIONS* )realloc(dat, (profileCount+1)*sizeof(PROFILEOPTIONS));
+ ZeroMemory(&dat[profileCount], sizeof(PROFILEOPTIONS));
+ dat[profileCount].szName = _strdup(szName);
+ dat[profileCount].ps = GetCurrentProtoSettings();
+ profileCount += 1;
+ SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)dat);
+ SendMessage(hwndDlg, UM_REINITPROFILES, 0, 0);
+ }
+ break;
+
+ case UM_DELPROFILE: {
+ // wparam == profile no
+ int i, defProfile;
+
+ i = (int)wParam;
+ if (profileCount == 1) {
+ MessageBox(NULL, TranslateT("At least one profile must exist"), TranslateT("StartupStatus"), MB_OK);
+ break;
+ }
+
+ if (dat[i].ps != NULL)
+ dat[i].ps->destroy();
+
+ if (dat[i].szName != NULL)
+ free(dat[i].szName);
+
+ MoveMemory(&dat[i], &dat[i+1], (profileCount-i-1)*sizeof(PROFILEOPTIONS));
+ dat = ( PROFILEOPTIONS* )realloc(dat, (profileCount-1)*sizeof(PROFILEOPTIONS));
+ profileCount -= 1;
+ GetProfileCount((WPARAM)&defProfile, 0);
+ if (i == defProfile) {
+ MessageBox(NULL, TranslateT("Your default profile will be changed"), TranslateT("StartupStatus"), MB_OK);
+ DBWriteContactSettingWord(NULL, MODULENAME, SETTING_DEFAULTPROFILE, 0);
+ defProfile = 0;
+ }
+ SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)dat);
+ SendMessage(hwndDlg, UM_REINITPROFILES, 0, 0);
+ break;
+ }
+
+ case WM_COMMAND:
+ if ( ((HIWORD(wParam) == EN_CHANGE) || (HIWORD(wParam) == BN_CLICKED) || (HIWORD(wParam) == LBN_SELCHANGE)) && ((HWND)lParam == GetFocus()) )
+ if ( bInitDone )
+ SendMessage(GetParent(hwndDlg),PSM_CHANGED,0,0);
+
+ switch (LOWORD(wParam)) {
+ case IDC_STATUS:
+ if (HIWORD(wParam) == LBN_SELCHANGE) {
+ int idx = SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, LB_GETCURSEL, 0, 0);
+ if ( idx != -1 ) {
+ TSSSetting* ps = ( TSSSetting* )SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, LB_GETITEMDATA, idx, 0);
+ ps->status = (int)SendDlgItemMessage(hwndDlg, IDC_STATUS, LB_GETITEMDATA,
+ SendDlgItemMessage(hwndDlg, IDC_STATUS, LB_GETCURSEL, 0, 0), 0);
+ }
+ SendMessage(hwndDlg, UM_SETSTATUSMSG, 0, 0);
+ }
+ break;
+
+ case IDC_PROFILE:
+ if (HIWORD(wParam) != CBN_SELCHANGE)
+ break;
+
+ SendMessage(hwndDlg, UM_SETPROFILE, 0, 0);
+ break;
+
+ case IDC_PROTOCOL:
+ if (HIWORD(wParam) != LBN_SELCHANGE)
+ break;
+
+ SendMessage(hwndDlg, UM_SETPROTOCOL, 0, 0);
+ break;
+
+ case IDC_MIRANDAMSG:
+ case IDC_CUSTOMMSG:
+ {
+ int len;
+ TSSSetting* ps = ( TSSSetting* )SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, LB_GETITEMDATA,
+ SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, LB_GETCURSEL, 0, 0), 0);
+ if (ps->szMsg != NULL)
+ free(ps->szMsg);
+
+ ps->szMsg = NULL;
+ if (IsDlgButtonChecked(hwndDlg, IDC_CUSTOMMSG)) {
+ len = SendDlgItemMessage(hwndDlg, IDC_STATUSMSG, WM_GETTEXTLENGTH, 0, 0);
+ ps->szMsg = (char *)malloc(len+1);
+ memset(ps->szMsg, '\0', len+1);
+ SendDlgItemMessage(hwndDlg, IDC_STATUSMSG, WM_GETTEXT, (WPARAM)len+1, (LPARAM)ps->szMsg);
+ }
+ SendMessage(hwndDlg, UM_SETSTATUSMSG, 0, 0);
+ }
+ break;
+
+ case IDC_STATUSMSG:
+ if (HIWORD(wParam) == EN_CHANGE) {
+ // update the status message in memory, this is done on each character tick, not nice
+ // but it works
+ TSSSetting* ps = ( TSSSetting* )SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, LB_GETITEMDATA,
+ SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, LB_GETCURSEL, 0, 0), 0);
+ if (ps->szMsg != NULL) {
+ if ( *ps->szMsg )
+ free(ps->szMsg);
+ ps->szMsg = NULL;
+ }
+ int len = SendDlgItemMessageA(hwndDlg, IDC_STATUSMSG, WM_GETTEXTLENGTH, 0, 0);
+ ps->szMsg = (char *)malloc(len+1);
+ memset(ps->szMsg, '\0', len+1);
+ SendDlgItemMessageA(hwndDlg, IDC_STATUSMSG, WM_GETTEXT, (WPARAM)len+1, (LPARAM)ps->szMsg);
+ }
+ break;
+
+ case IDC_CREATEMMI:
+ EnableWindow(GetDlgItem(hwndDlg, IDC_INSUBMENU), IsDlgButtonChecked(hwndDlg, IDC_CREATEMMI));
+ case IDC_INSUBMENU:
+ bNeedRebuildMenu = TRUE;
+ case IDC_REGHOTKEY:
+ case IDC_CREATETTB:
+ case IDC_SHOWDIALOG:
+ {
+ int sel = (int)SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_GETITEMDATA,
+ SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_GETCURSEL, 0, 0), 0);
+ dat[sel].createMmi = IsDlgButtonChecked(hwndDlg, IDC_CREATEMMI);
+ dat[sel].inSubMenu = IsDlgButtonChecked(hwndDlg, IDC_INSUBMENU);
+ dat[sel].createTtb = IsDlgButtonChecked(hwndDlg, IDC_CREATETTB);
+ dat[sel].regHotkey = IsDlgButtonChecked(hwndDlg, IDC_REGHOTKEY);
+ dat[sel].showDialog = IsDlgButtonChecked(hwndDlg, IDC_SHOWDIALOG);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_HOTKEY), IsDlgButtonChecked(hwndDlg, IDC_REGHOTKEY));
+ }
+ break;
+
+ case IDC_HOTKEY:
+ if (HIWORD(wParam) == EN_CHANGE) {
+ int sel = (int)SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_GETITEMDATA,
+ SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_GETCURSEL, 0, 0), 0);
+ dat[sel].hotKey = (WORD)SendDlgItemMessage(hwndDlg, IDC_HOTKEY, HKM_GETHOTKEY, 0, 0);
+ }
+ break;
+
+ case IDC_ADDPROFILE:
+ // add a profile
+ CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_ADDPROFILE), hwndDlg, addProfileDlgProc, (LPARAM)hwndDlg);
+ EnableWindow(hwndDlg, FALSE);
+ break;
+
+ case IDC_DELPROFILE:
+ {
+ int sel = (int)SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_GETITEMDATA,
+ SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_GETCURSEL, 0, 0), 0);
+ SendMessage(hwndDlg, UM_DELPROFILE, (WPARAM)sel, 0);
+ }
+ break;
+
+ case IDC_VARIABLESHELP:
+ variables_showhelp(hwndDlg, IDC_STATUSMSG, VHF_INPUT|VHF_EXTRATEXT|VHF_HELP|VHF_FULLFILLSTRUCT|VHF_HIDESUBJECTTOKEN, NULL, "Protocol ID");
+ break;
+ }
+ break;
+
+ case WM_NOTIFY:
+ if (((LPNMHDR)lParam)->code == PSN_APPLY) {
+ int oldCount, i, j;
+ char setting[128];
+
+ oldCount = DBGetContactSettingWord(NULL, MODULENAME, SETTING_PROFILECOUNT, 0);
+ for (i=0;i<oldCount;i++) {
+ mir_snprintf(setting, sizeof(setting), "%d_", i);
+ ClearDatabase(setting);
+ }
+ for (i=0;i<profileCount;i++) {
+ dbi_setb(i, SETTING_SHOWCONFIRMDIALOG, dat[i].showDialog);
+ dbi_setb(i, SETTING_CREATETTBBUTTON, dat[i].createTtb);
+ dbi_setb(i, SETTING_CREATEMMITEM, dat[i].createMmi);
+ dbi_setb(i, SETTING_INSUBMENU, dat[i].inSubMenu);
+ dbi_setb(i, SETTING_REGHOTKEY, dat[i].regHotkey);
+ dbi_setw(i, SETTING_HOTKEY, dat[i].hotKey);
+ dbi_setAs(i, SETTING_PROFILENAME, dat[i].szName);
+
+ TSettingsList& ar = *dat[i].ps;
+ for ( j=0; j < ar.getCount(); j++ ) {
+ if ( ar[j].szMsg != NULL ) {
+ mir_snprintf(setting, sizeof(setting), "%s_%s", ar[j].szName, SETTING_PROFILE_STSMSG);
+ dbi_setAs(i, setting, ar[j].szMsg);
+ }
+ dbi_setw(i, ar[j].szName, ar[j].status);
+ }
+ }
+ DBWriteContactSettingWord(NULL, MODULENAME, SETTING_PROFILECOUNT, (WORD)profileCount);
+
+ if (bNeedRebuildMenu) {
+ // Rebuild status menu
+ CLIST_INTERFACE* pcli = ( CLIST_INTERFACE* )CallService( MS_CLIST_RETRIEVE_INTERFACE, 0, 0 );
+ if ( pcli && pcli->version > 4 )
+ pcli->pfnReloadProtoMenus();
+ }
+ LoadMainOptions();
+ }
+ break;
+
+ case WM_DESTROY:
+ {
+ for ( int i=0; i < profileCount; i++ ) {
+ delete dat[i].ps;
+
+ if (dat[i].szName != NULL)
+ free(dat[i].szName);
+ }
+ free( dat ); dat = NULL;
+ break;
+ } }
+
+ return 0;
+}
+
+INT_PTR CALLBACK addProfileDlgProc(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ static HWND hwndParent;
+
+ switch(msg) {
+ case WM_INITDIALOG:
+ TranslateDialogDefault(hwndDlg);
+ hwndParent = (HWND)lParam;
+ EnableWindow(GetDlgItem(hwndDlg, IDC_OK), FALSE);
+ break;
+
+ case WM_COMMAND:
+ if (LOWORD(wParam) == IDC_OK) {
+ char profileName[128];
+ GetDlgItemTextA(hwndDlg, IDC_PROFILENAME, profileName, sizeof(profileName));
+ SendMessage(hwndParent, UM_ADDPROFILE, 0, (LPARAM)profileName);
+ // done and exit
+ DestroyWindow(hwndDlg);
+ }
+ else if (LOWORD(wParam) == IDC_CANCEL) {
+ DestroyWindow(hwndDlg);
+ }
+ else if (LOWORD(wParam) == IDC_PROFILENAME) {
+ (SendDlgItemMessage(hwndDlg,IDC_PROFILENAME,EM_LINELENGTH,0,0) > 0)?EnableWindow(GetDlgItem(hwndDlg, IDC_OK), TRUE):EnableWindow(GetDlgItem(hwndDlg, IDC_OK), FALSE);
+ }
+ break;
+
+ case WM_DESTROY:
+ EnableWindow(hwndParent, TRUE);
+ break;
+ }
+
+ return 0;
+}
+
+int OptionsInit(WPARAM wparam,LPARAM lparam)
+{
+ OPTIONSDIALOGPAGE odp = { 0 };
+ odp.cbSize = sizeof(odp);
+ odp.hInstance = hInst;
+ odp.pszGroup = LPGEN("Status");
+ odp.pszTitle = LPGEN("StartupStatus");
+ odp.flags = ODPF_BOLDGROUPS;
+
+ odp.pszTab = LPGEN("General");
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_STARTUPSTATUS);
+ odp.pfnDlgProc = StartupStatusOptDlgProc;
+ CallService(MS_OPT_ADDPAGE,wparam,(LPARAM)&odp);
+
+ odp.pszTab = LPGEN("Status Profiles");
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_STATUSPROFILES);
+ odp.pfnDlgProc = StatusProfilesOptDlgProc;
+ CallService(MS_OPT_ADDPAGE,wparam,(LPARAM)&odp);
+
+ return 0;
+}
+
+// from: http://www.codeproject.com/winhelp/msdnintegrator/
+#ifdef _UNICODE
+ static const CHAR _szSpecialFolderPath[] = "SHGetSpecialFolderPathW";
+#else
+ static const CHAR _szSpecialFolderPath[] = "SHGetSpecialFolderPathA";
+#endif
+
+BOOL MyGetSpecialFolderPath(HWND hwndOwner, LPTSTR lpszPath, int nFolder, BOOL fCreate)
+{
+ typedef int (WINAPI* _SHGET)(HWND, LPTSTR, int, BOOL);
+
+ // Get a function pointer to SHGetSpecialFolderPath(...) from
+ // Shell32.dll, if this returns NULL then check ShFolder.dll...
+ _SHGET pfn = (_SHGET)GetProcAddress( LoadLibraryA( "Shell32.dll" ), _szSpecialFolderPath);
+ if (pfn == NULL) {
+ // Try to get the function pointer from ShFolder.dll, if pfn is still
+ // NULL then we have bigger problems...
+ pfn = (_SHGET)GetProcAddress( LoadLibraryA("ShFolder.dll"), _szSpecialFolderPath);
+ if (pfn == NULL)
+ return FALSE;
+ }
+
+ return pfn(hwndOwner, lpszPath, nFolder, fCreate);
+}
+
+// end: from: http://www.codeproject.com/winhelp/msdnintegrator/
+static int ClearDatabase(char* filter)
+{
+ DBCONTACTENUMSETTINGS dbces;
+ char** settings;
+ int i, settingCount;
+
+ settingCount = 0;
+ settingIndex = 0;
+ dbces.szModule = MODULENAME;
+ dbces.lParam = (LPARAM)&settingCount;
+ dbces.pfnEnumProc = CountSettings;
+ CallService(MS_DB_CONTACT_ENUMSETTINGS,(WPARAM)NULL,(LPARAM)&dbces);
+
+ settings = ( char** )malloc(settingCount*sizeof(char*));
+ dbces.lParam = (LPARAM)&settings;
+ dbces.pfnEnumProc = DeleteSetting;
+ CallService(MS_DB_CONTACT_ENUMSETTINGS,(WPARAM)NULL,(LPARAM)&dbces);
+ for (i=0;i<settingCount;i++) {
+ if ((filter == NULL) || (!strncmp(filter, settings[i], strlen(filter))))
+ DBDeleteContactSetting(NULL, MODULENAME, settings[i]);
+ free(settings[i]);
+ }
+ free(settings);
+ // < v0.0.0.9
+ if (filter == NULL) DBDeleteContactSetting(NULL, "AutoAway", "Confirm");
+
+ return 0;
+}
+
+static int CountSettings(const char *szSetting,LPARAM lParam)
+{
+ *(int *)lParam += 1;
+
+ return 0;
+}
+
+static int DeleteSetting(const char *szSetting,LPARAM lParam)
+{
+ char** settings = (char**)*(char ***)lParam;
+ settings[settingIndex] = ( char* )malloc(strlen(szSetting)+1);
+ strcpy(settings[settingIndex], szSetting);
+ settingIndex += 1;
+
+ return 0;
+}
diff --git a/plugins/StatusPlugins/StartupStatus/pack.cmd b/plugins/StatusPlugins/StartupStatus/pack.cmd
new file mode 100644
index 0000000000..ad14c865d0
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/pack.cmd
@@ -0,0 +1,42 @@
+@echo off
+set PluginName=StartupStatus
+nmake -f %PluginName%.mak CFG="%PluginName% - Win32 Release"
+nmake -f %PluginName%.mak CFG="%PluginName% - Win32 Release Unicode"
+if errorlevel 1 (
+ echo "Make failed"
+ goto :eof )
+
+del "%temp%\%PluginName%.zip" > nul
+del "%temp%\%PluginName%W.zip" > nul
+del "%temp%\%PluginName%Src.zip" > nul
+del *.user > nul
+
+rd /S /Q Release
+rd /S /Q Release_Unicode
+
+for /F "tokens=1-6 delims=, " %%i in (buildnumber.h) do call :Translate %%i %%j %%k %%l %%m %%n
+
+"%PROGRAMFILES%\7-zip\7z.exe" a -tzip -r- -mx=9 "%temp%\%PluginName%.zip" ../../../bin/Release/Plugins/%PluginName%.dll ../statusplugins-translation.txt ../m_statusplugins.h
+del ../../../bin/Release/Plugins/%PluginName%.dll >nul
+
+"%PROGRAMFILES%\7-zip\7z.exe" a -tzip -r- -mx=9 "%temp%\%PluginName%W.zip" "../../../bin/Release Unicode/Plugins/%PluginName%.dll" ../statusplugins-translation.txt ../m_statusplugins.h
+del "../../../bin/Release Unicode/Plugins/%PluginName%.dll" >nul
+
+if exist "%PROGRAMFILES%\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe" (
+ "%PROGRAMFILES%\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe" StartupStatus_9.vcproj /Build "Release Unicode|x64"
+ copy "Release Unicode64\Plugins\%PluginName%.dll" .
+ "%PROGRAMFILES%\7-zip\7z.exe" a -tzip -r0 -mx=9 "%temp%\%PluginName%64.zip" %PluginName%.dll ../statusplugins-translation.txt ../m_statusplugins.h
+ del %PluginName%.dll
+ rd /S /Q "Release Unicode64" )
+
+cd ../..
+"%PROGRAMFILES%\7-zip\7z.exe" a -tzip -r0 -mx=9 "%temp%\%PluginName%Src.zip" -ir!helpers/*.* -ir!StatusPlugins/*.* -ir!NewTriggerPlugin/*.* -xr!StatusPlugins/AdvancedAutoAway/* -xr!StatusPlugins/KeepStatus/* -xr!.svn -x!*.cmd
+goto :eof
+
+:Translate
+if %2 == __FILEVERSION_STRING (
+ pushd ..
+ perl lpgen.pl status version %3 %4 %5 %6
+ popd)
+
+goto :eof
diff --git a/plugins/StatusPlugins/StartupStatus/profiles.cpp b/plugins/StatusPlugins/StartupStatus/profiles.cpp
new file mode 100644
index 0000000000..c6f4298f19
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/profiles.cpp
@@ -0,0 +1,423 @@
+/*
+ StartupStatus Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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 "../commonstatus.h"
+#include "startupstatus.h"
+#include "../resource.h"
+#include <commctrl.h>
+
+#include <m_icolib.h>
+
+#define MAX_MMITEMS 6
+
+extern HINSTANCE hInst;
+extern int protoCount;
+
+static int menuprofiles[MAX_MMITEMS];
+static HANDLE hProfileServices[MAX_MMITEMS];
+static int mcount = 0;
+
+static PROFILECE *pce = NULL;
+static int pceCount = 0;
+
+static UINT_PTR releaseTtbTimerId = 0;
+
+static HANDLE hPrebuildProfilesMenu = NULL;
+static HANDLE hTBModuleLoadedHook;
+static HANDLE hTTBModuleLoadedHook;
+static HANDLE hLoadAndSetProfileService;
+static HANDLE hMessageHook = NULL;
+
+static HWND hMessageWindow = NULL;
+static HKINFO *hkInfo = NULL;
+static int hkiCount = 0;
+
+static HANDLE* ttbButtons = NULL;
+static int ttbButtonCount = 0;
+
+// these are some lame functions, if you have a better solution, mail me. :s
+static INT_PTR profileService0(WPARAM wParam, LPARAM lParam)
+{
+ LoadAndSetProfile((WPARAM)menuprofiles[0], 0);
+ return 0;
+}
+
+static INT_PTR profileService1(WPARAM wParam, LPARAM lParam)
+{
+ LoadAndSetProfile((WPARAM)menuprofiles[1], 0);
+ return 0;
+}
+
+static INT_PTR profileService2(WPARAM wParam, LPARAM lParam)
+{
+ LoadAndSetProfile((WPARAM)menuprofiles[2], 0);
+ return 0;
+}
+
+static INT_PTR profileService3(WPARAM wParam, LPARAM lParam)
+{
+ LoadAndSetProfile((WPARAM)menuprofiles[3], 0);
+ return 0;
+}
+
+static INT_PTR profileService4(WPARAM wParam, LPARAM lParam)
+{
+ LoadAndSetProfile((WPARAM)menuprofiles[4], 0);
+ return 0;
+}
+
+static INT_PTR profileService5(WPARAM wParam, LPARAM lParam)
+{
+ LoadAndSetProfile((WPARAM)menuprofiles[5], 0);
+ return 0;
+}
+
+static int CreateMainMenuItems(WPARAM wParam, LPARAM lParam)
+{
+ CLISTMENUITEM mi;
+ char profilename[128], servicename[128];
+ int i, count;
+
+ ZeroMemory(&mi, sizeof(mi));
+ mi.cbSize = sizeof(mi);
+ mi.popupPosition = 2000100000;
+ mcount = 0;
+ count = GetProfileCount(0, 0);
+ for (i=0;i<count;i++) {
+ if ( !dbi_getb(i, SETTING_CREATEMMITEM, 0) || GetProfileName((WPARAM)i, (LPARAM)profilename))
+ continue;
+
+ if (dbi_getb(i, SETTING_INSUBMENU, 1))
+ mi.pszPopupName = Translate("StatusProfiles");
+
+ mi.pszName = profilename;
+ mi.position = 2000100000 + mcount;
+ mir_snprintf(servicename, sizeof(servicename), "%s%d", MS_SS_MENUSETPROFILEPREFIX, mcount);
+ switch(mcount) {
+ case 0:
+ hProfileServices[mcount] = CreateServiceFunction(servicename, profileService0);
+ break;
+ case 1:
+ hProfileServices[mcount] = CreateServiceFunction(servicename, profileService1);
+ break;
+ case 2:
+ hProfileServices[mcount] = CreateServiceFunction(servicename, profileService2);
+ break;
+ case 3:
+ hProfileServices[mcount] = CreateServiceFunction(servicename, profileService3);
+ break;
+ case 4:
+ hProfileServices[mcount] = CreateServiceFunction(servicename, profileService4);
+ break;
+ case 5:
+ hProfileServices[mcount] = CreateServiceFunction(servicename, profileService5);
+ break;
+ default:
+ MessageBox(NULL, TranslateT("There is a maximum of 6 menu items"), TranslateT("StartupStatus"), MB_OK);
+ return 0;
+ }
+ mi.pszService = servicename;
+ if (ServiceExists(MS_CLIST_ADDSTATUSMENUITEM)) {
+ if (CallService(MS_CLIST_ADDSTATUSMENUITEM, 0, (LPARAM)&mi)) {
+ menuprofiles[mcount] = i;
+ mcount += 1;
+ }
+ }
+ else {
+ if (CallService(MS_CLIST_ADDMAINMENUITEM, 0, (LPARAM)&mi)) {
+ menuprofiles[mcount] = i;
+ mcount += 1;
+ } } }
+
+ return 0;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+INT_PTR GetProfileName(WPARAM wParam, LPARAM lParam)
+{
+ int profile = (int)wParam;
+ char* buf = (char *)lParam;
+ if (wParam < 0) // get default profile
+ profile = DBGetContactSettingWord(NULL, MODULENAME, SETTING_DEFAULTPROFILE, 0);
+
+ int count = DBGetContactSettingWord(NULL, MODULENAME, SETTING_PROFILECOUNT, 0);
+ if ( profile >= count && count > 0 )
+ return -1;
+
+ if (count == 0) {
+ strncpy(buf, Translate("default"), 128-1);
+ return 0;
+ }
+
+ DBVARIANT dbv;
+ char setting[80];
+ _snprintf(setting, sizeof(setting), "%d_%s", profile, SETTING_PROFILENAME);
+ if (DBGetContactSetting(NULL, MODULENAME, setting, &dbv))
+ return -1;
+
+ memset(buf, '\0', 128);
+ strncpy(buf, dbv.pszVal, 128-1); // assume size >= 128
+ DBFreeVariant(&dbv);
+ return 0;
+}
+
+INT_PTR GetProfileCount(WPARAM wParam, LPARAM lParam)
+{
+ int* def = (int *)wParam;
+ int count = DBGetContactSettingWord(NULL, MODULENAME, SETTING_PROFILECOUNT, 1);
+ if ( def != 0) {
+ *def = DBGetContactSettingWord(NULL, MODULENAME, SETTING_DEFAULTPROFILE, 0);
+ if (*def >= count)
+ *def = 0;
+ }
+
+ return count;
+}
+
+char *GetStatusMessage(int profile, char *szProto)
+{
+ char dbSetting[80];
+ DBVARIANT dbv;
+
+ for ( int i=0; i < pceCount; i++ ) {
+ if ( (pce[i].profile == profile) && (!strcmp(pce[i].szProto, szProto)) ) {
+ _snprintf(dbSetting, sizeof(dbSetting), "%d_%s_%s", profile, szProto, SETTING_PROFILE_STSMSG);
+ if (!DBGetContactSetting(NULL, MODULENAME, dbSetting, &dbv)) { // reload from db
+ pce[i].msg = ( char* )realloc(pce[i].msg, strlen(dbv.pszVal)+1);
+ if (pce[i].msg != NULL) {
+ strcpy(pce[i].msg, dbv.pszVal);
+ }
+ DBFreeVariant(&dbv);
+ }
+ else {
+ if (pce[i].msg != NULL) {
+ free(pce[i].msg);
+ pce[i].msg = NULL;
+ }
+ }
+ return pce[i].msg;
+ }
+ }
+ pce = ( PROFILECE* )realloc(pce, (pceCount+1)*sizeof(PROFILECE));
+ if (pce == NULL)
+ return NULL;
+
+ pce[pceCount].profile = profile;
+ pce[pceCount].szProto = _strdup(szProto);
+ pce[pceCount].msg = NULL;
+ _snprintf(dbSetting, sizeof(dbSetting), "%d_%s_%s", profile, szProto, SETTING_PROFILE_STSMSG);
+ if (!DBGetContactSetting(NULL, MODULENAME, dbSetting, &dbv)) {
+ pce[pceCount].msg = _strdup(dbv.pszVal);
+ DBFreeVariant(&dbv);
+ }
+ pceCount += 1;
+
+ return pce[pceCount-1].msg;
+}
+
+int GetProfile( int profile, TSettingsList& arSettings )
+{
+ if ( profile < 0 ) // get default profile
+ profile = DBGetContactSettingWord(NULL, MODULENAME, SETTING_DEFAULTPROFILE, 0);
+
+ int count = DBGetContactSettingWord(NULL, MODULENAME, SETTING_PROFILECOUNT, 0);
+ if ( profile >= count && count > 0 )
+ return -1;
+
+ arSettings.destroy();
+
+ // if count == 0, continue so the default profile will be returned
+ PROTOACCOUNT** protos;
+ ProtoEnumAccounts( &count, &protos );
+
+ for ( int i=0; i < count; i++ )
+ if ( IsSuitableProto( protos[i] ))
+ arSettings.insert( new TSSSetting( profile, protos[i] ));
+
+ return ( arSettings.getCount() == 0 ) ? -1 : 0;
+}
+
+static VOID CALLBACK releaseTtbTimerFunction(HWND hwnd,UINT message, UINT_PTR idEvent,DWORD dwTime) {
+
+ int i;
+
+ KillTimer(NULL, releaseTtbTimerId);
+ for(i=0;i<ttbButtonCount;i++) {
+ CallService(MS_TTB_SETBUTTONSTATE, (WPARAM)ttbButtons[i], TTBST_RELEASED);
+ }
+}
+
+INT_PTR LoadAndSetProfile(WPARAM wParam, LPARAM lParam)
+{
+ // wParam == profile no.
+ int profileCount = GetProfileCount(0, 0);
+ int profile = (int)wParam;
+
+ TSettingsList profileSettings( 10, CompareSettings );
+ if ( !GetProfile( profile, profileSettings)) {
+ profile = (profile >= 0)?profile:DBGetContactSettingWord(NULL, MODULENAME, SETTING_DEFAULTPROFILE, 0);
+
+ char setting[64];
+ _snprintf(setting, sizeof(setting), "%d_%s", profile, SETTING_SHOWCONFIRMDIALOG);
+ if (!DBGetContactSettingByte(NULL, MODULENAME, setting, 0))
+ CallService(MS_CS_SETSTATUSEX,(WPARAM)&profileSettings, 0);
+ else
+ CallService(MS_CS_SHOWCONFIRMDLGEX, (WPARAM)&profileSettings, (LPARAM)DBGetContactSettingDword(NULL, MODULENAME, SETTING_DLGTIMEOUT, 5));
+ }
+
+ if ( ServiceExists( MS_TTB_ADDBUTTON ) || ServiceExists( MS_TB_ADDBUTTON ))
+ // add timer here
+ releaseTtbTimerId = SetTimer(NULL, 0, 100, releaseTtbTimerFunction);
+
+ return 0;
+}
+
+static UINT GetFsModifiers(WORD wHotKey)
+{
+ UINT fsm = 0;
+ if (HIBYTE(wHotKey)&HOTKEYF_ALT)
+ fsm |= MOD_ALT;
+ if (HIBYTE(wHotKey)&HOTKEYF_CONTROL)
+ fsm |= MOD_CONTROL;
+ if (HIBYTE(wHotKey)&HOTKEYF_SHIFT)
+ fsm |= MOD_SHIFT;
+ if (HIBYTE(wHotKey)&HOTKEYF_EXT)
+ fsm |= MOD_WIN;
+
+ return fsm;
+}
+
+static DWORD CALLBACK MessageWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ if ( msg == WM_HOTKEY ) {
+ for (int i=0; i < hkiCount; i++ )
+ if ((int)hkInfo[i].id == wParam)
+ LoadAndSetProfile((WPARAM)hkInfo[i].profile, 0);
+ }
+
+ return TRUE;
+}
+
+// assumes UnregisterHotKeys was called before
+static int RegisterHotKeys()
+{
+ hMessageWindow = CreateWindowEx(0, _T("STATIC"), NULL, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL);
+ SetWindowLongPtr(hMessageWindow, GWLP_WNDPROC, (LONG_PTR)MessageWndProc);
+
+ int count = GetProfileCount(0, 0);
+ for ( int i=0; i < count; i++ ) {
+ if (!dbi_getb(i, SETTING_REGHOTKEY, 0))
+ continue;
+
+ WORD wHotKey = dbi_getw(i, SETTING_HOTKEY, 0);
+ hkInfo = ( HKINFO* )realloc(hkInfo, (hkiCount+1)*sizeof(HKINFO));
+ if (hkInfo == NULL)
+ return -1;
+
+ char atomname[255];
+ mir_snprintf(atomname, sizeof(atomname), "StatusProfile_%d", i);
+ hkInfo[hkiCount].id = GlobalAddAtomA(atomname);
+ if (hkInfo[hkiCount].id == 0)
+ continue;
+
+ hkInfo[hkiCount].profile = i;
+ hkiCount += 1;
+ RegisterHotKey(hMessageWindow, (int)hkInfo[hkiCount-1].id, GetFsModifiers(wHotKey), LOBYTE(wHotKey));
+ }
+
+ if (hkiCount == 0)
+ DestroyWindow(hMessageWindow);
+
+ return 0;
+}
+
+static int UnregisterHotKeys()
+{
+ if (IsWindow(hMessageWindow)) {
+ for ( int i=0; i < hkiCount; i++ ) {
+ UnregisterHotKey(hMessageWindow, (int)hkInfo[i].id);
+ GlobalDeleteAtom(hkInfo[i].id);
+ }
+ DestroyWindow(hMessageWindow);
+ }
+ if (hkInfo != NULL)
+ free(hkInfo);
+
+ hkiCount = 0;
+ hkInfo = NULL;
+ hMessageWindow = NULL;
+
+ return 0;
+}
+
+int ReinitProfileModule()
+{
+ if (ServiceExists(MS_TTB_ADDBUTTON)) {
+ RemoveTopToolbarButtons();
+ CreateTopToolbarButtons(0,0);
+ }
+ if (ServiceExists(MS_TTB_ADDBUTTON)) {
+ RemoveTopToolbarButtons();
+ CreateTopToolbarButtons(0,0);
+ }
+ UnregisterHotKeys();
+ RegisterHotKeys();
+
+ return 0;
+}
+
+int LoadProfileModule()
+{
+ hLoadAndSetProfileService = CreateServiceFunction(MS_SS_LOADANDSETPROFILE, LoadAndSetProfile);
+ hTBModuleLoadedHook = HookEvent(ME_TB_MODULELOADED, CreateToolbarButtons);
+
+ RegisterButtons();
+ return 0;
+}
+
+int InitProfileModule()
+{
+ hTTBModuleLoadedHook = HookEvent(ME_TTB_MODULELOADED, CreateTopToolbarButtons);
+ ReinitProfileModule();
+ hPrebuildProfilesMenu = HookEvent( ME_CLIST_PREBUILDSTATUSMENU, CreateMainMenuItems);
+ CreateMainMenuItems(0,0);
+
+ return 0;
+}
+
+int DeinitProfilesModule()
+{
+ for ( int i=0; i < mcount; i++ )
+ DestroyServiceFunction(hProfileServices[i]);
+
+ if ( pce ) {
+ for ( int i=0; i < pceCount; i++ )
+ free( pce[i].szProto );
+ free( pce );
+ }
+
+ UnhookEvent(hPrebuildProfilesMenu);
+ UnregisterHotKeys();
+ RemoveTopToolbarButtons();
+ UnhookEvent(hTTBModuleLoadedHook);
+ UnhookEvent(hTBModuleLoadedHook);
+ DestroyServiceFunction(hLoadAndSetProfileService);
+
+ return 0;
+}
diff --git a/plugins/StatusPlugins/StartupStatus/res/ttbDown.bmp b/plugins/StatusPlugins/StartupStatus/res/ttbDown.bmp
new file mode 100644
index 0000000000..91f95e240b
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/res/ttbDown.bmp
Binary files differ
diff --git a/plugins/StatusPlugins/StartupStatus/res/ttbDown.ico b/plugins/StatusPlugins/StartupStatus/res/ttbDown.ico
new file mode 100644
index 0000000000..bc4c6abd1c
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/res/ttbDown.ico
Binary files differ
diff --git a/plugins/StatusPlugins/StartupStatus/res/ttbUp.bmp b/plugins/StatusPlugins/StartupStatus/res/ttbUp.bmp
new file mode 100644
index 0000000000..5b684407a5
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/res/ttbUp.bmp
Binary files differ
diff --git a/plugins/StatusPlugins/StartupStatus/res/ttbUp.ico b/plugins/StatusPlugins/StartupStatus/res/ttbUp.ico
new file mode 100644
index 0000000000..99461d3e6d
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/res/ttbUp.ico
Binary files differ
diff --git a/plugins/StatusPlugins/StartupStatus/startupstatus.cpp b/plugins/StatusPlugins/StartupStatus/startupstatus.cpp
new file mode 100644
index 0000000000..13b58e2e52
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/startupstatus.cpp
@@ -0,0 +1,491 @@
+/*
+ StartupStatus Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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 "../commonstatus.h"
+#include "startupstatus.h"
+
+// {4B733944-5A70-4b52-AB2D-68B1EF38FFE8}
+#define MIID_STARTUPSTATUS { 0x4b733944, 0x5a70, 0x4b52, { 0xab, 0x2d, 0x68, 0xb1, 0xef, 0x38, 0xff, 0xe8 } }
+
+static UINT_PTR setStatusTimerId = 0;
+
+int CompareSettings( const TSSSetting* p1, const TSSSetting* p2 )
+{ return lstrcmpA( p1->szName, p2->szName );
+}
+
+static TSettingsList startupSettings( 10, CompareSettings );
+
+TSSSetting::TSSSetting( PROTOACCOUNT* pa )
+{
+ cbSize = sizeof(PROTOCOLSETTINGEX);
+ szName = pa->szModuleName;
+ tszAccName = pa->tszAccountName;
+ status = lastStatus = CallProtoService( pa->szModuleName, PS_GETSTATUS, 0, 0 );
+ szMsg = NULL;
+}
+
+TSSSetting::TSSSetting( int profile, PROTOACCOUNT* pa )
+{
+ cbSize = sizeof(PROTOCOLSETTINGEX);
+
+ // copy name
+ szName = pa->szModuleName;
+ tszAccName = pa->tszAccountName;
+
+ // load status
+ char setting[80];
+ _snprintf(setting, sizeof(setting), "%d_%s", profile, pa->szModuleName);
+ int iStatus = DBGetContactSettingWord(NULL, MODULENAME, setting, 0);
+ if ( iStatus < MIN_STATUS || iStatus > MAX_STATUS )
+ iStatus = DEFAULT_STATUS;
+ status = iStatus;
+
+ // load last status
+ _snprintf(setting, sizeof(setting), "%s%s", PREFIX_LAST, szName);
+ iStatus = DBGetContactSettingWord(NULL, MODULENAME, setting, 0);
+ if ( iStatus < MIN_STATUS || iStatus > MAX_STATUS )
+ iStatus = DEFAULT_STATUS;
+ lastStatus = iStatus;
+
+ szMsg = GetStatusMessage(profile, szName);
+ if ( szMsg )
+ szMsg = _strdup( szMsg );
+}
+
+TSSSetting::~TSSSetting()
+{
+ if ( szMsg != NULL )
+ free( szMsg );
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+static HANDLE
+ hOptionsHook,
+ hShutdownHook,
+ hAccChangeHook,
+ hProtoAckHook,
+ hCSStatusChangeHook,
+ hStatusChangeHook;
+
+static HWND hMessageWindow;
+
+static BYTE showDialogOnStartup = 0;
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// command line options
+
+static PROTOCOLSETTINGEX* IsValidProtocol(TSettingsList& protoSettings, char* protoName)
+{
+ for ( int i=0; i < protoSettings.getCount(); i++ )
+ if ( !strncmp( protoSettings[i].szName, protoName, strlen(protoSettings[i].szName )))
+ return &protoSettings[i];
+
+ return NULL;
+}
+
+static int IsValidStatusDesc(char* statusDesc)
+{
+ if (!strncmp("away", statusDesc, 4))
+ return ID_STATUS_AWAY;
+ if (!strncmp("na", statusDesc, 2))
+ return ID_STATUS_NA;
+ if (!strncmp("dnd", statusDesc, 3))
+ return ID_STATUS_DND;
+ if (!strncmp("occupied", statusDesc, 8))
+ return ID_STATUS_OCCUPIED;
+ if (!strncmp("freechat", statusDesc, 8))
+ return ID_STATUS_FREECHAT;
+ if (!strncmp("online", statusDesc, 6))
+ return ID_STATUS_ONLINE;
+ if (!strncmp("offline", statusDesc, 7))
+ return ID_STATUS_OFFLINE;
+ if (!strncmp("invisible", statusDesc, 9))
+ return ID_STATUS_INVISIBLE;
+ if (!strncmp("onthephone", statusDesc, 10))
+ return ID_STATUS_ONTHEPHONE;
+ if (!strncmp("outtolunch", statusDesc, 10))
+ return ID_STATUS_OUTTOLUNCH;
+ if (!strncmp("last", statusDesc, 4))
+ return ID_STATUS_LAST;
+
+ return 0;
+}
+
+static void ProcessCommandLineOptions(TSettingsList& protoSettings)
+{
+ if ( protoSettings.getCount() == 0 )
+ return;
+
+ char *cmdl = GetCommandLineA();
+ while (*cmdl != '\0') {
+ while (*cmdl != '/') {
+ if (*cmdl == '\0')
+ return;
+
+ cmdl++;
+ }
+ if (*cmdl == '\0')
+ return;
+
+ cmdl++;
+ if (!strncmp(cmdl, "showdialog", 10)) {
+ showDialogOnStartup = TRUE;
+ continue;
+ }
+ char *protoName = cmdl; // first protocol ?
+ PROTOCOLSETTINGEX* protoSetting = IsValidProtocol(protoSettings, protoName);
+ if (protoSetting != NULL) {
+ while (*cmdl != '=') {
+ if (*cmdl == '\0')
+ return;
+
+ cmdl++; // skip to status
+ }
+
+ if (*cmdl == '\0')
+ return;
+
+ cmdl++;
+ char *statusDesc = cmdl;
+ int status = IsValidStatusDesc(statusDesc);
+ if (status != 0)
+ protoSetting->status = status;
+} } }
+
+static void SetLastStatusMessages(TSettingsList& ps)
+{
+ for (int i=0; i < ps.getCount(); i++ ) {
+ if (ps[i].status != ID_STATUS_LAST)
+ continue;
+
+ char dbSetting[128];
+ _snprintf(dbSetting, sizeof(dbSetting), "%s%s", PREFIX_LASTMSG, ps[i].szName);
+
+ DBVARIANT dbv;
+ if ( ps[i].szMsg == NULL && !DBGetContactSetting(NULL, MODULENAME, dbSetting, &dbv)) {
+ ps[i].szMsg = _strdup(dbv.pszVal); // remember this won't be freed
+ DBFreeVariant(&dbv);
+} } }
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// Account control event
+
+int OnAccChanged(WPARAM wParam,LPARAM lParam)
+{
+ PROTOACCOUNT* pa = ( PROTOACCOUNT* )lParam;
+ switch( wParam ) {
+ case PRAC_ADDED:
+ startupSettings.insert( new TSSSetting( -1, pa ));
+ break;
+
+ case PRAC_REMOVED:
+ {
+ for ( int i=0; i < startupSettings.getCount(); i++ ) {
+ if ( !lstrcmpA( startupSettings[i].szName, pa->szModuleName )) {
+ startupSettings.remove( i );
+ break;
+ } } }
+ break;
+ }
+
+ return 0;
+}
+
+// 'allow override'
+static int ProcessProtoAck(WPARAM wParam,LPARAM lParam)
+{
+ // 'something' made a status change
+ ACKDATA *ack=(ACKDATA*)lParam;
+ if ( ack->type != ACKTYPE_STATUS && ack->result != ACKRESULT_FAILED )
+ return 0;
+
+ if ( !DBGetContactSettingByte(NULL, MODULENAME, SETTING_OVERRIDE, 1) || startupSettings.getCount() == 0 )
+ return 0;
+
+ for (int i=0; i < startupSettings.getCount(); i++) {
+ if ( !strcmp( ack->szModule, startupSettings[i].szName )) {
+ startupSettings[i].szName = "";
+ log_debugA("StartupStatus: %s overridden by ME_PROTO_ACK, status will not be set", ack->szModule);
+ } }
+
+ return 0;
+}
+
+static int StatusChange(WPARAM wParam, LPARAM lParam)
+{
+ // change by menu
+ if ( !DBGetContactSettingByte(NULL, MODULENAME, SETTING_OVERRIDE, 1) || startupSettings.getCount() == 0 )
+ return 0;
+
+ char* szProto = (char *)lParam;
+ if (szProto == NULL) { // global status change
+ for ( int i=0; i < startupSettings.getCount(); i++ ) {
+ startupSettings[i].szName = "";
+ log_debugA("StartupStatus: all protos overridden by ME_CLIST_STATUSMODECHANGE, status will not be set");
+ }
+ }
+ else {
+ for ( int i=0; i < startupSettings.getCount(); i++) {
+ if ( !strcmp( startupSettings[i].szName, szProto )) {
+ startupSettings[i].szName = "";
+ log_debugA("StartupStatus: %s overridden by ME_CLIST_STATUSMODECHANGE, status will not be set", szProto);
+ } } }
+
+ return 0;
+}
+
+static int CSStatusChangeEx(WPARAM wParam, LPARAM lParam)
+{
+ // another status plugin made the change
+ if ( !DBGetContactSettingByte(NULL, MODULENAME, SETTING_OVERRIDE, 1) || startupSettings.getCount() == 0 )
+ return 0;
+
+ if (wParam != 0) {
+ PROTOCOLSETTINGEX** ps = *(PROTOCOLSETTINGEX***)wParam;
+ if (ps == NULL)
+ return -1;
+
+ for (int i=0; i < startupSettings.getCount(); i++ ) {
+ for ( int j=0; j < startupSettings.getCount(); j++ ) {
+ if ( ps[i]->szName == NULL || startupSettings[j].szName == NULL )
+ continue;
+
+ if ( !strcmp( ps[i]->szName, startupSettings[j].szName )) {
+ log_debugA("StartupStatus: %s overridden by MS_CS_SETSTATUSEX, status will not be set", ps[i]->szName);
+ // use a hack to disable this proto
+ startupSettings[j].szName = "";
+ } } } }
+
+ return 0;
+}
+
+static VOID CALLBACK SetStatusTimed(HWND hwnd,UINT message, UINT_PTR idEvent,DWORD dwTime)
+{
+ KillTimer(NULL, setStatusTimerId);
+ UnhookEvent(hProtoAckHook);
+ UnhookEvent(hCSStatusChangeHook);
+ UnhookEvent(hStatusChangeHook);
+ CallService(MS_CS_SETSTATUSEX, (WPARAM)&startupSettings, 0);
+}
+
+int LoadMainOptions()
+{
+ ReinitProfileModule();
+ return 0;
+}
+
+static int Exit(WPARAM wParam, LPARAM lParam)
+{
+ DeinitProfilesModule();
+ UnhookEvent(hOptionsHook);
+ UnhookEvent(hShutdownHook);
+ UnhookEvent(hAccChangeHook);
+
+ // save last protocolstatus
+ int count;
+ PROTOACCOUNT** protos;
+ ProtoEnumAccounts( &count, &protos );
+
+ for ( int i=0; i < count; i++ ) {
+ if ( !IsSuitableProto( protos[i] ))
+ continue;
+
+ char lastName[128], lastMsg[128];
+ mir_snprintf(lastName, sizeof(lastName), "%s%s", PREFIX_LAST, protos[i]->szModuleName);
+ if (CallService(MS_PROTO_ISPROTOCOLLOADED, 0, (LPARAM)protos[i]->szModuleName)) {
+ DBWriteContactSettingWord(NULL, MODULENAME, lastName, (WORD)CallProtoService(protos[i]->szModuleName, PS_GETSTATUS, 0, 0));
+ mir_snprintf(lastMsg, sizeof(lastMsg), "%s%s", PREFIX_LASTMSG, protos[i]->szModuleName);
+ DBDeleteContactSetting(NULL, MODULENAME, lastMsg);
+
+ int status = CallProtoService(protos[i]->szModuleName, PS_GETSTATUS, 0, 0);
+ if ( !CallService(MS_PROTO_ISPROTOCOLLOADED, 0, (LPARAM)protos[i]->szModuleName))
+ continue;
+
+ if ( !(CallProtoService(protos[i]->szModuleName, PS_GETCAPS, (WPARAM)PFLAGNUM_1, 0) & PF1_MODEMSGSEND & ~PF1_INDIVMODEMSG ))
+ continue;
+
+ if ( !(CallProtoService(protos[i]->szModuleName, PS_GETCAPS, (WPARAM)PFLAGNUM_3, 0)&Proto_Status2Flag(status)))
+ continue;
+
+ if (ServiceExists(MS_NAS_GETSTATE)) {
+ // NewAwaySys
+ NAS_PROTOINFO npi = { 0 };
+ npi.cbSize = sizeof(NAS_PROTOINFO);
+ npi.szProto = protos[i]->szModuleName;
+ npi.status = 0;
+ CallService(MS_NAS_GETSTATEA, (WPARAM)&npi, (LPARAM)1);
+ if (npi.szMsg == NULL) {
+ npi.status = 0;
+ npi.szProto = NULL;
+ CallService(MS_NAS_GETSTATEA, (WPARAM)&npi, (LPARAM)1);
+ }
+ if (npi.szMsg != NULL) {
+ DBWriteContactSettingString(NULL, MODULENAME, lastMsg, npi.szMsg);
+ mir_free(npi.szMsg);
+ } } } }
+
+ if ( (DBGetContactSettingByte(NULL, MODULENAME, SETTING_SETPROFILE, 1)) || (DBGetContactSettingByte(NULL, MODULENAME, SETTING_OFFLINECLOSE, 0)) ) {
+ if (ServiceExists(MS_CLIST_SETSTATUSMODE))
+ CallService(MS_CLIST_SETSTATUSMODE, (WPARAM)ID_STATUS_OFFLINE, 0);
+ else
+ log_debugA("StartupStatus: MS_CLIST_SETSTATUSMODE not available!");
+ }
+
+ // set windowstate and docked for next startup
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_SETWINSTATE, 0)) {
+ int state = DBGetContactSettingByte(NULL, MODULENAME, SETTING_WINSTATE, SETTING_STATE_NORMAL);
+ HWND hClist = (HWND)CallService(MS_CLUI_GETHWND, 0, 0);
+ BOOL isHidden = !IsWindowVisible(hClist);
+ switch (state) {
+ case SETTING_STATE_HIDDEN:
+ // try to use services where possible
+ if (!isHidden)
+ CallService(MS_CLIST_SHOWHIDE, 0, 0);
+ break;
+
+ case SETTING_STATE_MINIMIZED:
+ if (!DBGetContactSettingByte(NULL, MODULE_CLIST, SETTING_TOOLWINDOW, 0))
+ ShowWindow(hClist, SW_SHOWMINIMIZED);
+ break;
+
+ case SETTING_STATE_NORMAL:
+ // try to use services where possible (that's what they're for)
+ if (isHidden)
+ CallService(MS_CLIST_SHOWHIDE, 0, 0);
+ break;
+ } }
+
+ // hangup
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_AUTOHANGUP, 0))
+ InternetAutodialHangup(0);
+
+ int state = DBGetContactSettingByte(NULL, MODULENAME, SETTING_WINSTATE, SETTING_STATE_NORMAL);
+ // set windowstate and docked for next startup
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_SETWINSTATE, 0))
+ DBWriteContactSettingByte(NULL, MODULE_CLIST, SETTING_WINSTATE, (BYTE)state);
+
+ if ( hMessageWindow )
+ DestroyWindow(hMessageWindow);
+
+ startupSettings.destroy();
+ return 0;
+}
+
+/* Window proc for poweroff event */
+static DWORD CALLBACK MessageWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch(msg) {
+ case WM_ENDSESSION:
+ log_debugA("WM_ENDSESSION");
+ if (wParam) {
+ log_debugA("WM_ENDSESSION: calling exit");
+ Exit(0, 0);
+ log_debugA("WM_ENDSESSION: exit called");
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+int CSModuleLoaded(WPARAM wParam, LPARAM lParam)
+{
+ protoList = ( OBJLIST<PROTOCOLSETTINGEX>* )&startupSettings;
+
+ InitProfileModule();
+
+ hAccChangeHook = HookEvent(ME_PROTO_ACCLISTCHANGED, OnAccChanged);
+ hOptionsHook = HookEvent(ME_OPT_INITIALISE, OptionsInit);
+
+ /* shutdown hook for normal shutdown */
+ hShutdownHook = HookEvent(ME_SYSTEM_OKTOEXIT, Exit);
+ /* message window for poweroff */
+ hMessageWindow = CreateWindowEx(0, _T("STATIC"), NULL, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL);
+ SetWindowLongPtr(hMessageWindow, GWLP_WNDPROC, (LONG_PTR)MessageWndProc);
+
+ GetProfile( -1, startupSettings );
+
+ // override with cmdl
+ ProcessCommandLineOptions( startupSettings );
+ if (startupSettings.getCount() == 0)
+ return 0;// no protocols are loaded
+
+ SetLastStatusMessages(startupSettings);
+ showDialogOnStartup = (showDialogOnStartup || DBGetContactSettingByte(NULL, MODULENAME, SETTING_SHOWDIALOG, 0));
+
+ // dial
+ if ( showDialogOnStartup || DBGetContactSettingByte(NULL, MODULENAME, SETTING_SETPROFILE, 1))
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_AUTODIAL, 0))
+ InternetAutodial(0, NULL);
+
+ // set the status!
+ if ( showDialogOnStartup || DBGetContactSettingByte(NULL, MODULENAME, SETTING_SHOWDIALOG, 0)) {
+ CallService(MS_CS_SHOWCONFIRMDLGEX, (WPARAM)&startupSettings, DBGetContactSettingDword(NULL, MODULENAME, SETTING_DLGTIMEOUT, 5));
+ }
+ else if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_SETPROFILE, 1)) {
+ // set hooks for override
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_OVERRIDE, 1)) {
+ hProtoAckHook = HookEvent(ME_PROTO_ACK, ProcessProtoAck);
+ hCSStatusChangeHook = HookEvent(ME_CS_STATUSCHANGEEX, CSStatusChangeEx);
+ hStatusChangeHook = HookEvent(ME_CLIST_STATUSMODECHANGE, StatusChange);
+ }
+ setStatusTimerId = SetTimer(NULL, 0, DBGetContactSettingDword(NULL,MODULENAME,SETTING_SETPROFILEDELAY,500), SetStatusTimed);
+ }
+
+ // win size and location
+ if ( DBGetContactSettingByte(NULL, MODULENAME, SETTING_SETWINLOCATION, 0) ||
+ DBGetContactSettingByte(NULL, MODULENAME, SETTING_SETWINSIZE, 0))
+ {
+ WINDOWPLACEMENT wndpl = { 0 };
+ wndpl.length = sizeof(wndpl);
+
+ HWND hClist = (HWND)CallService(MS_CLUI_GETHWND, 0, 0);
+
+ // store in db
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_SETWINLOCATION, 0)) {
+ DBWriteContactSettingDword(NULL, MODULE_CLIST, SETTING_XPOS, DBGetContactSettingDword(NULL, MODULENAME, SETTING_XPOS, 0));
+ DBWriteContactSettingDword(NULL, MODULE_CLIST, SETTING_YPOS, DBGetContactSettingDword(NULL, MODULENAME, SETTING_YPOS, 0));
+ }
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_SETWINSIZE, 0)) {
+ DBWriteContactSettingDword(NULL, MODULE_CLIST, SETTING_WIDTH, DBGetContactSettingDword(NULL, MODULENAME, SETTING_WIDTH, 0));
+ if (!DBGetContactSettingByte(NULL, MODULE_CLUI, SETTING_AUTOSIZE, 0))
+ DBWriteContactSettingDword(NULL, MODULE_CLIST, SETTING_HEIGHT, DBGetContactSettingDword(NULL, MODULENAME, SETTING_HEIGHT, 0));
+ }
+ if ( GetWindowPlacement( hClist, &wndpl )) {
+ if ( wndpl.showCmd == SW_SHOWNORMAL && !CallService(MS_CLIST_DOCKINGISDOCKED, 0, 0)) {
+ RECT rc;
+ if (GetWindowRect(hClist, &rc)) {
+ int x = rc.left;
+ int y = rc.top;
+ int width = rc.right - rc.left;
+ int height = rc.bottom - rc.top;
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_SETWINLOCATION, 0)) {
+ x = DBGetContactSettingDword(NULL, MODULENAME, SETTING_XPOS, x);
+ y = DBGetContactSettingDword(NULL, MODULENAME, SETTING_YPOS, y);
+ }
+ if (DBGetContactSettingByte(NULL, MODULENAME, SETTING_SETWINSIZE, 0)) {
+ width = DBGetContactSettingDword(NULL, MODULENAME, SETTING_WIDTH, width);
+ if (!DBGetContactSettingByte(NULL, MODULE_CLUI, SETTING_AUTOSIZE, 0))
+ height = DBGetContactSettingDword(NULL, MODULENAME, SETTING_HEIGHT, height);
+ }
+ MoveWindow(hClist, x, y, width, height, TRUE);
+ } } } }
+
+ return 0;
+}
diff --git a/plugins/StatusPlugins/StartupStatus/startupstatus.h b/plugins/StatusPlugins/StartupStatus/startupstatus.h
new file mode 100644
index 0000000000..19ff57e76f
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/startupstatus.h
@@ -0,0 +1,165 @@
+/*
+ StartupStatus Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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 __STARTUPSTATUSHEADER
+#define __STARTUPSTATUSHEADER
+
+#include <windows.h>
+#include <wininet.h>
+#include <shlobj.h>
+#include <m_options.h>
+#include <m_clui.h>
+#include <m_toptoolbar.h>
+#include <m_toolbar.h>
+#include "version.h"
+#define MODULENAME "StartupStatus"
+#include "../../helpers/db_helpers.h"
+
+struct TSSSetting : public PROTOCOLSETTINGEX
+{
+ TSSSetting( PROTOACCOUNT* pa );
+ TSSSetting( int profile, PROTOACCOUNT* pa );
+ ~TSSSetting();
+
+ __inline void* operator new( size_t size ) { return calloc( 1, size ); }
+ __inline void operator delete( void* p ) { free( p ); }
+};
+
+typedef OBJLIST<TSSSetting> TSettingsList;
+
+typedef struct {
+ int profile;
+ char *szProto;
+ char *msg;
+} PROFILECE;
+
+typedef struct {
+ char *szName;
+ TSettingsList* ps;
+ BOOL showDialog;
+ BOOL createTtb;
+ BOOL createMmi;
+ BOOL inSubMenu;
+ BOOL regHotkey;
+ WORD hotKey;
+} PROFILEOPTIONS;
+
+typedef struct {
+ ATOM id;
+ int profile;
+} HKINFO;
+
+#define UM_REINITPROFILES WM_USER + 1
+#define UM_SETPROFILE WM_USER + 2
+#define UM_SETPROTOCOL WM_USER + 3
+#define UM_SETSTATUSMSG WM_USER + 4
+#define UM_ADDPROFILE WM_USER + 5
+#define UM_DELPROFILE WM_USER + 6
+#define UM_REINITDOCKED WM_USER + 7
+#define UM_REINITWINSTATE WM_USER + 8
+#define UM_REINITWINSIZE WM_USER + 9
+
+#define CLUIINTM_REDRAW (WM_USER+100)
+
+#define MODULE_CLIST "CList"
+#define MODULE_CLUI "CLUI"
+#define SETTING_STATUS "Status"
+
+#define SETTING_SETWINSTATE "SetState"
+#define SETTING_WINSTATE "State"
+
+#define SETTING_SETDOCKED "SetDocked"
+#define SETTING_DOCKED "Docked"
+
+#define SETTING_SHOWDIALOG "ShowDialog"
+#define SETTING_OFFLINECLOSE "OfflineOnClose"
+#define SETTING_SETPROFILE "SetStatusOnStartup"
+#define SETTING_AUTODIAL "AutoDial"
+#define SETTING_AUTOHANGUP "AutoHangup"
+
+#define SETTING_TOOLWINDOW "ToolWindow"
+
+#define SETTING_OVERRIDE "AllowOverride"
+
+#define SETTING_SETWINLOCATION "SetWinLoc"
+#define SETTING_XPOS "x"
+#define SETTING_YPOS "y"
+
+#define SETTING_SETWINSIZE "SetWinSize"
+#define SETTING_WIDTH "Width"
+#define SETTING_HEIGHT "Height"
+#define SETTING_AUTOSIZE "AutoSize"
+
+#define SETTING_PROFILECOUNT "ProfileCount"
+#define SETTING_DEFAULTPROFILE "DefaultProfile"
+#define SETTING_PROFILENAME "ProfileName"
+#define SETTING_CREATETTBBUTTON "CreateTTBButton"
+#define SETTING_PROFILE_STSMSG "StatusMsg"
+#define SETTING_SHOWCONFIRMDIALOG "profile_ShowDialog"
+#define SETTING_CREATEMMITEM "CreateMMItem"
+#define SETTING_INSUBMENU "InSubMenu"
+#define SETTING_REGHOTKEY "RegHotKey"
+#define SETTING_HOTKEY "HotKey"
+#define SETTING_PROFILENO "ProfileNo"
+
+#define SETTING_SETPROFILEDELAY "SetStatusDelay"
+#define SETTING_DLGTIMEOUT "DialogTimeout"
+
+#define SHORTCUT_DESC "Miranda IM"
+#define SHORTCUT_FILENAME "\\Miranda IM.lnk"
+
+#define DOCKED_NONE 0
+#define DOCKED_LEFT 1
+#define DOCKED_RIGHT 2
+
+#ifndef MS_CLIST_ADDSTATUSMENUITEM
+#define MS_CLIST_ADDSTATUSMENUITEM "CList/AddStatusMenuItem"
+#endif
+#define MS_SS_MENUSETPROFILEPREFIX "StartupStatus/SetProfile_"
+
+// options
+int OptionsInit(WPARAM wparam,LPARAM lparam);
+
+// startupstatus
+int LoadMainOptions();
+
+int CompareSettings( const TSSSetting* p1, const TSSSetting* p2 );
+
+TSettingsList* GetCurrentProtoSettings();
+
+// profile
+int GetProfile(int profileID, TSettingsList& arSettings );
+char *GetStatusMessage(int profile, char *szProto);
+
+INT_PTR LoadAndSetProfile(WPARAM wParam, LPARAM lParam);
+INT_PTR GetProfileCount(WPARAM wParam, LPARAM lParam);
+INT_PTR GetProfileName(WPARAM wParam, LPARAM lParam);
+
+int RemoveTopToolbarButtons();
+int CreateTopToolbarButtons(WPARAM wParam, LPARAM lParam);
+
+int RemoveToolbarButtons();
+int CreateToolbarButtons(WPARAM wParam, LPARAM lParam);
+void RegisterButtons();
+
+int LoadProfileModule();
+int InitProfileModule();
+int ReinitProfileModule();
+int DeinitProfilesModule();
+
+#endif //__STARTUPSTATUSHEADER
diff --git a/plugins/StatusPlugins/StartupStatus/toolbars.cpp b/plugins/StatusPlugins/StartupStatus/toolbars.cpp
new file mode 100644
index 0000000000..7a12697c52
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/toolbars.cpp
@@ -0,0 +1,191 @@
+/*
+ StartupStatus Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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 "../commonstatus.h"
+#include "startupstatus.h"
+#include "../resource.h"
+#include <commctrl.h>
+
+#include <m_icolib.h>
+
+#define MAX_MMITEMS 6
+
+static HANDLE hTtbDown = 0, hTtbUp = 0;
+
+static HANDLE* ttbButtons = NULL;
+static int ttbButtonCount = 0;
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+int RemoveTopToolbarButtons()
+{
+ int profileCount, i, orgButtonCount;
+
+ profileCount = CallService(MS_SS_GETPROFILECOUNT, 0, 0);
+ orgButtonCount = ttbButtonCount;
+ for (i=0;i<orgButtonCount;i++)
+ if (CallService(MS_TTB_REMOVEBUTTON, (WPARAM)ttbButtons[i], 0) != 1)
+ ttbButtonCount -= 1;
+
+ if (ttbButtonCount == 0) {
+ free(ttbButtons);
+ ttbButtons = NULL;
+ }
+ else ttbButtons = ( HANDLE* )realloc(ttbButtons, profileCount*sizeof(HANDLE));
+
+ return 0;
+}
+
+int CreateTopToolbarButtons(WPARAM wParam, LPARAM lParam)
+{
+ TTBButton ttb;
+ int i, profileCount;
+ DBVARIANT dbv;
+ char setting[80];
+
+ profileCount = CallService(MS_SS_GETPROFILECOUNT, 0, 0);
+ ttbButtons = ( HANDLE* )realloc(ttbButtons, profileCount*sizeof(HANDLE));
+ ZeroMemory(&ttb,sizeof(ttb));
+ ZeroMemory(&dbv,sizeof(dbv));
+ ttb.cbSize = sizeof(ttb);
+ ttb.dwFlags = TTBBF_VISIBLE|TTBBF_SHOWTOOLTIP;
+ ttb.hbBitmapDown = LoadBitmap(hInst,MAKEINTRESOURCE(IDB_TTBDOWN));
+ ttb.hbBitmapUp = LoadBitmap(hInst,MAKEINTRESOURCE(IDB_TTBUP));
+ ttb.pszServiceDown = ttb.pszServiceUp = MS_SS_LOADANDSETPROFILE;
+ for (i=0;i<profileCount;i++) {
+ char profileName[128];
+ INT_PTR ttbAddResult = -1;
+
+ _snprintf(setting, sizeof(setting), "%d_%s", i, SETTING_CREATETTBBUTTON);
+ if (!DBGetContactSettingByte(NULL, MODULENAME, setting, FALSE)) continue;
+ _snprintf(setting, sizeof(setting), "%d_%s", i, SETTING_PROFILENAME);
+ if (DBGetContactSetting(NULL, MODULENAME, setting, &dbv)) continue;
+ strncpy(profileName, dbv.pszVal, sizeof(profileName)-1);
+ ttb.name = profileName;
+ ttb.wParamDown = ttb.wParamUp = i;
+ ttbAddResult = CallService(MS_TTB_ADDBUTTON, (WPARAM)&ttb, 0);
+ if (ttbAddResult != -1) {
+ ttbButtons[ttbButtonCount] = (HANDLE)ttbAddResult;
+ // this tooltip makes miranda crash if changed > 3 times or so
+ CallService(MS_TTB_SETBUTTONOPTIONS,MAKEWPARAM(TTBO_TIPNAME,ttbButtons[ttbButtonCount]), (LPARAM)profileName);
+ DBFreeVariant(&dbv);
+ ttbButtonCount += 1;
+ }
+ }
+ if (ttbButtonCount > 0)
+ ttbButtons = ( HANDLE* )realloc(ttbButtons, ttbButtonCount*sizeof(HANDLE));
+ else {
+ free(ttbButtons);
+ ttbButtons = NULL;
+ }
+
+ return 0;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+int RemoveToolbarButtons()
+{
+ int profileCount, i, orgButtonCount;
+
+ profileCount = CallService(MS_SS_GETPROFILECOUNT, 0, 0);
+ orgButtonCount = ttbButtonCount;
+ for ( i=0; i < orgButtonCount; i++ )
+ if ( !CallService( MS_TB_REMOVEBUTTON, (WPARAM)ttbButtons[i], 0 ))
+ ttbButtonCount --;
+
+ if ( ttbButtonCount == 0 ) {
+ free( ttbButtons );
+ ttbButtons = NULL;
+ }
+ else ttbButtons = ( HANDLE* )realloc(ttbButtons, profileCount*sizeof(HANDLE));
+
+ return 0;
+}
+
+int CreateToolbarButtons(WPARAM wParam, LPARAM lParam)
+{
+ char setting[80];
+
+ int profileCount = CallService(MS_SS_GETPROFILECOUNT, 0, 0);
+ ttbButtons = ( HANDLE* )realloc(ttbButtons, profileCount*sizeof(HANDLE));
+
+ TBButton ttb = { 0 };
+ ttb.cbSize = sizeof(ttb);
+ ttb.tbbFlags = TBBF_VISIBLE | TBBF_SHOWTOOLTIP;
+ ttb.pszServiceName = MS_SS_LOADANDSETPROFILE;
+ for (int i=0; i < profileCount; i++ ) {
+ char profileName[128];
+ INT_PTR ttbAddResult = -1;
+
+ _snprintf(setting, sizeof(setting), "%d_%s", i, SETTING_CREATETTBBUTTON);
+ if (!DBGetContactSettingByte(NULL, MODULENAME, setting, FALSE))
+ continue;
+
+ DBVARIANT dbv;
+ _snprintf(setting, sizeof(setting), "%d_%s", i, SETTING_PROFILENAME);
+ if (DBGetContactSetting(NULL, MODULENAME, setting, &dbv))
+ continue;
+
+ strncpy(profileName, dbv.pszVal, sizeof(profileName)-1);
+ ttb.pszButtonID = "LaunchProfile";
+ ttb.pszButtonName = profileName;
+ ttb.pszTooltipUp = ttb.pszTooltipDn = profileName;
+ ttb.hPrimaryIconHandle = hTtbUp;
+ ttb.hSecondaryIconHandle = hTtbDown;
+ ttb.defPos = 200;
+ ttb.lParam = i;
+ ttbAddResult = CallService( MS_TB_ADDBUTTON, 0, (LPARAM)&ttb );
+ if (ttbAddResult != -1) {
+ ttbButtons[ttbButtonCount] = (HANDLE)ttbAddResult;
+ ttbButtonCount += 1;
+ }
+ DBFreeVariant( &dbv );
+ }
+ if (ttbButtonCount > 0)
+ ttbButtons = ( HANDLE* )realloc(ttbButtons, ttbButtonCount*sizeof(HANDLE));
+ else {
+ free(ttbButtons);
+ ttbButtons = NULL;
+ }
+
+ return 0;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+void RegisterButtons()
+{
+ TCHAR szFile[MAX_PATH];
+ GetModuleFileName(hInst, szFile, SIZEOF(szFile));
+
+ SKINICONDESC sid = {0};
+ sid.cbSize = sizeof(SKINICONDESC);
+ sid.ptszDefaultFile = szFile;
+ sid.pszSection = "StartupStatus";
+ sid.pszName = "StartupStatus/TtbDown";
+ sid.pszDescription = "Pressed toolbar icon";
+ sid.iDefaultIndex = -IDI_TTBDOWN;
+ sid.flags = SIDF_PATH_TCHAR;
+ hTtbDown = (HANDLE)CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid);
+
+ sid.pszName = "StartupStatus/TtbUp";
+ sid.pszDescription = "Released toolbar icon";
+ sid.iDefaultIndex = -IDI_TTBUP;
+ hTtbUp = (HANDLE)CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid);
+}
diff --git a/plugins/StatusPlugins/StartupStatus/vc6.rc b/plugins/StatusPlugins/StartupStatus/vc6.rc
new file mode 100644
index 0000000000..90772d80f6
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/vc6.rc
@@ -0,0 +1,3 @@
+#include "..\resource.rc"
+#include "..\version.rc"
+#include "StartupStatus.rc" \ No newline at end of file
diff --git a/plugins/StatusPlugins/StartupStatus/version.h b/plugins/StatusPlugins/StartupStatus/version.h
new file mode 100644
index 0000000000..45bbd1052c
--- /dev/null
+++ b/plugins/StatusPlugins/StartupStatus/version.h
@@ -0,0 +1,56 @@
+// Set the version number here - it will affect the version resource and the version field of the pluginInfo structure
+// (Be careful that you don't have the resource file open when you change this and rebuild, otherwise the changes may not
+// take effect within the version resource)
+// Do not forget to define symbol "_DEBUG" for resource compiler if you use debug configuration (in VisualStudio you can
+// find it under Project properties - Configuration properties - Resource - General - Preprocessor definitions)
+
+// plugin version part
+#define __MAJOR_VERSION 0
+#define __MINOR_VERSION 8
+#define __RELEASE_NUM 0
+#define __BUILD_NUM 43
+
+// minimal MirandaIM version number, with which this plugin supposed to work
+#define __PROD_MAJOR_VERSION 0
+#define __PROD_MINOR_VERSION 8
+#define __PROD_RELEASE_NUM 0
+#define __PROD_BUILD_NUM 0
+// if your plugin works only with Miranda core beginning from specific revision, you can include this information in Product Version resource
+//#define __PROD_REV_NUM 1234
+
+// stuff that will be used in PluginInfo section and in Version resource
+#define __PLUGIN_NAME "StartupStatus"
+#define __FILENAME "StartupStatus.dll"
+#define __DESC "StartupStatus, allows you to define the status Miranda should set on startup, configurable per protocol."
+#define __AUTHOR "P Boon"
+#define __AUTHOREMAIL "unregistered@users.sourceforge.net"
+#define __AUTHORWEB "http://www.miranda-im.org/"
+#define __COPYRIGHT "(c) 2003-08 P. Boon, 2008-11 George Hazan"
+
+// other stuff for Version resource
+#define __STRINGIFY_IMPL(x) #x
+#define __STRINGIFY(x) __STRINGIFY_IMPL(x)
+
+#define __FILEVERSION_STRING __MAJOR_VERSION,__MINOR_VERSION,__RELEASE_NUM,__BUILD_NUM
+#define __FILEVERSION_STRING_DOTS __MAJOR_VERSION.__MINOR_VERSION.__RELEASE_NUM.__BUILD_NUM
+#ifdef _UNICODE
+#ifdef __REV_NUM
+#define __VERSION_STRING __STRINGIFY(__FILEVERSION_STRING_DOTS rev. __REV_NUM Unicode)
+#else
+#define __VERSION_STRING __STRINGIFY(__FILEVERSION_STRING_DOTS Unicode)
+#endif
+#else
+#ifdef __REV_NUM
+#define __VERSION_STRING __STRINGIFY(__FILEVERSION_STRING_DOTS rev. __REV_NUM)
+#else
+#define __VERSION_STRING __STRINGIFY(__FILEVERSION_STRING_DOTS)
+#endif
+#endif
+
+#define __PRODVERSION_STRING __PROD_MAJOR_VERSION,__PROD_MINOR_VERSION,__PROD_RELEASE_NUM,__PROD_BUILD_NUM
+#define __PRODVERSION_STRING_DOTS __PROD_MAJOR_VERSION.__PROD_MINOR_VERSION.__PROD_RELEASE_NUM.__PROD_BUILD_NUM
+#ifdef __PROD_REV_NUM
+#define __PROD_VERSION_STRING __STRINGIFY(__PRODVERSION_STRING_DOTS rev. __PROD_REV_NUM)
+#else
+#define __PROD_VERSION_STRING __STRINGIFY(__PRODVERSION_STRING_DOTS+)
+#endif
diff --git a/plugins/StatusPlugins/StatusPlugins.dsw b/plugins/StatusPlugins/StatusPlugins.dsw
new file mode 100644
index 0000000000..bb084d0573
--- /dev/null
+++ b/plugins/StatusPlugins/StatusPlugins.dsw
@@ -0,0 +1,53 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "AdvancedAutoAway"=.\AdvancedAutoAway\AdvancedAutoAway.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "KeepStatus"=.\KeepStatus\KeepStatus.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "StartupStatus"=.\StartupStatus\StartupStatus.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/plugins/StatusPlugins/StatusPlugins_10.sln b/plugins/StatusPlugins/StatusPlugins_10.sln
new file mode 100644
index 0000000000..94d17df5ff
--- /dev/null
+++ b/plugins/StatusPlugins/StatusPlugins_10.sln
@@ -0,0 +1,74 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "KeepStatus", "KeepStatus\KeepStatus_10.vcxproj", "{D548A54E-310B-4A86-A545-64BDD5748745}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AdvancedAutoAway", "AdvancedAutoAway\AdvancedAutoAway_10.vcxproj", "{66503A70-B1E8-4545-B4FF-2108DFB40C72}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StartupStatus", "StartupStatus\StartupStatus_10.vcxproj", "{1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug Unicode|Win32 = Debug Unicode|Win32
+ Debug Unicode|x64 = Debug Unicode|x64
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release Unicode|Win32 = Release Unicode|Win32
+ Release Unicode|x64 = Release Unicode|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D548A54E-310B-4A86-A545-64BDD5748745}.Debug Unicode|Win32.ActiveCfg = Debug Unicode|Win32
+ {D548A54E-310B-4A86-A545-64BDD5748745}.Debug Unicode|Win32.Build.0 = Debug Unicode|Win32
+ {D548A54E-310B-4A86-A545-64BDD5748745}.Debug Unicode|x64.ActiveCfg = Debug Unicode|x64
+ {D548A54E-310B-4A86-A545-64BDD5748745}.Debug Unicode|x64.Build.0 = Debug Unicode|x64
+ {D548A54E-310B-4A86-A545-64BDD5748745}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D548A54E-310B-4A86-A545-64BDD5748745}.Debug|Win32.Build.0 = Debug|Win32
+ {D548A54E-310B-4A86-A545-64BDD5748745}.Debug|x64.ActiveCfg = Debug|x64
+ {D548A54E-310B-4A86-A545-64BDD5748745}.Debug|x64.Build.0 = Debug|x64
+ {D548A54E-310B-4A86-A545-64BDD5748745}.Release Unicode|Win32.ActiveCfg = Release Unicode|Win32
+ {D548A54E-310B-4A86-A545-64BDD5748745}.Release Unicode|Win32.Build.0 = Release Unicode|Win32
+ {D548A54E-310B-4A86-A545-64BDD5748745}.Release Unicode|x64.ActiveCfg = Release Unicode|x64
+ {D548A54E-310B-4A86-A545-64BDD5748745}.Release Unicode|x64.Build.0 = Release Unicode|x64
+ {D548A54E-310B-4A86-A545-64BDD5748745}.Release|Win32.ActiveCfg = Release|Win32
+ {D548A54E-310B-4A86-A545-64BDD5748745}.Release|Win32.Build.0 = Release|Win32
+ {D548A54E-310B-4A86-A545-64BDD5748745}.Release|x64.ActiveCfg = Release|x64
+ {D548A54E-310B-4A86-A545-64BDD5748745}.Release|x64.Build.0 = Release|x64
+ {66503A70-B1E8-4545-B4FF-2108DFB40C72}.Debug Unicode|Win32.ActiveCfg = Debug Unicode|Win32
+ {66503A70-B1E8-4545-B4FF-2108DFB40C72}.Debug Unicode|Win32.Build.0 = Debug Unicode|Win32
+ {66503A70-B1E8-4545-B4FF-2108DFB40C72}.Debug Unicode|x64.ActiveCfg = Debug Unicode|x64
+ {66503A70-B1E8-4545-B4FF-2108DFB40C72}.Debug Unicode|x64.Build.0 = Debug Unicode|x64
+ {66503A70-B1E8-4545-B4FF-2108DFB40C72}.Debug|Win32.ActiveCfg = Debug|Win32
+ {66503A70-B1E8-4545-B4FF-2108DFB40C72}.Debug|Win32.Build.0 = Debug|Win32
+ {66503A70-B1E8-4545-B4FF-2108DFB40C72}.Debug|x64.ActiveCfg = Debug|x64
+ {66503A70-B1E8-4545-B4FF-2108DFB40C72}.Debug|x64.Build.0 = Debug|x64
+ {66503A70-B1E8-4545-B4FF-2108DFB40C72}.Release Unicode|Win32.ActiveCfg = Release Unicode|Win32
+ {66503A70-B1E8-4545-B4FF-2108DFB40C72}.Release Unicode|Win32.Build.0 = Release Unicode|Win32
+ {66503A70-B1E8-4545-B4FF-2108DFB40C72}.Release Unicode|x64.ActiveCfg = Release Unicode|x64
+ {66503A70-B1E8-4545-B4FF-2108DFB40C72}.Release Unicode|x64.Build.0 = Release Unicode|x64
+ {66503A70-B1E8-4545-B4FF-2108DFB40C72}.Release|Win32.ActiveCfg = Release|Win32
+ {66503A70-B1E8-4545-B4FF-2108DFB40C72}.Release|Win32.Build.0 = Release|Win32
+ {66503A70-B1E8-4545-B4FF-2108DFB40C72}.Release|x64.ActiveCfg = Release|x64
+ {66503A70-B1E8-4545-B4FF-2108DFB40C72}.Release|x64.Build.0 = Release|x64
+ {1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}.Debug Unicode|Win32.ActiveCfg = Debug Unicode|Win32
+ {1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}.Debug Unicode|Win32.Build.0 = Debug Unicode|Win32
+ {1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}.Debug Unicode|x64.ActiveCfg = Debug Unicode|x64
+ {1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}.Debug Unicode|x64.Build.0 = Debug Unicode|x64
+ {1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}.Debug|Win32.Build.0 = Debug|Win32
+ {1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}.Debug|x64.ActiveCfg = Debug|x64
+ {1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}.Debug|x64.Build.0 = Debug|x64
+ {1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}.Release Unicode|Win32.ActiveCfg = Release Unicode|Win32
+ {1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}.Release Unicode|Win32.Build.0 = Release Unicode|Win32
+ {1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}.Release Unicode|x64.ActiveCfg = Release Unicode|x64
+ {1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}.Release Unicode|x64.Build.0 = Release Unicode|x64
+ {1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}.Release|Win32.ActiveCfg = Release|Win32
+ {1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}.Release|Win32.Build.0 = Release|Win32
+ {1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}.Release|x64.ActiveCfg = Release|x64
+ {1BD5E5B9-A750-4CF8-A370-0FBD40A92CB2}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/plugins/StatusPlugins/commonstatus.cpp b/plugins/StatusPlugins/commonstatus.cpp
new file mode 100644
index 0000000000..e81e374328
--- /dev/null
+++ b/plugins/StatusPlugins/commonstatus.cpp
@@ -0,0 +1,510 @@
+/*
+ AdvancedAutoAway Plugin for Miranda-IM (www.miranda-im.org)
+ KeepStatus Plugin for Miranda-IM (www.miranda-im.org)
+ StartupStatus Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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 "commonstatus.h"
+
+// handles for hooks and other Miranda thingies
+static HANDLE hShutdownHook;
+static HANDLE hCSSetStatusExService;
+static HANDLE hCSShowConfirmDlgExService;
+static HANDLE hCSStatusChangedExEvent;
+static HANDLE hCSGetProtoCountService;
+
+OBJLIST<PROTOCOLSETTINGEX>* protoList;
+
+// prototypes
+char *StatusModeToDbSetting(int status,const char *suffix);
+DWORD StatusModeToProtoFlag(int status);
+INT_PTR SetStatusEx(WPARAM wParam, LPARAM lParam);
+int InitCommonStatus();
+static int ModulesLoaded(WPARAM wParam, LPARAM lParam);
+static int CreateServices();
+int GetProtoCount();
+static int Exit(WPARAM wParam, LPARAM lParam);
+// extern
+extern INT_PTR ShowConfirmDialogEx(WPARAM wParam, LPARAM lParam);
+
+// some helpers from awaymsg.c ================================================================
+char *StatusModeToDbSetting(int status,const char *suffix)
+{
+ char *prefix;
+ static char str[64];
+
+ switch(status) {
+ case ID_STATUS_AWAY: prefix="Away"; break;
+ case ID_STATUS_NA: prefix="Na"; break;
+ case ID_STATUS_DND: prefix="Dnd"; break;
+ case ID_STATUS_OCCUPIED: prefix="Occupied"; break;
+ case ID_STATUS_FREECHAT: prefix="FreeChat"; break;
+ case ID_STATUS_ONLINE: prefix="On"; break;
+ case ID_STATUS_OFFLINE: prefix="Off"; break;
+ case ID_STATUS_INVISIBLE: prefix="Inv"; break;
+ case ID_STATUS_ONTHEPHONE: prefix="Otp"; break;
+ case ID_STATUS_OUTTOLUNCH: prefix="Otl"; break;
+ default: return NULL;
+ }
+ lstrcpyA(str,prefix); lstrcatA(str,suffix);
+ return str;
+}
+
+DWORD StatusModeToProtoFlag(int status)
+{
+ // *not* the same as in core, <offline>
+ switch(status) {
+ case ID_STATUS_ONLINE: return PF2_ONLINE;
+ case ID_STATUS_OFFLINE: return PF2_OFFLINE;
+ case ID_STATUS_INVISIBLE: return PF2_INVISIBLE;
+ case ID_STATUS_OUTTOLUNCH: return PF2_OUTTOLUNCH;
+ case ID_STATUS_ONTHEPHONE: return PF2_ONTHEPHONE;
+ case ID_STATUS_AWAY: return PF2_SHORTAWAY;
+ case ID_STATUS_NA: return PF2_LONGAWAY;
+ case ID_STATUS_OCCUPIED: return PF2_LIGHTDND;
+ case ID_STATUS_DND: return PF2_HEAVYDND;
+ case ID_STATUS_FREECHAT: return PF2_FREECHAT;
+ }
+ return 0;
+}
+
+int GetActualStatus(PROTOCOLSETTINGEX *protoSetting)
+{
+ if (protoSetting->status == ID_STATUS_LAST) {
+ if ( (protoSetting->lastStatus < MIN_STATUS) || (protoSetting->lastStatus > MAX_STATUS) )
+ return CallProtoService(protoSetting->szName, PS_GETSTATUS, 0, 0);
+ return protoSetting->lastStatus;
+ }
+ if (protoSetting->status == ID_STATUS_CURRENT)
+ return CallProtoService(protoSetting->szName, PS_GETSTATUS, 0, 0);
+
+ if ( (protoSetting->status < ID_STATUS_OFFLINE) || (protoSetting->status > ID_STATUS_OUTTOLUNCH) ) {
+ log_debugA("invalid status detected: %d", protoSetting->status);
+ return 0;
+ }
+ return protoSetting->status;
+}
+
+// helper, from core
+static TCHAR *GetDefaultMessage(int status)
+{
+ switch(status) {
+ case ID_STATUS_AWAY: return TranslateT("I've been away since %time%.");
+ case ID_STATUS_NA: return TranslateT("Give it up, I'm not in!");
+ case ID_STATUS_OCCUPIED: return TranslateT("Not right now.");
+ case ID_STATUS_DND: return TranslateT("Give a guy some peace, would ya?");
+ case ID_STATUS_FREECHAT: return TranslateT("I'm a chatbot!");
+ case ID_STATUS_ONLINE: return TranslateT("Yep, I'm here.");
+ case ID_STATUS_OFFLINE: return TranslateT("Nope, not here.");
+ case ID_STATUS_INVISIBLE: return TranslateT("I'm hiding from the mafia.");
+ case ID_STATUS_ONTHEPHONE: return TranslateT("That'll be the phone.");
+ case ID_STATUS_OUTTOLUNCH: return TranslateT("Mmm...food.");
+ case ID_STATUS_IDLE: return TranslateT("idleeeeeeee");
+ }
+ return NULL;
+}
+
+TCHAR *GetDefaultStatusMessage(PROTOCOLSETTINGEX *ps, int newstatus)
+{
+ if (ps->szMsg != NULL) {// custom message set
+ log_infoA("CommonStatus: Status message set by calling plugin");
+ return mir_a2t( ps->szMsg );
+ }
+
+ if ( ServiceExists( MS_AWAYMSG_GETSTATUSMSGT )) {
+ TCHAR* tMsg = ( TCHAR* )CallService( MS_AWAYMSG_GETSTATUSMSGT, newstatus, (LPARAM)ps->szName );
+ log_debugA("CommonStatus: Status message retrieved from general awaysys (TCHAR)");
+ return tMsg;
+ }
+
+ if ( ServiceExists(MS_AWAYMSG_GETSTATUSMSG)) {
+ char *tMsg;
+ if ( ServiceExists(MS_SA_ISSARUNNING) && CallService(MS_SA_ISSARUNNING, 0, 0))
+ tMsg = (char*)CallService(MS_AWAYMSG_GETSTATUSMSG, (WPARAM)newstatus, (LPARAM)ps->szName);
+ else
+ tMsg = (char*)CallService(MS_AWAYMSG_GETSTATUSMSG, (WPARAM)newstatus, 0);
+
+ log_debugA("CommonStatus: Status message retrieved from general awaysys");
+
+ TCHAR* result = mir_a2t( tMsg );
+ mir_free(tMsg);
+ return result;
+ }
+
+ /* awaysys doesn't define the service above */
+ TCHAR* tMsg = GetDefaultMessage(newstatus);
+ if (tMsg != NULL) {
+ log_debugA("CommonStatus: Status message retrieved from defaults");
+ return mir_tstrdup(tMsg);
+ }
+
+ return NULL;
+}
+
+static int equalsGlobalStatus(PROTOCOLSETTINGEX **ps) {
+
+ int i, j, pstatus = 0, gstatus = 0;
+
+ for ( i=0; i < protoList->getCount(); i++ )
+ if ( ps[i]->szMsg != NULL && GetActualStatus(ps[i]) != ID_STATUS_OFFLINE )
+ return 0;
+
+ int count;
+ PROTOACCOUNT** protos;
+ ProtoEnumAccounts( &count, &protos );
+
+ for ( i=0; i < count; i++ ) {
+ if ( !IsSuitableProto( protos[i] ))
+ continue;
+
+ pstatus = 0;
+ for ( j=0; j < protoList->getCount(); j++ )
+ if (!strcmp(protos[i]->szModuleName, ps[j]->szName))
+ pstatus = GetActualStatus(ps[j]);
+
+ if (pstatus == 0)
+ pstatus = CallProtoService(protos[i]->szModuleName, PS_GETSTATUS, 0, 0);
+
+ if (DBGetContactSettingByte(NULL, protos[i]->szModuleName, "LockMainStatus", 0)) {
+ // if proto is locked, pstatus must be the current status
+ if (pstatus != CallProtoService(protos[i]->szModuleName, PS_GETSTATUS, 0, 0))
+ return 0;
+ }
+ else {
+ if (gstatus == 0)
+ gstatus = pstatus;
+
+ if (pstatus != gstatus)
+ return 0;
+ }
+ }
+
+ return gstatus;
+}
+
+static int nasSetStatus(PROTOCOLSETTINGEX **protoSettings, int newstatus)
+{
+ NAS_PROTOINFO npi;
+ char **nasProtoMessages, *nasGlobalMsg;
+ int i, j, msgCount, maxMsgCount;
+
+ if (!ServiceExists(MS_NAS_SETSTATE))
+ return -1;
+
+ nasGlobalMsg = NULL;
+ msgCount = maxMsgCount = 0;
+ if (newstatus == 0) {
+ /*
+ The global status will not be changed. Still, we'd like to set the global status message for NAS.
+ This should only be done if all protocols will change in this call. Otherwise, the chance exists
+ that an already set status message will be overwritten. The global status message will be set for
+ the status message which is to be set for most of the protocols. Protocols are only considered
+ which have szMsg==NULL. After the global status message is set, the protocols for which another
+ message and/or status have to be set will be overwritten.
+ */
+ ZeroMemory(&npi, sizeof(NAS_PROTOINFO));
+ npi.cbSize = sizeof(NAS_PROTOINFO);
+ npi.status = 0;
+ npi.szProto = NULL;
+ CallService(MS_NAS_GETSTATEA, (WPARAM)&npi, (LPARAM)1);
+ nasProtoMessages = ( char** )calloc(protoList->getCount(),sizeof(char *));
+ if (nasProtoMessages == NULL) {
+ return -1;
+ }
+ // fill the array of proto message for NAS, this will be used anyway
+ for (i=0;i<protoList->getCount();i++) {
+ if ( (!CallService(MS_PROTO_ISPROTOCOLLOADED, 0, (LPARAM)protoSettings[i]->szName)) || (protoSettings[i]->szMsg != NULL) ) {
+ continue;
+ }
+ ZeroMemory(&npi, sizeof(NAS_PROTOINFO));
+ npi.cbSize = sizeof(NAS_PROTOINFO);
+ npi.status = GetActualStatus(protoSettings[i]);
+ npi.szProto = protoSettings[i]->szName;
+ if (CallService(MS_NAS_GETSTATEA, (WPARAM)&npi, (LPARAM)1) == 0) {
+ nasProtoMessages[i] = npi.szMsg;
+ }
+ }
+ // if not all proto's are to be set here, we don't set the global status message
+ for (i=0;i<protoList->getCount();i++) {
+ if (!CallService(MS_PROTO_ISPROTOCOLLOADED, 0, (LPARAM)protoSettings[i]->szName)) {
+ break;
+ }
+ }
+ if (i == protoList->getCount()) {
+ for (i=0;i<protoList->getCount();i++) {
+ msgCount = 0;
+ for (j=i;j<protoList->getCount();j++) {
+ if ( (nasProtoMessages[i] != NULL) && (nasProtoMessages[j] != NULL) && (!strcmp(nasProtoMessages[i], nasProtoMessages[j])) ) {
+ msgCount += 1;
+ //log_infoA("Adding %s (%u) to %s (%u)", protoSettings[j]->szName, protoSettings[j]->status, protoSettings[i]->szName, protoSettings[i]->status);
+ }
+ }
+ if ( (msgCount > maxMsgCount) && ((protoList->getCount() == 1) || (msgCount > 1)) ) {
+ maxMsgCount = msgCount;
+ nasGlobalMsg = _strdup(nasProtoMessages[i]);
+ }
+ }
+ }
+ if (nasGlobalMsg != NULL) {
+ // set global message
+ ZeroMemory(&npi, sizeof(NAS_PROTOINFO));
+ npi.cbSize = sizeof(NAS_PROTOINFO);
+ npi.status = 0; // status is not important for global message
+ npi.szMsg = mir_strdup(nasGlobalMsg);
+ npi.Flags |= PIF_NO_CLIST_SETSTATUSMODE;
+ log_infoA("CommonStatus sets global status message for NAS which is to be changed for %d protocols", maxMsgCount);
+ CallService(MS_NAS_SETSTATEA, (WPARAM)&npi, (LPARAM)1);
+ }
+ for (i=0;i<protoList->getCount();i++) {
+ if (!CallService(MS_PROTO_ISPROTOCOLLOADED, 0, (LPARAM)protoSettings[i]->szName))
+ continue;
+
+ ZeroMemory(&npi, sizeof(NAS_PROTOINFO));
+ npi.cbSize = sizeof(NAS_PROTOINFO);
+ npi.status = GetActualStatus(protoSettings[i]);
+ npi.szProto = protoSettings[i]->szName;
+ if (protoSettings[i]->szMsg != NULL) {
+ npi.szMsg = mir_strdup(protoSettings[i]->szMsg);
+ log_infoA("CommonStatus will set status %u for %s and message specified by plugin using NAS (%x)", npi.status, npi.szProto, npi.szMsg);
+ }
+ else if ( (nasProtoMessages[i] != NULL) && (nasGlobalMsg != NULL) && (!strcmp(nasProtoMessages[i], nasGlobalMsg)) ) {
+ npi.szMsg = NULL;
+ log_infoA("CommonStatus will set status %u for %s and global message using NAS", npi.status, npi.szProto);
+ }
+ else {
+ npi.szMsg = nasProtoMessages[i];
+ log_infoA("CommonStatus will set status %u for %s and message from NAS using NAS", npi.status, npi.szProto);
+ }
+ CallService(MS_NAS_SETSTATEA, (WPARAM)&npi, (LPARAM)1);
+ }
+ if (nasGlobalMsg != NULL) {
+ free(nasGlobalMsg);
+ }
+ free(nasProtoMessages);
+ }
+ else {
+ ZeroMemory(&npi, sizeof(NAS_PROTOINFO));
+ npi.cbSize = sizeof(NAS_PROTOINFO);
+ npi.szProto = NULL; // global
+ npi.szMsg = NULL; // global
+ npi.status = newstatus;
+ log_debugA("CommonStatus sets global status %u using NAS", newstatus);
+ CallService(MS_NAS_SETSTATEA, (WPARAM)&npi, (LPARAM)1);
+ }
+
+ return 0;
+}
+
+static void SetStatusMsg(PROTOCOLSETTINGEX *ps, int newstatus)
+{
+ TCHAR* tszMsg = GetDefaultStatusMessage( ps, newstatus );
+ if ( tszMsg ) {
+ if ( ServiceExists( MS_VSRAMM_SETAWAYMSG )) {
+ PROTOMSGINFO pmi;
+
+ pmi.statusMode = ps->status;
+ pmi.szProto = ps->szName;
+ pmi.msg = mir_t2a( tszMsg );
+ log_debugA("CommonStatus sets status message for %s using VSRAMM", ps->szName);
+ CallService( MS_VSRAMM_SETAWAYMSG, 0, (LPARAM)&pmi );
+ mir_free( pmi.msg );
+ }
+ else {
+ /* replace the default vars in msg (I believe this is from core) */
+ for ( int j=0; tszMsg[j]; j++ ) {
+ TCHAR substituteStr[128];
+
+ if ( tszMsg[j] != '%' )
+ continue;
+
+ if ( !_tcsnicmp( tszMsg+j, _T("%time%"), 6 ))
+ GetTimeFormat( LOCALE_USER_DEFAULT, TIME_NOSECONDS, 0, 0, substituteStr, SIZEOF(substituteStr));
+ else if ( !_tcsnicmp( tszMsg+j, _T("%date%"), 6 ))
+ GetDateFormat( LOCALE_USER_DEFAULT, DATE_SHORTDATE, 0, 0, substituteStr, SIZEOF(substituteStr));
+ else
+ continue;
+
+ if ( lstrlen( substituteStr ) > 6 )
+ tszMsg = (TCHAR*)mir_realloc(tszMsg, sizeof(TCHAR)*(lstrlen(tszMsg)+1+lstrlen(substituteStr)-6));
+ MoveMemory( tszMsg + j + lstrlen(substituteStr), tszMsg+j+6, sizeof(TCHAR)*(lstrlen(tszMsg)-j-5));
+ CopyMemory( tszMsg + j, substituteStr, sizeof(TCHAR)*lstrlen( substituteStr ));
+ }
+
+ TCHAR* szFormattedMsg = variables_parsedup(tszMsg, ps->tszAccName, NULL);
+ if (szFormattedMsg != NULL) {
+ mir_free( tszMsg );
+ tszMsg = mir_tstrdup( szFormattedMsg );
+ free( szFormattedMsg );
+ }
+ }
+
+ }
+ log_debugA("CommonStatus sets status message for %s directly", ps->szName);
+ if ( CALLSERVICE_NOTFOUND == CallProtoService(ps->szName, PS_SETAWAYMSGT, newstatus, (LPARAM)tszMsg )) {
+ char* sMsg = mir_t2a( tszMsg );
+ CallProtoService(ps->szName, PS_SETAWAYMSG, newstatus, (LPARAM)sMsg );
+ mir_free( sMsg );
+ }
+ mir_free( tszMsg );
+}
+
+INT_PTR SetStatusEx(WPARAM wParam, LPARAM lParam)
+{
+ PROTOCOLSETTINGEX** protoSettings = *(PROTOCOLSETTINGEX***)wParam;
+ if ( protoSettings == NULL )
+ return -1;
+
+ int globStatus = equalsGlobalStatus( protoSettings );
+
+ /*
+ issue with setting global status;
+ things get messy because SRAway hooks ME_CLIST_STATUSMODECHANGE, so the status messages of SRAway and
+ commonstatus will clash
+ */
+ NotifyEventHooks( hCSStatusChangedExEvent, ( WPARAM )&protoSettings, 0 );
+
+ // set all status messages first
+ for ( int i=0; i < protoList->getCount(); i++ ) {
+ char* szProto = protoSettings[i]->szName;
+ if ( !CallService( MS_PROTO_ISPROTOCOLLOADED, 0, (LPARAM)szProto )) {
+ log_debugA( "CommonStatus: %s is not loaded", szProto );
+ continue;
+ }
+ // some checks
+ int newstatus = GetActualStatus( protoSettings[i] );
+ if (newstatus == 0) {
+ log_debugA("CommonStatus: incorrect status for %s (%d)", szProto, protoSettings[i]->status);
+ continue;
+ }
+ int oldstatus = CallProtoService(szProto, PS_GETSTATUS, 0, 0);
+ // set last status
+ protoSettings[i]->lastStatus = oldstatus;
+ if (oldstatus <= MAX_CONNECT_RETRIES) {// ignore if connecting, but it didn't came this far if it did
+ log_debugA("CommonStatus: %s is already connecting", szProto);
+ continue;
+ }
+
+ // status checks
+ long protoFlag = Proto_Status2Flag( newstatus );
+ int b_Caps2 = CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_2, 0) & protoFlag;
+ int b_Caps5 = CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_5, 0) & protoFlag;
+ if ( newstatus != ID_STATUS_OFFLINE && ( !b_Caps2 || b_Caps5 )) {
+ // status and status message for this status not supported
+ //log_debug("CommonStatus: status not supported %s", szProto);
+ continue;
+ }
+
+ int b_Caps1 = CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_1, 0) & PF1_MODEMSGSEND & ~PF1_INDIVMODEMSG;
+ int b_Caps3 = CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_3, 0) & protoFlag;
+ if ( newstatus == oldstatus && ( !b_Caps1 || !b_Caps3 )) {
+ // no status change and status messages are not supported
+ //log_debug("CommonStatus: no change, %s (%d %d)", szProto, oldstatus, newstatus);
+ continue;
+ }
+
+ // set status message first
+ if ( b_Caps1 && b_Caps3 )
+ SetStatusMsg( protoSettings[i], newstatus );
+
+ // set the status
+ if ( newstatus != oldstatus && !(b_Caps1 && b_Caps3 && ServiceExists( MS_NAS_SETSTATE ))) {
+ log_debugA("CommonStatus sets status for %s to %d", szProto, newstatus);
+ CallProtoService(szProto, PS_SETSTATUS, (WPARAM)newstatus, 0);
+ } }
+
+ // and finally set a status
+ if ( !nasSetStatus( protoSettings, globStatus ))
+ return 0;
+
+ if ( globStatus != 0 ) {
+ if ( !ServiceExists( MS_CLIST_SETSTATUSMODE )) {
+ log_debugA("CommonStatus: MS_CLIST_SETSTATUSMODE not available!");
+ return -1;
+ }
+ log_debugA("CommonStatus: setting global status %u", globStatus);
+ CallService(MS_CLIST_SETSTATUSMODE, (WPARAM)globStatus, 0);
+ }
+
+ return 0;
+}
+
+static INT_PTR GetProtocolCountService(WPARAM wParam, LPARAM lParam)
+{
+ return GetProtoCount();
+}
+
+bool IsSuitableProto( PROTOACCOUNT* pa )
+{
+ if ( pa == NULL )
+ return false;
+
+ if ( pa->bDynDisabled || !pa->bIsEnabled )
+ return false;
+
+ if ( CallProtoService( pa->szProtoName, PS_GETCAPS, PFLAGNUM_2, 0 ) == 0 )
+ return false;
+
+ return true;
+}
+
+int GetProtoCount()
+{
+ int pCount = 0;
+
+ int count;
+ PROTOACCOUNT** protos;
+ ProtoEnumAccounts( &count, &protos );
+
+ for( int i=0; i < count; i++ )
+ if ( IsSuitableProto( protos[i] ))
+ pCount ++;
+
+ return pCount;
+}
+
+int InitCommonStatus()
+{
+ if (!CreateServices())
+ hShutdownHook = HookEvent(ME_SYSTEM_OKTOEXIT, Exit);
+
+ return 0;
+}
+
+static int CreateServices()
+{
+ if (ServiceExists(MS_CS_SETSTATUSEX))
+ return -1;
+
+ hCSSetStatusExService = CreateServiceFunction(MS_CS_SETSTATUSEX, SetStatusEx);
+ hCSShowConfirmDlgExService = CreateServiceFunction(MS_CS_SHOWCONFIRMDLGEX, ShowConfirmDialogEx);
+ hCSStatusChangedExEvent = CreateHookableEvent(ME_CS_STATUSCHANGEEX);
+ hCSGetProtoCountService = CreateServiceFunction(MS_CS_GETPROTOCOUNT, GetProtocolCountService);
+ return 0;
+}
+
+static int Exit(WPARAM wParam, LPARAM lParam) {
+
+ UnhookEvent(hShutdownHook);
+ if (hCSSetStatusExService != 0) {
+ DestroyHookableEvent(hCSStatusChangedExEvent);
+ DestroyServiceFunction(hCSSetStatusExService);
+ DestroyServiceFunction(hCSShowConfirmDlgExService);
+ DestroyServiceFunction(hCSGetProtoCountService);
+ }
+
+ return 0;
+}
diff --git a/plugins/StatusPlugins/commonstatus.h b/plugins/StatusPlugins/commonstatus.h
new file mode 100644
index 0000000000..48bccaad70
--- /dev/null
+++ b/plugins/StatusPlugins/commonstatus.h
@@ -0,0 +1,105 @@
+/*
+ AdvancedAutoAway Plugin for Miranda-IM (www.miranda-im.org)
+ KeepStatus Plugin for Miranda-IM (www.miranda-im.org)
+ StartupStatus Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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 COMMONSTATUSHEADER
+#define COMMONSTATUSHEADER
+
+#if defined( UNICODE ) && !defined( _UNICODE )
+ #define _UNICODE
+#endif
+
+#define MIRANDA_VER 0x0900
+#define MIRANDA_CUSTOM_LP
+
+#define _CRT_SECURE_NO_WARNINGS
+
+#define _WIN32_WINNT 0x0501
+#include <windows.h>
+#include <shlobj.h>
+#include <uxtheme.h>
+#include <stdio.h>
+#include <tchar.h>
+
+#include <newpluginapi.h>
+#include <m_system.h>
+#include <m_system_cpp.h>
+#include <m_awaymsg.h>
+#include <m_database.h>
+#include <m_protosvc.h>
+#include <m_clist.h>
+#include <m_langpack.h>
+#include <m_popup.h>
+#include <m_variables.h>
+#include <m_netlib.h>
+#include "m_statusplugins.h"
+#include <m_vsramm.h>
+#include <m_utils.h>
+#include <m_NewAwaySys.h>
+#include <m_updater.h>
+#include <win2k.h>
+
+#if defined( _WIN64 )
+ #define __PLATFORM_NAME "64"
+#else
+ #define __PLATFORM_NAME ""
+#endif
+
+#include "../helpers/gen_helpers.h"
+
+typedef struct {
+ int cbSize;
+ char *szName; // pointer to protocol modulename
+ char *szMsg; // pointer to the status message (may be NULL)
+ WORD status; // the status
+ WORD lastStatus;// last status
+} PROTOCOLSETTINGEX_V1;
+
+#define UM_STSMSGDLGCLOSED WM_APP+1
+#define UM_CLOSECONFIRMDLG WM_APP+2
+
+#define PREFIX_LAST "last_"
+#define PREFIX_LASTMSG "lastmsg_"
+#define DEFAULT_STATUS ID_STATUS_LAST
+#define ID_STATUS_LAST 40081 // doesn't interfere with ID_STATUS_IDLE, since we don't use it. However this *is* a good lesson not to do this again.
+#define ID_STATUS_CURRENT 40082
+#define ID_STATUS_DISABLED 41083 // this should not be send to setstatus(ex)
+#define MAX_STATUS ID_STATUS_CURRENT
+#define MIN_STATUS ID_STATUS_OFFLINE
+#define DEF_CLOSE_TIME 5 //secs
+#define PF2_OFFLINE 0x00000200
+static int statusModeList[]={ID_STATUS_OFFLINE,ID_STATUS_ONLINE,ID_STATUS_AWAY,ID_STATUS_NA,ID_STATUS_OCCUPIED,ID_STATUS_DND,ID_STATUS_FREECHAT,ID_STATUS_INVISIBLE,ID_STATUS_ONTHEPHONE,ID_STATUS_OUTTOLUNCH};
+static int statusModePf2List[]={PF2_OFFLINE,PF2_ONLINE,PF2_SHORTAWAY,PF2_LONGAWAY,PF2_LIGHTDND,PF2_HEAVYDND,PF2_FREECHAT,PF2_INVISIBLE,PF2_ONTHEPHONE,PF2_OUTTOLUNCH};
+
+TCHAR *GetDefaultStatusMessage(PROTOCOLSETTINGEX *ps, int status);
+int GetActualStatus(PROTOCOLSETTINGEX *protoSetting);
+int InitCommonStatus();
+bool IsSuitableProto( PROTOACCOUNT* pa );
+
+/* SimpleAway */
+
+// wParam = 0
+// lParam = 0
+// allways returns 1
+#define MS_SA_ISSARUNNING "SimpleAway/IsSARunning"
+
+extern HINSTANCE hInst;
+extern OBJLIST<PROTOCOLSETTINGEX>* protoList;
+
+#endif //COMMONSTATUSHEADER
diff --git a/plugins/StatusPlugins/confirmdialog.cpp b/plugins/StatusPlugins/confirmdialog.cpp
new file mode 100644
index 0000000000..724ddc2aef
--- /dev/null
+++ b/plugins/StatusPlugins/confirmdialog.cpp
@@ -0,0 +1,442 @@
+/*
+ AdvancedAutoAway Plugin for Miranda-IM (www.miranda-im.org)
+ KeepStatus Plugin for Miranda-IM (www.miranda-im.org)
+ StartupStatus Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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 "commonstatus.h"
+#include "resource.h"
+
+#define TIMER_ID 1
+
+// variables
+static HWND win;
+static int timeOut;
+
+struct TConfirmSetting : public PROTOCOLSETTINGEX
+{
+ TConfirmSetting( const PROTOCOLSETTINGEX& x )
+ {
+ memcpy( this, &x, sizeof(PROTOCOLSETTINGEX));
+ if ( szMsg )
+ szMsg = _strdup( szMsg );
+ }
+
+ ~TConfirmSetting()
+ {
+ if ( szMsg )
+ free( szMsg );
+ }
+};
+
+static int CompareSettings( const TConfirmSetting* p1, const TConfirmSetting* p2 )
+{ return lstrcmpA( p1->szName, p2->szName );
+}
+
+static OBJLIST<TConfirmSetting> confirmSettings( 10, CompareSettings );
+
+static INT_PTR CALLBACK StatusMessageDlgProc(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ static PROTOCOLSETTINGEX* protoSetting = NULL;
+ switch(msg) {
+ case WM_INITDIALOG:
+ TranslateDialogDefault(hwndDlg);
+
+ protoSetting = (PROTOCOLSETTINGEX *)lParam;
+ if (protoSetting->szMsg == NULL) {
+ TCHAR* smsg = GetDefaultStatusMessage(protoSetting, GetActualStatus(protoSetting));
+ if (smsg != NULL) {
+ SetDlgItemText(hwndDlg, IDC_STSMSG, smsg);
+ mir_free(smsg);
+ }
+ }
+ else SetDlgItemTextA(hwndDlg, IDC_STSMSG, protoSetting->szMsg);
+
+ {
+ TCHAR desc[ 512 ];
+ mir_sntprintf(desc, SIZEOF(desc),
+ TranslateT("Set %s message for %s."),
+ CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION, GetActualStatus(protoSetting), GSMDF_TCHAR ),
+ protoSetting->tszAccName );
+ SetDlgItemText(hwndDlg, IDC_DESCRIPTION, desc);
+ }
+ break;
+
+ case WM_COMMAND:
+ switch (LOWORD(wParam)) {
+ case IDC_OK:
+ {
+ int len = SendMessage(GetDlgItem(hwndDlg, IDC_STSMSG), WM_GETTEXTLENGTH, 0, 0);
+ if (len > 0) {
+ protoSetting->szMsg = ( char* )realloc(protoSetting->szMsg, len+1);
+ if (protoSetting->szMsg != NULL)
+ GetDlgItemTextA(hwndDlg, IDC_STSMSG, protoSetting->szMsg, len+1);
+ }
+ SendMessage(GetParent(hwndDlg), UM_STSMSGDLGCLOSED, (WPARAM)TRUE, 0);
+ EndDialog(hwndDlg, IDC_OK);
+ }
+ break;
+
+ case IDC_CANCEL:
+ SendMessage(GetParent(hwndDlg), UM_STSMSGDLGCLOSED, (WPARAM)0, 0);
+ EndDialog(hwndDlg, IDC_CANCEL);
+ break;
+ }
+ break;
+ }
+
+ return FALSE;
+}
+
+static int SetStatusList(HWND hwndDlg)
+{
+ if (confirmSettings.getCount() == 0)
+ return -1;
+
+ HWND hList = GetDlgItem(hwndDlg, IDC_STARTUPLIST);
+ TCHAR buf[100];
+
+ // create items
+ LVITEM lvItem = { 0 };
+ lvItem.mask = LVIF_TEXT | LVIF_PARAM;
+ lvItem.cchTextMax = 256;
+
+ for( int i=0; i < confirmSettings.getCount(); i++ ) {
+ lvItem.pszText = confirmSettings[i].tszAccName;
+ if (ListView_GetItemCount(hList) < confirmSettings.getCount())
+ ListView_InsertItem(hList,&lvItem);
+
+ int actualStatus;
+ switch( confirmSettings[i].status ) {
+ case ID_STATUS_LAST: actualStatus = confirmSettings[i].lastStatus; break;
+ case ID_STATUS_CURRENT: actualStatus = CallProtoService(confirmSettings[i].szName,PS_GETSTATUS, 0, 0); break;
+ default: actualStatus = confirmSettings[i].status;
+ }
+ TCHAR* status = ( TCHAR* )CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION, actualStatus, GSMDF_TCHAR );
+ switch( confirmSettings[i].status ) {
+ case ID_STATUS_LAST:
+ mir_sntprintf(buf, SIZEOF(buf), _T("%s (%s)"), TranslateT("<last>"), status);
+ ListView_SetItemText(hList, lvItem.iItem, 1, buf);
+ break;
+ case ID_STATUS_CURRENT:
+ mir_sntprintf( buf, SIZEOF(buf), _T("%s (%s)"), TranslateT("<current>"), status);
+ ListView_SetItemText(hList, lvItem.iItem, 1, buf);
+ break;
+ default:
+ ListView_SetItemText(hList, lvItem.iItem, 1, status);
+ }
+
+ // status message
+ if ( !((!((CallProtoService(confirmSettings[i].szName, PS_GETCAPS, (WPARAM)PFLAGNUM_1, 0)&PF1_MODEMSGSEND)&~PF1_INDIVMODEMSG)) || (!(CallProtoService(confirmSettings[i].szName, PS_GETCAPS, (WPARAM)PFLAGNUM_3, 0)&Proto_Status2Flag(actualStatus)))) ) {
+ TCHAR *msg = GetDefaultStatusMessage( &confirmSettings[i], actualStatus );
+ if ( msg != NULL ) {
+ TCHAR* fMsg = variables_parsedup( msg, confirmSettings[i].tszAccName, NULL );
+ ListView_SetItemText(hList, lvItem.iItem, 2, fMsg);
+ free(fMsg);
+ mir_free(msg);
+ }
+ else ListView_SetItemText(hList, lvItem.iItem, 2, TranslateT("<n/a>"));
+ }
+ else ListView_SetItemText(hList, lvItem.iItem, 2, TranslateT("<n/a>"));
+
+ ListView_SetColumnWidth(hList, 0, LVSCW_AUTOSIZE);
+ ListView_SetColumnWidth(hList, 2, LVSCW_AUTOSIZE);
+ lvItem.lParam = (LPARAM)&confirmSettings[i];
+ ListView_SetItem(hList,&lvItem);
+ lvItem.iItem++;
+ }
+
+ // grey out status box
+ EnableWindow(GetDlgItem(hwndDlg,IDC_STATUS), (ListView_GetNextItem(GetDlgItem(hwndDlg,IDC_STARTUPLIST),-1,LVNI_SELECTED)>=0));
+ return 0;
+}
+
+static BOOL CALLBACK ConfirmDlgProc(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ switch(msg) {
+ case WM_INITDIALOG:
+ TranslateDialogDefault(hwndDlg);
+ {
+ HWND hList=GetDlgItem(hwndDlg,IDC_STARTUPLIST);
+ SendMessage(hList,LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_FULLROWSELECT);
+
+ // create columns
+ LVCOLUMN lvCol = { 0 };
+ lvCol.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
+ lvCol.pszText = TranslateT("Protocol");
+ ListView_InsertColumn(hList, 0, &lvCol );
+
+ lvCol.cx = 100;
+ lvCol.pszText = TranslateT("Status");
+ ListView_InsertColumn(hList, 1, &lvCol );
+
+ lvCol.pszText = TranslateT("Message");
+ ListView_InsertColumn(hList, 2, &lvCol );
+ }
+
+ // create items
+ SetStatusList(hwndDlg);
+
+ EnableWindow(GetDlgItem(hwndDlg, IDC_SETSTSMSG), FALSE);
+ // fill profile combo box
+ if (!ServiceExists(MS_SS_GETPROFILE))
+ EnableWindow(GetDlgItem(hwndDlg, IDC_PROFILE), FALSE);
+ else {
+ int defaultProfile;
+ int profileCount = (int)CallService(MS_SS_GETPROFILECOUNT, (WPARAM)&defaultProfile, 0);
+ for ( int i=0; i < profileCount; i++ ) {
+ char profileName[128];
+ CallService( MS_SS_GETPROFILENAME, i, (LPARAM)profileName );
+ int item = SendDlgItemMessageA( hwndDlg, IDC_PROFILE, CB_ADDSTRING, 0, (LPARAM)profileName );
+ SendDlgItemMessage( hwndDlg, IDC_PROFILE, CB_SETITEMDATA, item, ( LPARAM )i );
+ }
+ if ( profileCount == 0 )
+ EnableWindow(GetDlgItem(hwndDlg, IDC_PROFILE), FALSE);
+ }
+ // start timer
+ if (timeOut > 0) {
+ TCHAR text[32];
+ _sntprintf(text, SIZEOF(text), TranslateT("Closing in %d"), timeOut);
+ SetDlgItemText(hwndDlg, IDC_CLOSE, text);
+ SetTimer(hwndDlg, TIMER_ID, 1000, NULL);
+ }
+ break;
+
+ case WM_TIMER:
+ {
+ TCHAR text[32];
+ _sntprintf(text, SIZEOF(text), TranslateT("Closing in %d"), timeOut-1);
+ SetDlgItemText(hwndDlg, IDC_CLOSE, text);
+ if (timeOut <= 0) {
+ KillTimer(hwndDlg, TIMER_ID);
+ SendMessage(hwndDlg, UM_CLOSECONFIRMDLG, 0, 0);
+ }
+ else timeOut--;
+ }
+ break;
+
+ case WM_COMMAND:
+ // stop timer
+ KillTimer(hwndDlg, TIMER_ID);
+ SetDlgItemText(hwndDlg, IDC_CLOSE, TranslateT("Close"));
+ if ( (HIWORD(wParam) == CBN_SELCHANGE) || (HIWORD(wParam) == BN_CLICKED) || (HIWORD(wParam) == NM_CLICK) ) { // something clicked
+ switch (LOWORD(wParam)) {
+ case IDC_PROFILE:
+ {
+ int i, profile = (int)SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_GETITEMDATA, SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_GETCURSEL, 0, 0), 0);
+ for ( i=0; i < confirmSettings.getCount(); i++ ) {
+ if (confirmSettings[i].szMsg != NULL) {
+ free(confirmSettings[i].szMsg);
+ confirmSettings[i].szMsg = NULL;
+ } }
+
+ CallService(MS_SS_GETPROFILE, (WPARAM)profile, (LPARAM)&confirmSettings);
+ for ( i=0; i < confirmSettings.getCount(); i++ )
+ if (confirmSettings[i].szMsg != NULL) // we free this later, copy to our memory space
+ confirmSettings[i].szMsg = _strdup(confirmSettings[i].szMsg);
+
+ SetStatusList(hwndDlg);
+ }
+ break;
+
+ case IDC_STATUS:
+ {
+ LVITEM lvItem = { 0 };
+ lvItem.mask = LVIF_TEXT | LVIF_PARAM;
+ lvItem.iSubItem = 0;
+ lvItem.iItem = ListView_GetNextItem(GetDlgItem(hwndDlg,IDC_STARTUPLIST),-1,LVNI_SELECTED);
+ if (lvItem.iItem == -1)
+ break;
+ ListView_GetItem(GetDlgItem(hwndDlg,IDC_STARTUPLIST), &lvItem);
+ PROTOCOLSETTINGEX* proto = (PROTOCOLSETTINGEX*)lvItem.lParam;
+ int actualStatus = proto->status = (int)SendDlgItemMessage(hwndDlg, IDC_STATUS, CB_GETITEMDATA, SendDlgItemMessage(hwndDlg, IDC_STATUS, CB_GETCURSEL, 0, 0), 0);
+
+ // LAST STATUS
+ if (proto->status == ID_STATUS_LAST) {
+ TCHAR last[80];
+ mir_sntprintf(last, SIZEOF(last), _T("%s (%s)"),
+ TranslateT("<last>"),
+ CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION, proto->lastStatus, GSMDF_TCHAR ));
+ ListView_SetItemText(GetDlgItem(hwndDlg,IDC_STARTUPLIST), lvItem.iItem, 1, last);
+ actualStatus = proto->lastStatus;
+ }
+
+ // CURRENT STATUS
+ else if (proto->status == ID_STATUS_CURRENT) {
+ int currentStatus = CallProtoService(proto->szName,PS_GETSTATUS, 0, 0);
+ TCHAR current[80];
+ mir_sntprintf(current, SIZEOF(current), _T("%s (%s)"),
+ TranslateT("<current>"),
+ CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION, currentStatus, GSMDF_TCHAR ));
+ ListView_SetItemText(GetDlgItem(hwndDlg,IDC_STARTUPLIST), lvItem.iItem, 1, current);
+ actualStatus = currentStatus;
+ }
+ else ListView_SetItemText(GetDlgItem(hwndDlg,IDC_STARTUPLIST), lvItem.iItem, 1,
+ ( TCHAR* )CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION, proto->status, GSMDF_TCHAR ));
+
+ if ( (!((CallProtoService(proto->szName, PS_GETCAPS, (WPARAM)PFLAGNUM_1, 0)&PF1_MODEMSGSEND)&~PF1_INDIVMODEMSG)) || (!(CallProtoService(proto->szName, PS_GETCAPS, (WPARAM)PFLAGNUM_3, 0)&Proto_Status2Flag(actualStatus))) )
+ EnableWindow(GetDlgItem(hwndDlg, IDC_SETSTSMSG), FALSE);
+ else if ( (proto->status == ID_STATUS_LAST) || (proto->status == ID_STATUS_CURRENT) )
+ EnableWindow(GetDlgItem(hwndDlg, IDC_SETSTSMSG), TRUE);
+ else
+ EnableWindow(GetDlgItem(hwndDlg, IDC_SETSTSMSG), (CallProtoService(proto->szName, PS_GETCAPS, (WPARAM)PFLAGNUM_3, 0)&Proto_Status2Flag(actualStatus))?TRUE:FALSE);
+ SetStatusList(hwndDlg);
+ }
+ break;
+
+ case IDC_SETSTSMSG:
+ {
+ LVITEM lvItem = { 0 };
+ lvItem.mask=LVIF_TEXT|LVIF_PARAM;
+ lvItem.iSubItem=0;
+ lvItem.iItem = ListView_GetNextItem(GetDlgItem(hwndDlg,IDC_STARTUPLIST),-1,LVNI_SELECTED);
+ if (lvItem.iItem == -1)
+ break;
+
+ ListView_GetItem(GetDlgItem(hwndDlg,IDC_STARTUPLIST), &lvItem);
+ DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SETSTSMSGDIALOG), hwndDlg, StatusMessageDlgProc, lvItem.lParam);
+ }
+ break;
+
+ case IDC_CLOSE:
+ SendMessage(hwndDlg, UM_CLOSECONFIRMDLG, 0, 0);
+ break;
+
+ case IDC_CANCEL:
+ DestroyWindow(hwndDlg);
+ break;
+ }
+ }
+ break;
+
+ case WM_NOTIFY:
+ switch(((NMHDR*)lParam)->idFrom) {
+ case IDC_STARTUPLIST:
+ switch(((NMHDR*)lParam)->code) {
+ // fill combobox
+ case NM_CLICK:
+ {
+ LVITEM lvItem;
+ PROTOCOLSETTINGEX* proto;
+ TCHAR buf[100];
+ int item, flags, i, currentStatus, actualStatus;
+
+ KillTimer(hwndDlg, TIMER_ID);
+ SetDlgItemText(hwndDlg, IDC_CLOSE, TranslateT("Close"));
+
+ memset(&lvItem,0,sizeof(lvItem));
+ lvItem.mask=LVIF_TEXT|LVIF_PARAM;
+ lvItem.iSubItem=0;
+ lvItem.iItem = ListView_GetNextItem(GetDlgItem(hwndDlg,IDC_STARTUPLIST),-1,LVNI_SELECTED);
+
+ if (ListView_GetItem(GetDlgItem(hwndDlg,IDC_STARTUPLIST), &lvItem) == FALSE) {
+ SetStatusList(hwndDlg);
+ break;
+ }
+ proto = (PROTOCOLSETTINGEX*)lvItem.lParam;
+
+ flags = CallProtoService(proto->szName, PS_GETCAPS,PFLAGNUM_2,0)&~CallProtoService(proto->szName, PS_GETCAPS, (WPARAM)PFLAGNUM_5, 0);
+ // clear box and add new status, loop status and check if compatible with proto
+ SendDlgItemMessage(hwndDlg, IDC_STATUS, CB_RESETCONTENT, (WPARAM)0, (LPARAM)0);
+ actualStatus = proto->status;
+
+ // last
+ mir_sntprintf(buf, SIZEOF(buf), _T("%s (%s)"),
+ TranslateT("<last>"),
+ CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION, (WPARAM)proto->lastStatus, GSMDF_TCHAR));
+ item = SendDlgItemMessage( hwndDlg, IDC_STATUS, CB_ADDSTRING, 0, (LPARAM)buf );
+ SendDlgItemMessage( hwndDlg, IDC_STATUS, CB_SETITEMDATA, item, (LPARAM)ID_STATUS_LAST );
+ if (proto->status == ID_STATUS_LAST) {
+ SendDlgItemMessage(hwndDlg,IDC_STATUS,CB_SETCURSEL,(WPARAM)item,0);
+ actualStatus = proto->lastStatus;
+ }
+
+ // current
+ currentStatus = CallProtoService(proto->szName,PS_GETSTATUS, 0, 0);
+ mir_sntprintf( buf, SIZEOF(buf), _T("%s (%s)"),
+ TranslateT("<current>"),
+ CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION, (WPARAM)currentStatus, GSMDF_TCHAR));
+ item = SendDlgItemMessage(hwndDlg,IDC_STATUS,CB_ADDSTRING,0,(LPARAM)buf);
+ SendDlgItemMessage(hwndDlg,IDC_STATUS,CB_SETITEMDATA,item,(LPARAM)ID_STATUS_CURRENT);
+ if (proto->status == ID_STATUS_CURRENT) {
+ SendDlgItemMessage(hwndDlg,IDC_STATUS,CB_SETCURSEL,(WPARAM)item,0);
+ actualStatus = currentStatus;
+ }
+
+ for( i = 0; i < SIZEOF(statusModeList); i++ ) {
+ if ( ((flags&statusModePf2List[i]) || (statusModePf2List[i] == PF2_OFFLINE)) && (!((!(flags)&Proto_Status2Flag(statusModePf2List[i]))) || ((CallProtoService(proto->szName, PS_GETCAPS, (WPARAM)PFLAGNUM_5, 0)&Proto_Status2Flag(statusModePf2List[i])))) ) {
+ TCHAR* statusMode = ( TCHAR* )CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION, statusModeList[i], GSMDF_TCHAR);
+ item = SendDlgItemMessage(hwndDlg,IDC_STATUS,CB_ADDSTRING,0,(LPARAM)statusMode);
+ SendDlgItemMessage(hwndDlg,IDC_STATUS,CB_SETITEMDATA,item,(LPARAM)statusModeList[i]);
+ if (statusModeList[i] == proto->status)
+ SendDlgItemMessage(hwndDlg,IDC_STATUS,CB_SETCURSEL,(WPARAM)item,0);
+ } }
+
+ // enable status box
+ EnableWindow(GetDlgItem(hwndDlg,IDC_STATUS), (ListView_GetNextItem(GetDlgItem(hwndDlg,IDC_STARTUPLIST),-1,LVNI_SELECTED)>=0));
+ if ( (!((CallProtoService(proto->szName, PS_GETCAPS, (WPARAM)PFLAGNUM_1, 0)&PF1_MODEMSGSEND)&~PF1_INDIVMODEMSG)) || (!(CallProtoService(proto->szName, PS_GETCAPS, (WPARAM)PFLAGNUM_3, 0)&Proto_Status2Flag(actualStatus))) )
+ EnableWindow(GetDlgItem(hwndDlg, IDC_SETSTSMSG), FALSE);
+ else if ( proto->status == ID_STATUS_LAST || proto->status == ID_STATUS_CURRENT )
+ EnableWindow(GetDlgItem(hwndDlg, IDC_SETSTSMSG), TRUE);
+ else
+ EnableWindow(GetDlgItem(hwndDlg, IDC_SETSTSMSG), (CallProtoService(proto->szName, PS_GETCAPS, (WPARAM)PFLAGNUM_3, 0)&Proto_Status2Flag(actualStatus))?TRUE:FALSE);
+ }
+ break;
+ }
+ break;
+ }
+ break;
+
+ case UM_STSMSGDLGCLOSED:
+ SetStatusList(hwndDlg);
+ break;
+
+ case UM_CLOSECONFIRMDLG:
+ CallService(MS_CS_SETSTATUSEX, (WPARAM)&confirmSettings, 0);
+ DestroyWindow(hwndDlg);
+ break;
+
+ case WM_DESTROY:
+ confirmSettings.destroy();
+ break;
+ }
+
+ return 0;
+}
+
+INT_PTR ShowConfirmDialogEx(WPARAM wParam, LPARAM lParam)
+{
+ if ( wParam == 0 )
+ return -1;
+
+ confirmSettings.destroy();
+
+ OBJLIST<PROTOCOLSETTINGEX>& param = *( OBJLIST<PROTOCOLSETTINGEX>* )wParam;
+ for ( int i=0; i < param.getCount(); i++ )
+ confirmSettings.insert( new TConfirmSetting( param[i] ));
+
+ timeOut = lParam;
+ if (timeOut < 0)
+ timeOut = DEF_CLOSE_TIME;
+
+ if ( GetWindow(win, 0) == NULL ) {
+ win = CreateDialogParam( hInst,(LPCTSTR)MAKEINTRESOURCE(IDD_CONFIRMDIALOG),(HWND)NULL,(DLGPROC)ConfirmDlgProc,(LPARAM)NULL);
+ EnableWindow(win,TRUE);
+ }
+
+ return (INT_PTR)win;
+}
diff --git a/plugins/StatusPlugins/copying.txt b/plugins/StatusPlugins/copying.txt
new file mode 100644
index 0000000000..cff645bda5
--- /dev/null
+++ b/plugins/StatusPlugins/copying.txt
@@ -0,0 +1,346 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
diff --git a/plugins/StatusPlugins/dbhelpers.h b/plugins/StatusPlugins/dbhelpers.h
new file mode 100644
index 0000000000..cf91748fe6
--- /dev/null
+++ b/plugins/StatusPlugins/dbhelpers.h
@@ -0,0 +1,100 @@
+#ifndef PREFIX_ITH
+#define PREFIX_ITH ""
+#endif
+
+// database helpers
+static int __inline DBWriteIthSettingByte(DWORD i, HANDLE hContact,const char *szModule,const char *szSetting,BYTE val) {
+
+ char dbSetting[128];
+
+ _snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ITH, i, szSetting);
+ return DBWriteContactSettingByte(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteIthSettingWord(DWORD i, HANDLE hContact,const char *szModule,const char *szSetting,WORD val) {
+
+ char dbSetting[128];
+
+ _snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ITH, i, szSetting);
+ return DBWriteContactSettingWord(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteIthSettingDword(DWORD i, HANDLE hContact,const char *szModule,const char *szSetting,DWORD val) {
+
+ char dbSetting[128];
+
+ _snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ITH, i, szSetting);
+ return DBWriteContactSettingDword(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteIthSettingString(DWORD i, HANDLE hContact,const char *szModule,const char *szSetting,const char *val) {
+
+ char dbSetting[128];
+
+ _snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ITH, i, szSetting);
+ return DBWriteContactSettingString(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBGetIthSettingByte(DWORD i, HANDLE hContact, const char *szModule, const char *szSetting, int errorValue) {
+
+
+ char dbSetting[128];
+
+ _snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ITH, i, szSetting);
+ return DBGetContactSettingByte(hContact, szModule, dbSetting, errorValue);
+}
+
+static WORD __inline DBGetIthSettingWord(DWORD i, HANDLE hContact, const char *szModule, const char *szSetting, int errorValue) {
+
+
+ char dbSetting[128];
+
+ _snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ITH, i, szSetting);
+ return DBGetContactSettingWord(hContact, szModule, dbSetting, errorValue);
+}
+
+static DWORD __inline DBGetIthSettingDword(DWORD i, HANDLE hContact, const char *szModule, const char *szSetting, int errorValue) {
+
+
+ char dbSetting[128];
+
+ _snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ITH, i, szSetting);
+ return DBGetContactSettingDword(hContact, szModule, dbSetting, errorValue);
+}
+
+static int __inline DBGetIthSetting(DWORD i, HANDLE hContact, const char *szModule, const char *szSetting, DBVARIANT *dbv) {
+
+
+ char dbSetting[128];
+
+ _snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ITH, i, szSetting);
+ return DBGetContactSetting(hContact, szModule, dbSetting, dbv);
+}
+
+static int __inline DBDeleteIthSetting(DWORD i, HANDLE hContact,const char *szModule,const char *szSetting) {
+
+ char dbSetting[128];
+
+ _snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ITH, i, szSetting);
+ return DBDeleteContactSetting(hContact, szModule, dbSetting);
+}
+
+#define db_getb(a,b) DBGetContactSettingByte(NULL, MODULENAME, a, b)
+#define db_getw(a,b) DBGetContactSettingWord(NULL, MODULENAME, a, b)
+#define db_getd(a,b) DBGetContactSettingDword(NULL, MODULENAME, a, b)
+#define db_gets(a,b) DBGetContactSetting(NULL, MODULENAME, a, b)
+#define db_setb(a,b) DBWriteContactSettingByte(NULL, MODULENAME, a, (BYTE)b)
+#define db_sets(a,b) DBWriteContactSettingString(NULL, MODULENAME, a, b)
+#define db_setw(a,b) DBWriteContactSettingWord(NULL, MODULENAME, a, (WORD)b)
+#define db_setd(a,b) DBWriteContactSettingDword(NULL, MODULENAME, a, (DWORD)b)
+#define db_del(a) DBDeleteContactSetting(NULL, MODULENAME, a);
+
+#define dbi_getb(a,b,c) DBGetIthSettingByte(a, NULL, MODULENAME, b, c)
+#define dbi_getw(a,b,c) DBGetIthSettingWord(a, NULL, MODULENAME, b, c)
+#define dbi_getd(a,b,c) DBGetIthSettingDword(a, NULL, MODULENAME, b, c)
+#define dbi_gets(a,b,c) DBGetIthSetting(a, NULL, MODULENAME, b, c)
+#define dbi_setb(a,b,c) DBWriteIthSettingByte(a, NULL, MODULENAME, b, (BYTE)c)
+#define dbi_sets(a,b,c) DBWriteIthSettingString(a, NULL, MODULENAME, b, c)
+#define dbi_setw(a,b,c) DBWriteIthSettingWord(a, NULL, MODULENAME, b, (WORD)c)
+#define dbi_setd(a,b,c) DBWriteIthSettingDword(a, NULL, MODULENAME, b, (DWORD)c)
+#define dbi_del(a,b) DBDeleteIthSetting(a, NULL, MODULENAME, b); \ No newline at end of file
diff --git a/plugins/StatusPlugins/includes/m_NewAwaySys.h b/plugins/StatusPlugins/includes/m_NewAwaySys.h
new file mode 100644
index 0000000000..4038fadaa7
--- /dev/null
+++ b/plugins/StatusPlugins/includes/m_NewAwaySys.h
@@ -0,0 +1,119 @@
+/*
+ New Away System plugin for Miranda IM
+ Copyright (c) 2005-2006 Chervov Dmitry
+
+ 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_NEWAWAYSYS_H
+#define __M_NEWAWAYSYS_H
+
+// NAS_PROTOINFO::Flags constants
+#define PIF_NO_CLIST_SETSTATUSMODE 1 // NAS won't call MS_CLIST_SETSTATUSMODE service on a global status change, if this flag is set. it's useful if you want to change the global message and status in NAS without changing current "real" protocol statuses. NAS ignores this flag if szProto != NULL
+#define PIF_NOTTEMPORARY 2
+// usually you should NOT set this flag
+// for MS_NAS_SETSTATE: NAS will overwrite current user-defined message for szProto if this flag is specified; otherwise (if the flag isn't specified), your szMsg will be stored only until the next szProto status change, and won't overwrite any messages specified by user
+// for MS_NAS_GETSTATE: NAS ignores any temporary messages and returns only non-temporary ones. this flag affects something only when status == 0
+
+typedef struct {
+ int cbSize;
+ char *szProto; // pointer to protocol modulename (NULL means global)
+ union
+ {
+ char *szMsg;
+ WCHAR *wszMsg;
+ TCHAR *tszMsg;
+ }; // pointer to the status message _format_ (i.e. it's an unparsed message containing variables, in any case. NAS takes care of parsing) (may be NULL - means that there's no specific message for this protocol - then the global status message will be used)
+/*
+ Be aware that MS_NAS_GETSTATE allocates memory for szMsg through Miranda's
+ memory management interface (MS_SYSTEM_GET_MMI). And MS_NAS_SETSTATE
+ expects szMsg to be allocated through the same service. MS_NAS_SETSTATE deallocates szMsg.
+*/
+ WORD status; // status mode. 0 means current (NAS will overwrite 0 with the current status mode)
+// for MS_NAS_GETSTATE if the specified status is not 0, MS_NAS_GETSTATE will return the default/last status message (depends on settings) - i.e. the same message that will be shown by default when user changes status to the specified one. please note that, for example, if current status mode is ID_STATUS_AWAY, then status messages returned by MS_NAS_GETSTATE for status=0 and status=ID_STATUS_AWAY may be different! for status=ID_STATUS_AWAY it always returns the default/last status message, and for status=0 it returns _current_ status message.
+ int Flags;
+} NAS_PROTOINFO;
+
+// MS_NAS_GETSTATE
+// Fills specified array of NAS_PROTOINFO items with protocol data.
+// You must construct the array and specify cbSize and szProto fields of
+// all items in the array before calling this service.
+// Remember to free szMsg fields through Miranda's MMI if you don't pass them back to NAS through MS_NAS_SETSTATE later.
+// wParam = (WPARAM)(NAS_PROTOINFO*)pi - pointer to an array of NAS_PROTOINFO items to be filled.
+// lParam = (LPARAM)(int)protoCount - number of items in pi.
+// returns 0 on success
+#define MS_NAS_GETSTATEA "NewAwaySystem/GetStateA"
+#define MS_NAS_GETSTATEW "NewAwaySystem/GetStateW"
+#ifdef _UNICODE
+ #define MS_NAS_GETSTATE MS_NAS_GETSTATEW
+#else
+ #define MS_NAS_GETSTATE MS_NAS_GETSTATEA
+#endif
+
+// MS_NAS_SETSTATE
+// Changes status mode and message of specified protocols.
+// (Note that this service deallocates szMsg field of the specified items through
+// Miranda's MMI, so the array is not valid anymore after MS_NAS_SETSTATE returns!)
+// wParam = (WPARAM)(NAS_PROTOINFO*)pi - pointer to an array of NAS_PROTOINFO items.
+// lParam = (LPARAM)(int)protoCount - number of items in pi.
+// returns 0 on success
+#define MS_NAS_SETSTATEA "NewAwaySystem/SetStateA"
+#define MS_NAS_SETSTATEW "NewAwaySystem/SetStateW"
+#ifdef _UNICODE
+ #define MS_NAS_SETSTATE MS_NAS_SETSTATEW
+#else
+ #define MS_NAS_SETSTATE MS_NAS_SETSTATEA
+#endif
+
+// NAS_ISWINFO::Flags constants
+#define ISWF_NOCOUNTDOWN 1 // don't start the countdown to close the window
+#define ISWF_UNICODE 2 // specifies that NAS_ISWINFO::szMsg is a WCHAR*
+#ifdef _UNICODE
+ #define ISWF_TCHAR ISWF_UNICODE // will use WCHAR* instead of char*
+#else
+ #define ISWF_TCHAR 0 // will use char*, as usual
+#endif
+
+typedef struct {
+ int cbSize;
+ char *szProto; // pointer to initial protocol modulename (NULL means global); ignored when hContact is not NULL.
+ HANDLE hContact; // NAS will select this contact in the window initially, if it's not NULL.
+ union
+ {
+ char *szMsg;
+ WCHAR *wszMsg;
+ TCHAR *tszMsg;
+ }; // pointer to an initial status message (may be NULL, NAS will use the default message then)
+ WORD status; // status mode. 0 means current.
+ int Flags; // a combination of ISWF_ constants
+} NAS_ISWINFO;
+
+// MS_NAS_INVOKESTATUSWINDOW
+// Invokes the status message change window.
+// Though if the window is open already, this service just activates an existing window and changes protocol status (i.e. it ignores szMsg and hContact). This behavior may change in future.
+// wParam = (WPARAM)(NAS_ISWINFO*)iswi - pointer to a NAS_ISWINFO structure.
+// lParam = 0
+// returns HWND of the window on success, or NULL on failure.
+#define MS_NAS_INVOKESTATUSWINDOW "NewAwaySystem/InvokeStatusWindow"
+
+/* An example:
+ NAS_ISWINFO iswi = {0}; // for C you may use ZeroMemory() instead
+ iswi.cbSize = sizeof(iswi);
+ iswi.tszMsg = _T("New global status message.");
+ iswi.Flags = ISWF_TCHAR;
+ CallService(MS_NAS_INVOKESTATUSWINDOW, (WPARAM)&iswi, 0);
+*/
+
+#endif // __M_NEWAWAYSYS_H \ No newline at end of file
diff --git a/plugins/StatusPlugins/includes/m_toolbar.h b/plugins/StatusPlugins/includes/m_toolbar.h
new file mode 100644
index 0000000000..fc417cf873
--- /dev/null
+++ b/plugins/StatusPlugins/includes/m_toolbar.h
@@ -0,0 +1,88 @@
+#ifndef M_TOOLBAR_H
+#define M_TOOLBAR_H
+
+#define TOOLBARBUTTON_ICONIDPREFIX "MTB_"
+#define TOOLBARBUTTON_ICONIDPRIMARYSUFFIX "_Primary"
+#define TOOLBARBUTTON_ICONIDSECONDARYSUFFIX "_Secondary"
+#define TOOLBARBUTTON_ICONNAMEPRESSEDSUFFIX "Pressed"
+
+//button flags
+#define TBBF_DISABLED (1<<0)
+#define TBBF_VISIBLE (1<<1)
+#define TBBF_PUSHED (1<<2)
+#define TBBF_SHOWTOOLTIP (1<<3)
+#define TBBF_ISSEPARATOR (1<<5)
+#define TBBF_ISLBUTTON (1<<6)
+#define TBBF_FLEXSIZESEPARATOR (TBBF_ISSEPARATOR|TBBF_PUSHED)
+typedef struct _tagTBButton
+{
+ int cbSize; // size of structure
+ char * pszButtonID; // char id of button used to store button info in DB and know about icon
+ char * pszButtonName; // name of button (not translated)
+ char * pszServiceName; // service name to be executed
+ LPARAM lParam; // param of service to be called
+ char * pszTooltipUp, *pszTooltipDn;
+ DWORD defPos; // default order pos of button (less values are nearer to edge).. please use values greater that 100. the default buttons has pos: 10,20..90
+ DWORD tbbFlags; // combine of TBBF_ flags above
+ void (*ParamDestructor)(void *); //will be called on parameters deletion
+ HANDLE hPrimaryIconHandle;
+ HANDLE hSecondaryIconHandle;
+}TBButton;
+
+//////////////////////////////////////////////////////////////////////////
+// Events
+// Only after this event module subscribers should register their buttons
+// wparam=lparam=0
+// don't forget to return 0 to continue processing
+#define ME_TB_MODULELOADED "ToolBar/ModuleLoaded"
+
+//////////////////////////////////////////////////////////////////////////
+// Services
+//
+//////////////////////////////////////////////////////////////////////////
+// Adding a button
+// WPARAM = 0
+// LPARAM = (TBButton *) &description
+// LRESULT = (HANDLE) hButton
+// in order to correctly process default icons via iconlib it should be
+// registered icolib icon with id named:
+// 'TBButton_'+pszButtonID+ 'Up' or +'Down' for Push (2-state) buttons
+#define MS_TB_ADDBUTTON "ToolBar/AddButton"
+
+//////////////////////////////////////////////////////////////////////////
+// Remove button
+// WPARAM = (HANDLE) hButton;
+// LPARAM = 0;
+#define MS_TB_REMOVEBUTTON "ToolBar/RemoveButton"
+
+//////////////////////////////////////////////////////////////////////////
+// SetState
+// WPARAM = (HANDLE) hButton;
+// LPARAM = one of below TBST_ states
+// LRESULT= old state
+#define TBST_PUSHED 1
+#define TBST_RELEASED 0
+#define MS_TB_SETBUTTONSTATE "ToolBar/SetButtonState"
+
+//////////////////////////////////////////////////////////////////////////
+// SetStatebyId
+// WPARAM = (char *) szButtonID;
+// LPARAM = one of below TBST_ states
+// LRESULT= old state
+#define MS_TB_SETBUTTONSTATEBYID "ToolBar/SetButtonStateId"
+//////////////////////////////////////////////////////////////////////////
+// GetState
+// WPARAM = (HANLDE) hButton;
+// LPARAM = 0
+// LRESULT= current state
+#define MS_TB_GETBUTTONSTATE "ToolBar/GetButtonState"
+
+//////////////////////////////////////////////////////////////////////////
+// GetState
+// WPARAM = (char *) szButtonID;;
+// LPARAM = 0
+// LRESULT= current state
+#define MS_TB_GETBUTTONSTATEBYID "ToolBar/GetButtonStateId"
+
+
+#endif \ No newline at end of file
diff --git a/plugins/StatusPlugins/includes/m_toptoolbar.h b/plugins/StatusPlugins/includes/m_toptoolbar.h
new file mode 100644
index 0000000000..5628f68de8
--- /dev/null
+++ b/plugins/StatusPlugins/includes/m_toptoolbar.h
@@ -0,0 +1,125 @@
+
+#ifndef M_TOPTOOLBAR_H
+#define M_TOPTOOLBAR_H
+
+//button flags
+#define TTBBF_DISABLED 1
+#define TTBBF_VISIBLE 2
+#define TTBBF_PUSHED 4
+#define TTBBF_SHOWTOOLTIP 8
+#define TTBBF_DRAWBORDER 16//draw border for bitmap,bitmap must be WxH 16x12
+#define TTBBF_ISSEPARATOR 32
+
+//for internal launch buttons
+#define TTBBF_ISLBUTTON 64
+
+typedef struct {
+ int cbSize;
+ HBITMAP hbBitmapUp;
+ HBITMAP hbBitmapDown;
+ char *pszServiceUp;
+ char *pszServiceDown;
+ DWORD dwFlags;
+ LPARAM lParamUp;
+ WPARAM wParamUp;
+ LPARAM lParamDown;
+ WPARAM wParamDown;
+ char *name;
+
+} TTBButton, * lpTTBButton;
+
+typedef struct {
+ int cbSize;
+ HBITMAP hbBitmapUp;
+ HBITMAP hbBitmapDown;
+ char *pszServiceUp;
+ char *pszServiceDown;
+ DWORD dwFlags;
+ LPARAM lParamUp;
+ WPARAM wParamUp;
+ LPARAM lParamDown;
+ WPARAM wParamDown;
+ char *name;
+ HICON hIconUp,hIconDn;
+ char *tooltipUp;
+ char *tooltipDn;
+
+} TTBButtonV2, * lpTTBButtonV2;
+
+//=== EVENTS ===
+/*
+toptoolbar/moduleloaded event
+wParam = lParam = 0
+Called when the toolbar services are available
+
+!!!Warning you may work with TTB services only in this event or later.
+
+*/
+#define ME_TTB_MODULELOADED "TopToolBar/ModuleLoaded"
+
+
+
+//=== SERVICES ===
+/*
+toptoolbar/addbutton service
+wparam = (TTBButton*)lpTTBButton
+lparam = 0
+returns: hTTBButton - handle of added button on success, -1 on failure.
+*/
+#define MS_TTB_ADDBUTTON "TopToolBar/AddButton"
+
+/*
+toptoolbar/removebutton service
+wparam = (HANDLE)hTTButton
+lparam = 0
+returns: 0 on success, -1 on failure.
+*/
+#define MS_TTB_REMOVEBUTTON "TopToolBar/RemoveButton"
+
+/*
+toptoolbar/setstate service
+wparam = (HANDLE)hTTButton
+lparam = (LPARAM) state
+returns: 0 on success, -1 on failure.
+*/
+#define TTBST_PUSHED 1
+#define TTBST_RELEASED 2
+
+#define MS_TTB_SETBUTTONSTATE "TopToolBar/SetState"
+
+/*
+toptoolbar/getstate service
+wparam = (HANDLE)hTTButton
+lparam = 0
+returns: state on success, -1 on failure.
+*/
+#define MS_TTB_GETBUTTONSTATE "TopToolBar/GetState"
+
+/*
+toptoolbar/getoptions service
+(HIWORD)wparam = (HANDLE)hTTButton
+(LOWORD)wparam = TTBO_FLAG
+lparam = 0,or lparam=lpTTBButton if flag=TTBO_ALLDATA
+returns: value on success, -1 on failure.
+*/
+#define TTBO_FLAGS 0 //get/set all flags
+#define TTBO_POS 1 //position
+#define TTBO_WIDTH 2 //not impemented
+#define TTBO_HEIGHT 3 //not impemented
+#define TTBO_TIPNAME 4 //tool tip name
+#define TTBO_ALLDATA 5 //change all data via lparam=lpTTBButton
+
+
+#define MS_TTB_GETBUTTONOPTIONS "TopToolBar/GetOptions"
+
+/*
+toptoolbar/setoptions service
+(HIWORD)wparam = (HANDLE)hTTButton
+(LOWORD)wparam = TTBO_FLAG
+lparam = value
+returns: 1 on success, -1 on failure.
+*/
+#define MS_TTB_SETBUTTONOPTIONS "TopToolBar/SetOptions"
+
+
+#endif \ No newline at end of file
diff --git a/plugins/StatusPlugins/includes/m_trigger.h b/plugins/StatusPlugins/includes/m_trigger.h
new file mode 100644
index 0000000000..e51294b83e
--- /dev/null
+++ b/plugins/StatusPlugins/includes/m_trigger.h
@@ -0,0 +1,1024 @@
+#ifndef __M_TRIGGER_H__
+#define __M_TRIGGER_H__
+
+#if !defined(_TCHAR_DEFINED)
+#include <tchar.h>
+#endif
+#include <m_utils.h>
+
+// --------------------------------------------------------------------------
+// Triggers
+// --------------------------------------------------------------------------
+
+// This section explains how to create your own trigger. A trigger can be seen
+// as an event which can result in a set of actions that will be performed.
+// Implementing a trigger consists of two parts. First, you register a trigger
+// with MS_TRIGGER_REGISTERTRIGGER to allow a user to configure it in the
+// options dialog. Second, when the event occurs belonging to your registered
+// trigger, you inform the trigger plugin with MS_TRIGGER_REPORTEVENT. You can
+// send a 'payload' together with this notification. This payload, called
+// 'TriggerData', can consist of a certain contact, protocol, status and/or a
+// piece of text.
+
+// --------------------------------------------------------------------------
+// Triggers: Register a trigger
+// --------------------------------------------------------------------------
+
+#define MS_TRIGGER_REGISTERTRIGGER "/TriggerPlugin/RegisterTrigger"
+
+// Parameters:
+// ------------------------
+// wParam = (WPARAM)0
+// lParam = (LPARAM)(TRIGGERREGISTER *)&tr
+// Pointer to a structure describing the trigger to add (see below).
+
+// Return Value:
+// ------------------------
+// Returns 0 on success, nozero otherwise. Registering an already existing
+// trigger will replace this previously registered trigger.
+
+typedef struct {
+ int cbSize; // Set to sizeof(TRIGGERREGISTER).
+ char *pszName; // Used as identifier and shown in the options dialog, must
+ // be unique.
+ HINSTANCE hInstance; // Only needed when options screen is available.
+ DLGPROC pfnDlgProc; // Optional, the callback procedure for the options page.
+ char *pszTemplate; // Optional, template for the options page; must be
+ // WS_CHILD.
+ int flags; // Flags, see below.
+ int dFlags; // Specify the default DF_* flags which your trigger can send
+ // (see below).
+} TRIGGERREGISTER;
+
+// Flags
+#define TRF_NOEXPORT 0x01 // This trigger cannot be exported. Set this flag
+ // in case you stored settings not using the helper
+ // functions at the end of this header. On export,
+ // TriggerPlugin will search for these settings
+ // and export them automatically. Contact-specific
+ // settings are never exported.
+
+// Please specify the dFlags to indicate what kind of data your trigger is
+// able to send as TriggerData. Please specify the maximum set, if your trigger
+// does not always send a certain data, please specify it anyway.
+
+#define DF_CONTACT 0x01 // The trigger might send a contact handle with the
+ // TriggerData.
+#define DF_PROTO 0x02 // The trigger might send a protocol ID with the
+ // TriggerData.
+#define DF_STATUS 0x04 // The trigger might send a status code with the
+ // TriggerData.
+#define DF_TEXT 0x08 // The trigger might send a string with the
+ // TriggerData.
+#define DF_LPARAM 0x10 // The trigger might send a custom parameter with the
+ // TriggerData.
+#define DF_UNICODE 0x20 // The trigger processes WCHAR strings.
+
+#if defined(UNICODE) || defined(_UNICODE)
+#define DF_TCHAR DF_UNICODE // Strings in structure are TCHAR*.
+#else
+#define DF_TCHAR 0
+#endif
+
+// Dialog Messages
+// The following message should be processed by your options dialog procedure,
+// if available. You can create an options dialog to give the user the
+// possibility to report your event only under certain circumstances. Each
+// trigger is assigned a certain ID. This ID can be used to store the settings
+// for your trigger.
+
+// WM_INITDIALOG
+
+// Parameters:
+// ------------------------
+// lParam = (LPARAM)(DWORD)triggerID
+// The trigger ID for which the options are to be set. This can be a new ID
+// or an ID of a trigger which is being edited. Initialize your options
+// dialog accordingly. There are helper function at the end of this header
+// file to read your settings for a certain trigger ID.
+
+#define TM_ADDTRIGGER WM_APP+10
+
+// TM_ADDTRIGGER
+// 'OK' is pressed and a new trigger will be added. Save your settings using
+// the given trigger ID.
+
+// Parameters:
+// ------------------------
+// wParam = (WPARAM)(DWORD)triggerID
+// The trigger ID for which the settings are to be stored. There are helper
+// function at the end of this header file to store your settings with a
+// certain trigger ID.
+// lParam = 0
+
+#define TM_DELTRIGGER WM_APP+11
+
+// TM_DELTRIGGER
+// The trigger addociated with the given trigger ID will be removed.
+
+// Parameters:
+// ------------------------
+// wParam = (WPARAM)(DWORD)triggerID
+// The trigger ID for which the settings are to be removed. There is a
+// helper service at the end of this header file to easily cleanup settings
+// for a certain trigger ID.
+// lParam = 0
+
+// --------------------------------------------------------------------------
+// Triggers: Report the Event
+// --------------------------------------------------------------------------
+
+// When the event occurs, you report it with MS_TRIGGER_REPORTEVENT. If your
+// trigger is configurable, so it has an options screen, you might want to
+// report your trigger for certain trigger ID's only. Please use the
+// MS_TRIGGER_FINDNEXTTRIGGERID to enumerate over the trigger ID's associated
+// with your trigger in the correct order as specified by the user. It's up
+// to you to found out whether or not the trigger is to be reported for a
+// certain ID.
+
+#define MS_TRIGGER_FINDNEXTTRIGGERID "/TriggerPlugin/FindNextTriggerID"
+
+// Enumerate over the associated trigger ID's for your trigger in the correct
+// order.
+
+// Parameters:
+// ------------------------
+// wParam = (WPARAM)(DWORD)triggerID
+// 0 to retrieve the first trigger ID for your trigger or the previous ID
+// returned by this service to get the next one.
+// lParam = 0
+
+// Return Value:
+// ------------------------
+// Returns the next trigger ID given the parameter or 0 if no more trigger IDs
+// are available.
+
+#define MS_TRIGGER_REPORTEVENT "/TriggerPlugin/ReportEvent"
+
+// Report your event for further processing. This can be a general event for
+// which no individual settings exist, or a specific event for a given
+// trigger ID.
+
+// Parameters:
+// ------------------------
+// wParam = 0
+// lParam = (LPARAM)(REPORTINFO *)&ri
+// See below.
+
+// Return Value:
+// ------------------------
+// Returns CRV_TRUE if all conditions specific to this trigger hold and the
+// chain was executed. Returns CRV_FALSE if these conditions did not hold and
+// the chain were not processed.
+
+// The structure below can be used to send TriggerData with your trigger. This
+// can be used by the associated conditions and actions.
+
+typedef struct {
+ int cbSize; // Set to sizeof(TRIGGERDATA)
+ int dFlags; // Indicate which members are valid using the DF_* flags (see
+ // above).
+ HANDLE hContact; // Associate a contact handle to this event.
+ char *szProto; // Associate a protocol ID to this event.
+ int status; // Associcate a status code to this event.
+ union {
+ char *szText; // Associate a string to this event.
+ TCHAR *tszText;
+ WCHAR *wszText;
+ };
+ LPARAM lParam; // Associate custom data to this trigger.
+} TRIGGERDATA;
+
+typedef struct {
+ int cbSize; // Set to sizeof(REPORTINFO).
+ DWORD triggerID; // The trigger ID of the event to trigger or 0 if this does
+ // not apply.
+ char *pszName; // The name of the trigger (this may be NULL if triggerID is
+ // not 0).
+ int flags; // On of the TRG_* flags, see below.
+ TRIGGERDATA *td; // Optional, the associated TriggerData, see above.
+} REPORTINFO;
+
+#define TRG_PERFORM 0x01 // Indicates the event for this trigger actually
+ // occured and needs to be processed accordingly.
+#define TRG_CLEANUP 0x02 // Indicates the trigger instructs to remove the
+ // itself and all associated information. This can
+ // be used for "one time triggers". Remove your own
+ // settings by yourself.
+
+// --------------------------------------------------------------------------
+// Actions
+// --------------------------------------------------------------------------
+
+// An actions might be performed as a reaction to a reported event by a
+// trigger. You first register your action so it can be associated to a
+// trigger in the options screen. Next, your provided service or function
+// will be called when necessary.
+
+#define MS_TRIGGER_REGISTERACTION "/TriggerPlugin/RegisterAction"
+
+// Parameters:
+// ------------------------
+// wParam = (WPARAM)0
+// lParam = (LPARAM)(ACTIONREGISTER *)&ar
+// Pointer to a structure describing the action to add (see below).
+
+// Return Value:
+// ------------------------
+// Returns 0 on success, nozero otherwise. Registering an already existing
+// action will replace this previously registered action.
+
+typedef int (* ACTIONFUNCTION)(DWORD actionID, REPORTINFO* ri);
+
+typedef struct {
+ int cbSize; // Set to sizeof(ACTIONREGISTER).
+ char *pszName; // The name of this action, it must be a unique string.
+ union {
+ char *pszService; // A service (called with wParam =
+ // (WPARAM)(DWORD)actionID, lParam =
+ // (LPARAM)(REPORTINFO *)&ri) or function to be called
+ // when the action has to be performed.
+ ACTIONFUNCTION actionFunction;
+ };
+ HINSTANCE hInstance; // Only needed when an options screen is available.
+ DLGPROC pfnDlgProc; // Optional, the callback procedure for the options
+ // dialog.
+ char *pszTemplate; // Optional, template for the options dialog, must be
+ // WS_CHILD.
+ int flags; // One of the ARF_* flags, see below.
+} ACTIONREGISTER;
+
+#define ARF_UNICODE 0x01 // This action processes unicode strings.
+#define ARF_FUNCTION 0x02 // The actionFunction will be called instead of
+ // the service.
+#define ARF_NOEXPORT 0x04 // This action cannot be exported. Set this flag in
+ // case you stored settings not using the helper
+ // functions at the end of this header. On export,
+ // TriggerPlugin will search for these settings
+ // and export them automatically. Contact-specific
+ // settings are never exported.
+
+#if defined(UNICODE) || defined(_UNICODE)
+#define ARF_TCHAR ARF_UNICODE
+#else
+#define ARF_TCHAR 0
+#endif
+
+// The service or actionFunction will be called with a pointer to a REPORTINFO
+// struct, containing information about the trigger event. If you can use
+// TriggerData from this struct, always check the ri->td->dFlags before using
+// it. It's up to you to deal with an action in case the expected TriggerData
+// is not available. It's recommened though, to cancel your action. The
+// ri->flags is a combination of the ACT_* flags, indicating how to process the
+// call, see below.
+
+#define ACT_PERFORM 0x01 // Your action is to be performed.
+#define ACT_CLEANUP 0x02 // The settings associated to this action should be
+ // removed.
+
+// Dialog Messages
+// The following messages are to be processed by the options dialog, if there
+// is one.
+
+// WM_INITDIALOG
+
+// Parameters:
+// ------------------------
+// lParam = (LPARAM)(DWORD)actionID
+// The action ID for which the options are to be set. This can be a new ID
+// or an ID of an action which is being edited. Initialize your options
+// dialog accordingly. There are helper function at the end of this header
+// file to read your settings for a certain action ID.
+
+#define TM_ADDACTION WM_APP+12
+
+// TM_ADDACTION
+// 'OK' is pressed and a new action will be added. Save your settings using
+// the given action ID. Helper functions can be found at the end of this
+// header file.
+
+// Parameters:
+// ------------------------
+// wParam = (WPARAM)(DWORD)actionID
+// The action ID for which the settings are to be saved. There are helper
+// functions at the end of this header file to store settings with a certain
+// action ID.
+// lParam = 0
+
+// Dialog Messages
+// You can send the following messages to the parent window of your dialog.
+// When initalizing your dialog, you might be interested in the TriggerData
+// the associated trigger is able to provide, you can do so by sending the
+// folowing message to the parent of your dialog.
+
+#define TM_GETTRIGGERINFO WM_APP+13
+
+// Parameters:
+// ------------------------
+// wParam = 0
+// lParam = (LPARAM)(TRIGGERINFO *)&ti
+
+// Return Value:
+// ------------------------
+// Returns 0 on success, the struct given will be filled with the requested
+// information. Returns any other value on error.
+
+typedef struct {
+ int cbSize; // (in) Set to sizeof(TRIGGERINFO).
+ int dFlags; // (out) The default DF_* flags used by the trigger (as indicated
+ // by its TRIGGERREGISTER).
+} TRIGGERINFO;
+
+// --------------------------------------------------------------------------
+// Conditions
+// --------------------------------------------------------------------------
+
+// Depending on the configuration of the user, a condition may need to hold
+// for an action to be performed. A condition function is called and its
+// return value specifies whether or not the condition holds. A condition
+// needs to be registered. After its registered, the condition function might
+// be called to check whether or not the condition holds.
+
+#define MS_TRIGGER_REGISTERCONDITION "/TriggerPlugin/RegisterCondition"
+
+// Parameters:
+// ------------------------
+// wParam = (WPARAM)0
+// lParam = (LPARAM)(CONDITIONREGISTER *)&cr
+// Pointer to a structure describing the condition to add (see below).
+
+// Return Value:
+// ------------------------
+// Returns 0 on success, nozero otherwise. Registering an already existing
+// condition will replace this previously registered condition.
+
+typedef int (* CONDITIONFUNCTION)(DWORD conditionID, REPORTINFO *ri);
+
+typedef struct {
+ int cbSize; // Set to sizeof(CONDITIONREGISTER).
+ char *pszName; // The name identifying this condition, must be unique.
+ union {
+ char *pszService; // The service (wParam = (WPARAM)(DWORD)conditionID,
+ // lParam = (LPARAM)(REPORTINFO *)&ri) or function which
+ // is called to see whether the condition holds. Must
+ // return CRV_TRUE if the condition holds, CRV_FALSE
+ // otherwise.
+ CONDITIONFUNCTION conditionFunction;
+ };
+ HINSTANCE hInstance; // Only needed when an options dialog is available.
+ DLGPROC pfnDlgProc; // Optional, the dialog procedure for the options
+ // dialog.
+ char *pszTemplate; // Optional, template for the options dialog, must be
+ // WS_CHILD.
+ int flags; // CRF_* flags, see below.
+} CONDITIONREGISTER;
+
+// The flags that can be used to register the condition.
+
+#define CRF_UNICODE 0x01 // The condition function or service processes
+ // unicode strings.
+#define CRF_FUNCTION 0x02 // The conditionFunction will be called instead of
+ // the service.
+#define CRF_NOEXPORT 0x04 // This condition cannot be exported. Set this flag
+ // in case you stored settings not using the helper
+ // functions at the end of this header. On export,
+ // TriggerPlugin will search for these settings
+ // and export them automatically. Contact-specific
+ // settings are never exported.
+
+#if defined(UNICODE) || defined(_UNICODE)
+#define CRF_TCHAR CRF_UNICODE
+#else
+#define CRF_TCHAR 0
+#endif
+
+// The service or conditionFunction will be called with a pointer to a
+// REPORTINFO struct, containing information about the trigger event. If you
+// can use TriggerData from this struct, always check the ri->td->dFlags before
+// using it. It's up to you to deal with an condition in case the expected
+// TriggerData is not available. It's recommened though, to return CRV_FALSE in
+// those cases. The ri->flags is a combination of the CND_* flags, indicating
+// how to process the call, see below.
+
+// Return values for the condition function or service. The condition service
+// or function is expected to return one of the following.
+
+#define CRV_FALSE 0 // The condition does not hold.
+#define CRV_TRUE 1 // The condition does hold.
+
+// REPORTINFO flags, received by the condition function or service. These
+// indicate how to process the call.
+
+#define CND_PERFORM 0x01 // Perform your condition and return either
+ // CRV_TRUE or CRV_FALSE to indicate whether or not
+ // your condition holds at this moment.
+#define CND_CLEANUP 0x02 // The condition is deleted. Remove your settings
+ // from the DB. There is a helper service below to
+ // easily remove settings given a condition ID.
+
+// Dialog Messages
+// The following messages are to be processed by the options dialog, if there
+// is one.
+
+// WM_INITDIALOG
+
+// Parameters:
+// ------------------------
+// lParam = (LPARAM)(DWORD)conditionID
+// The condition ID for which the options are to be set. This can be a new ID
+// or an ID of a condition which is being edited. Initialize your options
+// dialog accordingly. There are helper function at the end of this header
+// file to read your settings for a certain condition ID.
+
+#define TM_ADDCONDITION WM_APP+14
+
+// TM_ADDCONDITION
+// 'OK' is pressed and a new condition will be added. Save your settings using
+// the given condition ID. Helper functions can be found at the end of this
+// header file.
+
+// Parameters:
+// ------------------------
+// wParam = (WPARAM)(DWORD)conditionID
+// The condition ID for which the settings are to be saved. There are helper
+// functions at the end of this header file to store settings with a certain
+// condition ID.
+// lParam = 0
+
+// When initalizing your dialog, you might be interested in the TriggerData the
+// associated trigger is able to provide, you can find out by sending a
+// TM_GETTRIGGERINFO message to the parent of your dialog. See the section on
+// dialog messages for actions for more information (above).
+
+// --------------------------------------------------------------------------
+// Misc. Services
+// --------------------------------------------------------------------------
+
+#define MS_TRIGGER_ENABLETRIGGER "/TriggerPlugin/EnableTrigger"
+
+// Parameters:
+// ------------------------
+// wParam = (WPARAM)(DWORD)triggerID
+// The triggerID to set or get the state from or 0 for the global state.
+// lParam = (LPARAM)(int)type
+// One of ETT_* (see below).
+
+// Return Value:
+// ------------------------
+// Returns the state (0=disabled) if ETT_GETSTATE is given as lParam.
+// Otherwise, it returns 0 if setting the state was succesful or any other on
+// failure. The global state must be enabled if a single state is to be
+// changed.
+
+#define ETT_DISABLE 0 // Disable the trigger(s).
+#define ETT_ENABLE 1 // Enable the trigger(s).
+#define ETT_TOGGLE 2 // Toggle the state of the trigger(s).
+#define ETT_GETSTATE 3 // Retrieve the state of the trigger (0=disabled).
+
+#define ME_TRIGGER_TRIGGERENABLED "/TriggerPlugin/TriggerEnabled"
+
+// Parameters:
+// ------------------------
+// wParam = (WPARAM)(DWORD)triggerID
+// The triggerID to set or get the state from or 0 for the global state.
+// lParam = (LPARAM)(int)type
+// Either ETT_DISABLE or ETT_ENABLE describing the new state.
+
+// This event is fired when one or all of the triggers enabled state is
+// changed. This can be used to (de)initialize internal variables. For
+// example if your trigger reads the triggers from the DB in memory during
+// an initialization fase. It is recommended to do this when this event is
+// fired with wParam = 0 and lParam = ETT_ENABLE (remember triggers can be
+// imported, without calling your options screen callback). This event is
+// fired upon startup and shutdown in case the module is enabled.
+
+// --------------------------------------------------------------------------
+// Database Helper Services
+// --------------------------------------------------------------------------
+
+// The rest of this header file defines helper services and functions to easily
+// store and retrieve settings for a certain trigger, action or condition.
+
+#define MS_TRIGGER_REMOVESETTINGS "/TriggerPlugin/RemoveSettings"
+
+// Parameters:
+// ------------------------
+// wParam = (WPARAM)0
+// lParam = (LPARAM)(REMOVETRIGGERSETTINGS *)&rts
+// Pointer to a structure describing the settings to remove (see below).
+
+// Return Value:
+// ------------------------
+// Returns the number of settings removed from the database.
+
+// This service helps you remove all settings you have written with the DB
+// helper functions, defined at the end of this header file.
+
+typedef struct {
+ int cbSize; // Set to sizeof(REMOVETRIGGERSETTINGS).
+ char *prefix; // A string indicating what kind of setting are to be removed,
+ // see below.
+ DWORD id; // The ID of the set of settings to be removed.
+ char *szModule; // The module where the settings are stored.
+ HANDLE hContact; // The contact for which the setting are to be removed. Can
+ // be INVALID_HANDLE_VALUE to remove the settings for all
+ // contacts and NULL.
+} REMOVETRIGGERSETTINGS;
+
+// The following prefixes indicate what kind of settings are to be removed from
+// the database.
+
+#define PREFIX_ACTIONID "aid" // The prefix for a DB setting associated to
+ // an action.
+#define PREFIX_TRIGGERID "tid" // The prefix for a DB setting associated to
+ // a trigger.
+#define PREFIX_CONDITIONID "cid" // The prefix for a DB setting associated
+ // to a condition.
+
+#ifndef TRIGGER_NOHELPER
+
+// Helper #1: RemoveAllTriggerSettings
+// ------------------------
+// Remove all settings from the DB given the triggerID and module.
+
+static __inline int RemoveAllTriggerSettings(DWORD triggerID, char *szModule) {
+
+ REMOVETRIGGERSETTINGS rts;
+
+ rts.cbSize = sizeof(REMOVETRIGGERSETTINGS);
+ rts.prefix = PREFIX_TRIGGERID;
+ rts.id = triggerID;
+ rts.szModule = szModule;
+ rts.hContact = INVALID_HANDLE_VALUE;
+
+ return CallService(MS_TRIGGER_REMOVESETTINGS, 0, (LPARAM)&rts);
+}
+
+// Helper #2: RemoveAllActionSettings
+// ------------------------
+// Remove all settings from the DB given the actionID and module.
+
+static __inline int RemoveAllActionSettings(DWORD actionID, char *szModule) {
+
+ REMOVETRIGGERSETTINGS rts;
+
+ rts.cbSize = sizeof(REMOVETRIGGERSETTINGS);
+ rts.prefix = PREFIX_ACTIONID;
+ rts.id = actionID;
+ rts.szModule = szModule;
+ rts.hContact = INVALID_HANDLE_VALUE;
+
+ return CallService(MS_TRIGGER_REMOVESETTINGS, 0, (LPARAM)&rts);
+}
+
+// Helper #1: RemoveAllConditionSettings
+// ------------------------
+// Remove all settings from the DB given the conditionID and module.
+
+static __inline int RemoveAllConditionSettings(DWORD conditionID, char *szModule) {
+
+ REMOVETRIGGERSETTINGS rts;
+
+ rts.cbSize = sizeof(REMOVETRIGGERSETTINGS);
+ rts.prefix = PREFIX_CONDITIONID;
+ rts.id = conditionID;
+ rts.szModule = szModule;
+ rts.hContact = INVALID_HANDLE_VALUE;
+
+ return CallService(MS_TRIGGER_REMOVESETTINGS, 0, (LPARAM)&rts);
+}
+
+// --------------------------------------------------------------------------
+// Database Helper Functions
+// --------------------------------------------------------------------------
+
+// Basically, these function work the same as Miranda's helper functions for
+// getting/setting DB settings. There is one extra parameter, the ID for the
+// trigger/action/condition. The settings are named as follows:
+
+// DBWriteTriggerSetting*(DWORD triggerID, ...) to write a setting given a
+// trigger ID.
+// DBGetTriggerSetting*(DWORD triggerID, ...) to read a setting given a
+// trigger ID.
+// DBWriteActionSetting*(DWORD actionID, ...) to write a setting given an
+// action ID.
+// DBGetActionSetting*(DWORD actionID, ...) to read a setting given an
+// action ID.
+// DBWriteConditionSetting*(DWORD conditionID, ...) to write a setting given a
+// condition ID.
+// DBGetConditionSetting*(DWORD conditionID, ...) to read a setting given a
+// condition ID.
+
+#define MAX_SETTING_LEN 255 // Max. length of a DB setting including the
+ // prefix and ID.
+
+// --------------------------------------------------------------------------
+// Database Helper Functions: Triggers
+// --------------------------------------------------------------------------
+
+static int __inline DBWriteTriggerSettingByte(DWORD triggerID, HANDLE hContact,const char *szModule,const char *szSetting,BYTE val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_TRIGGERID, triggerID, szSetting);
+ return DBWriteContactSettingByte(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteTriggerSettingWord(DWORD triggerID, HANDLE hContact,const char *szModule,const char *szSetting,WORD val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_TRIGGERID, triggerID, szSetting);
+ return DBWriteContactSettingWord(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteTriggerSettingDword(DWORD triggerID, HANDLE hContact,const char *szModule,const char *szSetting,DWORD val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_TRIGGERID, triggerID, szSetting);
+ return DBWriteContactSettingDword(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteTriggerSettingString(DWORD triggerID, HANDLE hContact,const char *szModule,const char *szSetting,const char *val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_TRIGGERID, triggerID, szSetting);
+ return DBWriteContactSettingString(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteTriggerSettingTString(DWORD triggerID, HANDLE hContact,const char *szModule,const char *szSetting,const TCHAR *val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_TRIGGERID, triggerID, szSetting);
+ return DBWriteContactSettingTString(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteTriggerSettingWString(DWORD triggerID, HANDLE hContact,const char *szModule,const char *szSetting,const WCHAR *val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_TRIGGERID, triggerID, szSetting);
+ return DBWriteContactSettingWString(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteTriggerSettingStringUtf(DWORD triggerID, HANDLE hContact,const char *szModule,const char *szSetting,const char *val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_TRIGGERID, triggerID, szSetting);
+ return DBWriteContactSettingStringUtf(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBGetTriggerSettingByte(DWORD triggerID, HANDLE hContact, const char *szModule, const char *szSetting, int errorValue) {
+
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_TRIGGERID, triggerID, szSetting);
+ return DBGetContactSettingByte(hContact, szModule, dbSetting, errorValue);
+}
+
+static WORD __inline DBGetTriggerSettingWord(DWORD triggerID, HANDLE hContact, const char *szModule, const char *szSetting, int errorValue) {
+
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_TRIGGERID, triggerID, szSetting);
+ return DBGetContactSettingWord(hContact, szModule, dbSetting, errorValue);
+}
+
+static DWORD __inline DBGetTriggerSettingDword(DWORD triggerID, HANDLE hContact, const char *szModule, const char *szSetting, int errorValue) {
+
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_TRIGGERID, triggerID, szSetting);
+ return DBGetContactSettingDword(hContact, szModule, dbSetting, errorValue);
+}
+
+static int __inline DBGetTriggerSetting(DWORD triggerID, HANDLE hContact, const char *szModule, const char *szSetting, DBVARIANT *dbv) {
+
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_TRIGGERID, triggerID, szSetting);
+ return DBGetContactSetting(hContact, szModule, dbSetting, dbv);
+}
+
+static int __inline DBGetTriggerSettingW(DWORD triggerID, HANDLE hContact,const char *szModule, const char *szSetting,DBVARIANT *dbv) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_TRIGGERID, triggerID, szSetting);
+ return DBGetContactSettingW(hContact, szModule, dbSetting, dbv);
+}
+
+static int __inline DBGetTriggerSettingTString(DWORD triggerID, HANDLE hContact,const char *szModule, const char *szSetting,DBVARIANT *dbv) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_TRIGGERID, triggerID, szSetting);
+ return DBGetContactSettingTString(hContact, szModule, dbSetting, dbv);
+}
+
+static int __inline DBGetTriggerSettingWString(DWORD triggerID, HANDLE hContact,const char *szModule, const char *szSetting,DBVARIANT *dbv) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_TRIGGERID, triggerID, szSetting);
+ return DBGetContactSettingWString(hContact, szModule, dbSetting, dbv);
+}
+
+static int __inline DBGetTriggerSettingStringUtf(DWORD triggerID, HANDLE hContact,const char *szModule, const char *szSetting,DBVARIANT *dbv) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_TRIGGERID, triggerID, szSetting);
+ return DBGetContactSettingStringUtf(hContact, szModule, dbSetting, dbv);
+}
+
+static int __inline DBDeleteTriggerSetting(DWORD triggerID, HANDLE hContact,const char *szModule,const char *szSetting) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_TRIGGERID, triggerID, szSetting);
+ return DBDeleteContactSetting(hContact, szModule, dbSetting);
+}
+
+// --------------------------------------------------------------------------
+// Database Helper Functions: Actions
+// --------------------------------------------------------------------------
+
+static int __inline DBWriteActionSettingByte(DWORD actionID, HANDLE hContact,const char *szModule,const char *szSetting,BYTE val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ACTIONID, actionID, szSetting);
+ return DBWriteContactSettingByte(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteActionSettingWord(DWORD actionID, HANDLE hContact,const char *szModule,const char *szSetting,WORD val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ACTIONID, actionID, szSetting);
+ return DBWriteContactSettingWord(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteActionSettingDword(DWORD actionID, HANDLE hContact,const char *szModule,const char *szSetting,DWORD val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ACTIONID, actionID, szSetting);
+ return DBWriteContactSettingDword(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteActionSettingString(DWORD actionID, HANDLE hContact,const char *szModule,const char *szSetting,const char *val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ACTIONID, actionID, szSetting);
+ return DBWriteContactSettingString(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteActionSettingTString(DWORD actionID, HANDLE hContact,const char *szModule,const char *szSetting,const TCHAR *val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ACTIONID, actionID, szSetting);
+ return DBWriteContactSettingTString(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteActionSettingWString(DWORD actionID, HANDLE hContact,const char *szModule,const char *szSetting,const WCHAR *val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ACTIONID, actionID, szSetting);
+ return DBWriteContactSettingWString(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteActionSettingStringUtf(DWORD actionID, HANDLE hContact,const char *szModule,const char *szSetting,const char *val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ACTIONID, actionID, szSetting);
+ return DBWriteContactSettingStringUtf(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBGetActionSettingByte(DWORD actionID, HANDLE hContact, const char *szModule, const char *szSetting, int errorValue) {
+
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ACTIONID, actionID, szSetting);
+ return DBGetContactSettingByte(hContact, szModule, dbSetting, errorValue);
+}
+
+static WORD __inline DBGetActionSettingWord(DWORD actionID, HANDLE hContact, const char *szModule, const char *szSetting, int errorValue) {
+
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ACTIONID, actionID, szSetting);
+ return DBGetContactSettingWord(hContact, szModule, dbSetting, errorValue);
+}
+
+static DWORD __inline DBGetActionSettingDword(DWORD actionID, HANDLE hContact, const char *szModule, const char *szSetting, int errorValue) {
+
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ACTIONID, actionID, szSetting);
+ return DBGetContactSettingDword(hContact, szModule, dbSetting, errorValue);
+}
+
+static int __inline DBGetActionSetting(DWORD actionID, HANDLE hContact, const char *szModule, const char *szSetting, DBVARIANT *dbv) {
+
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ACTIONID, actionID, szSetting);
+ return DBGetContactSetting(hContact, szModule, dbSetting, dbv);
+}
+
+static int __inline DBGetActionSettingW(DWORD actionID, HANDLE hContact,const char *szModule, const char *szSetting,DBVARIANT *dbv) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ACTIONID, actionID, szSetting);
+ return DBGetContactSettingW(hContact, szModule, dbSetting, dbv);
+}
+
+static int __inline DBGetActionSettingTString(DWORD actionID, HANDLE hContact,const char *szModule, const char *szSetting,DBVARIANT *dbv) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ACTIONID, actionID, szSetting);
+ return DBGetContactSettingTString(hContact, szModule, dbSetting, dbv);
+}
+
+static int __inline DBGetActionSettingWString(DWORD actionID, HANDLE hContact,const char *szModule, const char *szSetting,DBVARIANT *dbv) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ACTIONID, actionID, szSetting);
+ return DBGetContactSettingWString(hContact, szModule, dbSetting, dbv);
+}
+
+static int __inline DBGetActionSettingStringUtf(DWORD actionID, HANDLE hContact,const char *szModule, const char *szSetting,DBVARIANT *dbv) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ACTIONID, actionID, szSetting);
+ return DBGetContactSettingStringUtf(hContact, szModule, dbSetting, dbv);
+}
+
+static int __inline DBDeleteActionSetting(DWORD actionID, HANDLE hContact,const char *szModule,const char *szSetting) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_ACTIONID, actionID, szSetting);
+ return DBDeleteContactSetting(hContact, szModule, dbSetting);
+}
+
+// --------------------------------------------------------------------------
+// Database Helper Functions: Conditions
+// --------------------------------------------------------------------------
+
+static int __inline DBWriteConditionSettingByte(DWORD conditionID, HANDLE hContact,const char *szModule,const char *szSetting,BYTE val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_CONDITIONID, conditionID, szSetting);
+ return DBWriteContactSettingByte(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteConditionSettingWord(DWORD conditionID, HANDLE hContact,const char *szModule,const char *szSetting,WORD val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_CONDITIONID, conditionID, szSetting);
+ return DBWriteContactSettingWord(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteConditionSettingDword(DWORD conditionID, HANDLE hContact,const char *szModule,const char *szSetting,DWORD val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_CONDITIONID, conditionID, szSetting);
+ return DBWriteContactSettingDword(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteConditionSettingString(DWORD conditionID, HANDLE hContact,const char *szModule,const char *szSetting,const char *val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_CONDITIONID, conditionID, szSetting);
+ return DBWriteContactSettingString(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteConditionSettingTString(DWORD conditionID, HANDLE hContact,const char *szModule,const char *szSetting,const TCHAR *val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_CONDITIONID, conditionID, szSetting);
+ return DBWriteContactSettingTString(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteConditionSettingWString(DWORD conditionID, HANDLE hContact,const char *szModule,const char *szSetting,const WCHAR *val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_CONDITIONID, conditionID, szSetting);
+ return DBWriteContactSettingWString(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBWriteConditionSettingStringUtf(DWORD conditionID, HANDLE hContact,const char *szModule,const char *szSetting,const char *val) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_CONDITIONID, conditionID, szSetting);
+ return DBWriteContactSettingStringUtf(hContact, szModule, dbSetting, val);
+}
+
+static int __inline DBGetConditionSettingByte(DWORD conditionID, HANDLE hContact, const char *szModule, const char *szSetting, int errorValue) {
+
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_CONDITIONID, conditionID, szSetting);
+ return DBGetContactSettingByte(hContact, szModule, dbSetting, errorValue);
+}
+
+static WORD __inline DBGetConditionSettingWord(DWORD conditionID, HANDLE hContact, const char *szModule, const char *szSetting, int errorValue) {
+
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_CONDITIONID, conditionID, szSetting);
+ return DBGetContactSettingWord(hContact, szModule, dbSetting, errorValue);
+}
+
+static DWORD __inline DBGetConditionSettingDword(DWORD conditionID, HANDLE hContact, const char *szModule, const char *szSetting, int errorValue) {
+
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_CONDITIONID, conditionID, szSetting);
+ return DBGetContactSettingDword(hContact, szModule, dbSetting, errorValue);
+}
+
+static int __inline DBGetConditionSetting(DWORD conditionID, HANDLE hContact, const char *szModule, const char *szSetting, DBVARIANT *dbv) {
+
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_CONDITIONID, conditionID, szSetting);
+ return DBGetContactSetting(hContact, szModule, dbSetting, dbv);
+}
+
+static int __inline DBGetConditionSettingW(DWORD conditionID, HANDLE hContact,const char *szModule, const char *szSetting,DBVARIANT *dbv) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_CONDITIONID, conditionID, szSetting);
+ return DBGetContactSettingW(hContact, szModule, dbSetting, dbv);
+}
+
+static int __inline DBGetConditionSettingTString(DWORD conditionID, HANDLE hContact,const char *szModule, const char *szSetting,DBVARIANT *dbv) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_CONDITIONID, conditionID, szSetting);
+ return DBGetContactSettingTString(hContact, szModule, dbSetting, dbv);
+}
+
+static int __inline DBGetConditionSettingWString(DWORD conditionID, HANDLE hContact,const char *szModule, const char *szSetting,DBVARIANT *dbv) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_CONDITIONID, conditionID, szSetting);
+ return DBGetContactSettingWString(hContact, szModule, dbSetting, dbv);
+}
+
+static int __inline DBGetConditionSettingStringUtf(DWORD conditionID, HANDLE hContact,const char *szModule, const char *szSetting,DBVARIANT *dbv) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_CONDITIONID, conditionID, szSetting);
+ return DBGetContactSettingStringUtf(hContact, szModule, dbSetting, dbv);
+}
+
+static int __inline DBDeleteConditionSetting(DWORD conditionID, HANDLE hContact,const char *szModule,const char *szSetting) {
+
+ char dbSetting[MAX_SETTING_LEN];
+
+ mir_snprintf(dbSetting, sizeof(dbSetting), "%s%u_%s", PREFIX_CONDITIONID, conditionID, szSetting);
+ return DBDeleteContactSetting(hContact, szModule, dbSetting);
+}
+
+#endif // nohelper
+#endif // m_trigger
diff --git a/plugins/StatusPlugins/includes/m_updater.h b/plugins/StatusPlugins/includes/m_updater.h
new file mode 100644
index 0000000000..371b7437a0
--- /dev/null
+++ b/plugins/StatusPlugins/includes/m_updater.h
@@ -0,0 +1,146 @@
+#ifndef _M_UPDATER_H
+#define _M_UPDATER_H
+
+// NOTES:
+// - For langpack updates, include a string of the following format in the langpack text file:
+// ";FLID: <file listing name> <version>"
+// version must be four numbers seperated by '.', in the range 0-255 inclusive
+// - Updater will disable plugins that are downloaded but were not active prior to the update (this is so that, if an archive contains e.g. ansi and
+// unicode versions, the correct plugin will be the only one active after the new version is installed)...so if you add a support plugin, you may need
+// to install an ini file to make the plugin activate when miranda restarts after the update
+// - Updater will replace all dlls that have the same internal shortName as a downloaded update dll (this is so that msn1.dll and msn2.dll, for example,
+// will both be updated) - so if you have a unicode and a non-unicode version of a plugin in your archive, you should make the internal names different (which will break automatic
+// updates from the file listing if there is only one file listing entry for both versions, unless you use the 'MS_UPDATE_REGISTER' service below)
+// - Updater will install all files in the root of the archive into the plugins folder, except for langpack files that contain the FLID string which go into the root folder (same
+// folder as miranda32.exe)...all folders in the archive will also be copied to miranda's root folder, and their contents transferred into the new folders. The only exception is a
+// special folder called 'root_files' - if there is a folder by that name in the archive, it's contents will also be copied into miranda's root folder - this is intended to be used
+// to install additional dlls etc that a plugin may require)
+
+// if you set Update.szUpdateURL to the following value when registering, as well as setting your beta site and version data,
+// Updater will ignore szVersionURL and pbVersionPrefix, and attempt to find the file listing URL's from the backend XML data.
+// for this to work, the plugin name in pluginInfo.shortName must match the file listing exactly (except for case)
+#define UPDATER_AUTOREGISTER "UpdaterAUTOREGISTER"
+// Updater will also use the backend xml data if you provide URL's that reference the miranda file listing for updates (so you can use that method
+// if e.g. your plugin shortName does not match the file listing) - it will grab the file listing id from the end of these URLs
+
+typedef struct Update_tag {
+ int cbSize;
+ char *szComponentName; // component name as it will appear in the UI (will be translated before displaying)
+
+ char *szVersionURL; // URL where the current version can be found (NULL to disable)
+ BYTE *pbVersionPrefix; // bytes occuring in VersionURL before the version, used to locate the version information within the URL data
+ // (note that this URL could point at a binary file - dunno why, but it could :)
+ int cpbVersionPrefix; // number of bytes pointed to by pbVersionPrefix
+ char *szUpdateURL; // URL where dll/zip is located
+ // set to UPDATER_AUTOREGISTER if you want Updater to find the file listing URLs (ensure plugin shortName matches file listing!)
+
+ char *szBetaVersionURL; // URL where the beta version can be found (NULL to disable betas)
+ BYTE *pbBetaVersionPrefix; // bytes occuring in VersionURL before the version, used to locate the version information within the URL data
+ int cpbBetaVersionPrefix; // number of bytes pointed to by pbVersionPrefix
+ char *szBetaUpdateURL; // URL where dll/zip is located
+
+ BYTE *pbVersion; // bytes of current version, used for comparison with those in VersionURL
+ int cpbVersion; // number of bytes pointed to by pbVersion
+
+ char *szBetaChangelogURL; // url for displaying changelog for beta versions
+} Update;
+
+// register a comonent with Updater
+//
+// wparam = 0
+// lparam = (LPARAM)&Update
+#define MS_UPDATE_REGISTER "Update/Register"
+
+// utility functions to create a version string from a DWORD or from pluginInfo
+// point buf at a buffer at least 16 chars wide - but note the version string returned may be shorter
+//
+__inline static char *CreateVersionString(DWORD version, char *buf) {
+ mir_snprintf(buf, 16, "%d.%d.%d.%d", (version >> 24) & 0xFF, (version >> 16) & 0xFF, (version >> 8) & 0xFF, version & 0xFF);
+ return buf;
+}
+
+__inline static char *CreateVersionStringPlugin(PLUGININFO *pluginInfo, char *buf) {
+ return CreateVersionString(pluginInfo->version, buf);
+}
+
+
+// register the 'easy' way - use this method if you have no beta URL and the plugin is on the miranda file listing
+// NOTE: the plugin version string on the file listing must be the string version of the version in pluginInfo (i.e. 0.0.0.1,
+// four numbers between 0 and 255 inclusivem, so no letters, brackets, etc.)
+//
+// wParam = (int)fileID - this is the file ID from the file listing (i.e. the number at the end of the download link)
+// lParam = (PLUGININFO*)&pluginInfo
+#define MS_UPDATE_REGISTERFL "Update/RegisterFL"
+
+// this function can be used to 'unregister' components - useful for plugins that register non-plugin/langpack components and
+// may need to change those components on the fly
+// lParam = (char *)szComponentName
+#define MS_UPDATE_UNREGISTER "Update/Unregister"
+
+// this event is fired when the startup process is complete, but NOT if a restart is imminent
+// it is designed for status managment plugins to use as a trigger for beggining their own startup process
+// wParam = lParam = 0 (unused)
+// (added in version 0.1.6.0)
+#define ME_UPDATE_STARTUPDONE "Update/StartupDone"
+
+// this service can be used to enable/disable Updater's global status control
+// it can be called from the StartupDone event handler
+// wParam = (BOOL)enable
+// lParam = 0
+// (added in version 0.1.6.0)
+#define MS_UPDATE_ENABLESTATUSCONTROL "Update/EnableStatusControl"
+
+// An description of usage of the above service and event:
+// Say you are a status control plugin that normally sets protocol or global statuses in your ModulesLoaded event handler.
+// In order to make yourself 'Updater compatible', you would move the status control code from ModulesLoaded to another function,
+// say DoStartup. Then, in ModulesLoaded you would check for the existence of the MS_UPDATE_ENABLESTATUSCONTROL service.
+// If it does not exist, call DoStartup. If it does exist, hook the ME_UPDATE_STARTUPDONE event and call DoStartup from there. You may
+// also wish to call MS_UPDATE_ENABLESTATUSCONTROL with wParam == FALSE at this time, to disable Updater's own status control feature.
+
+// this service can be used to determine whether updates are possible for a component with the given name
+// wParam = 0
+// lParam = (char *)szComponentName
+// returns TRUE if updates are supported, FALSE otherwise
+#define MS_UPDATE_ISUPDATESUPPORTED "Update/IsUpdateSupported"
+
+#endif
+
+
+/////////////// Usage Example ///////////////
+
+#ifdef EXAMPLE_CODE
+
+// you need to #include "m_updater.h" and HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoaded) in your Load function...
+
+int OnModulesLoaded(WPARAM wParam, LPARAM lParam) {
+
+ Update update = {0}; // for c you'd use memset or ZeroMemory...
+ char szVersion[16];
+
+ update.cbSize = sizeof(Update);
+
+ update.szComponentName = pluginInfo.shortName;
+ update.pbVersion = (BYTE *)CreateVersionString(&pluginInfo, szVersion);
+ update.cpbVersion = strlen((char *)update.pbVersion);
+
+ // these are the three lines that matter - the archive, the page containing the version string, and the text (or data)
+ // before the version that we use to locate it on the page
+ // (note that if the update URL and the version URL point to standard file listing entries, the backend xml
+ // data will be used to check for updates rather than the actual web page - this is not true for beta urls)
+ update.szUpdateURL = "http://scottellis.com.au:81/test/updater.zip";
+ update.szVersionURL = "http://scottellis.com.au:81/test/updater_test.html";
+ update.pbVersionPrefix = (BYTE *)"Updater version ";
+
+ update.cpbVersionPrefix = strlen((char *)update.pbVersionPrefix);
+
+ // do the same for the beta versions of the above struct members if you wish to allow beta updates from another URL
+
+ CallService(MS_UPDATE_REGISTER, 0, (WPARAM)&update);
+
+ // Alternatively, to register a plugin with e.g. file ID 2254 on the file listing...
+ // CallService(MS_UPDATE_REGISTERFL, (WPARAM)2254, (LPARAM)&pluginInfo);
+
+ return 0;
+}
+
+#endif
diff --git a/plugins/StatusPlugins/includes/m_variables.h b/plugins/StatusPlugins/includes/m_variables.h
new file mode 100644
index 0000000000..152994dbbc
--- /dev/null
+++ b/plugins/StatusPlugins/includes/m_variables.h
@@ -0,0 +1,668 @@
+/*
+ Variables Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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_VARS
+#define __M_VARS
+
+#if !defined(_TCHAR_DEFINED)
+#include <tchar.h>
+#endif
+
+#ifndef VARIABLES_NOHELPER
+#include <m_button.h>
+#endif
+
+// --------------------------------------------------------------------------
+// Memory management
+// --------------------------------------------------------------------------
+
+// Release memory that was allocated by the Variables plugin, e.g. returned
+// strings.
+
+#define MS_VARS_FREEMEMORY "Vars/FreeMemory"
+
+// Parameters:
+// ------------------------
+// wParam = (WPARAM)(void *)pntr
+// Pointer to memory that was allocated by the Variables plugin (e.g. a
+// returned string) (can be NULL).
+// lParam = 0
+
+// Return Value:
+// ------------------------
+// Does return 0 on success, nozero otherwise.
+
+// Note: Do only use this service to free memory that was *explicitliy*
+// stated that it should be free with this service.
+
+
+
+#define MS_VARS_GET_MMI "Vars/GetMMI"
+
+// Get Variable's RTL/CRT function poiners to malloc(), free() and
+// realloc().
+
+// Parameters:
+// ------------------------
+// wParam = 0
+// lParam = (LPARAM) &MM_INTERFACE
+// Pointer to a memory manager interface struct (see m_system.h).
+
+// Return Value:
+// ------------------------
+// Returns 0 on success, nozero otherwise
+
+// Note: Works exactly the same as the MS_SYSTEM_GET_MMI service
+// service of m_system.h.
+
+// Helper function for easy using:
+#ifndef VARIABLES_NOHELPER
+__inline static void variables_free(void *pntr) {
+
+ CallService(MS_VARS_FREEMEMORY, (WPARAM)pntr, 0);
+}
+#endif
+
+
+
+// --------------------------------------------------------------------------
+// String formatting
+// --------------------------------------------------------------------------
+
+#define MS_VARS_FORMATSTRING "Vars/FormatString"
+
+// This service can be used to parse tokens in a text. The tokens will be
+// replaced by their resolved values. A token can either be a field or a
+// function. A field takes no arguments and is represented between
+// %-characters, e.g. "%winampsong%". A function can take any number of
+// arguments and is represented by a ? or !-character followed by the name
+// of the function and a list of arguments, e.g. "?add(1,2)".
+
+// Parameters:
+// ------------------------
+// wParam = (WPARAM)(FORMATINFO *)&fi
+// See below.
+// lParam = 0
+
+// Return Value:
+// ------------------------
+// Returns a pointer to the resolved string or NULL in case of an error.
+
+// Note: The returned pointer needs to be freed using MS_VARS_FREEMEMORY.
+
+typedef struct {
+ int cbSize; // Set this to sizeof(FORMATINFO).
+ int flags; // Flags to use (see FIF_* below).
+ union {
+ char *szFormat; // Text in which the tokens will be replaced (can't be
+ // NULL).
+ WCHAR *wszFormat;
+ TCHAR *tszFormat;
+ };
+ union {
+ char *szExtraText; // Extra, context-specific string (can be NULL) ->
+ // The field "extratext" will be replaced by this
+ // string. (Previously szSource).
+ WCHAR *wszExtraText;
+ TCHAR *tszExtraText;
+ };
+ HANDLE hContact; // Handle to contact (can be NULL) -> The field "subject"
+ // represents this contact.
+ int pCount; // (output) Number of succesful parsed tokens, needs to be set
+ // to 0 before the call
+ int eCount; // (output) Number of failed tokens, needs to be set to 0
+ // before the call
+} FORMATINFO;
+
+// Possible flags:
+#define FIF_UNICODE 0x01 // Expects and returns unicode text (WCHAR*).
+
+#if defined(UNICODE) || defined(_UNICODE)
+#define FIF_TCHAR FIF_UNICODE // Strings in structure are TCHAR*.
+#else
+#define FIF_TCHAR 0
+#endif
+
+// Helper functions for easy using:
+
+// Helper #1: variables_parse
+// ------------------------
+// The returned string needs to be freed using MS_VARS_FREEMEMORY.
+
+#ifndef VARIABLES_NOHELPER
+__inline static TCHAR *variables_parse(TCHAR *tszFormat, TCHAR *tszExtraText, HANDLE hContact) {
+
+ FORMATINFO fi;
+
+ ZeroMemory(&fi, sizeof(fi));
+ fi.cbSize = sizeof(fi);
+ fi.tszFormat = tszFormat;
+ fi.tszExtraText = tszExtraText;
+ fi.hContact = hContact;
+ fi.flags = FIF_TCHAR;
+
+ return (TCHAR *)CallService(MS_VARS_FORMATSTRING, (WPARAM)&fi, 0);
+}
+#endif
+
+// Helper #2: variables_parsedup
+// ------------------------
+// Returns a _strdup()'ed copy of the unparsed string when Variables is not
+// installed, returns a strdup()'ed copy of the parsed result otherwise.
+
+// Note: The returned pointer needs to be released using your own free().
+
+#ifndef VARIABLES_NOHELPER
+__inline static TCHAR *variables_parsedup(TCHAR *tszFormat, TCHAR *tszExtraText, HANDLE hContact) {
+
+ if (ServiceExists(MS_VARS_FORMATSTRING)) {
+ FORMATINFO fi;
+ TCHAR *tszParsed, *tszResult;
+
+ ZeroMemory(&fi, sizeof(fi));
+ fi.cbSize = sizeof(fi);
+ fi.tszFormat = tszFormat;
+ fi.tszExtraText = tszExtraText;
+ fi.hContact = hContact;
+ fi.flags |= FIF_TCHAR;
+ tszParsed = (TCHAR *)CallService(MS_VARS_FORMATSTRING, (WPARAM)&fi, 0);
+ if (tszParsed) {
+ tszResult = _tcsdup(tszParsed);
+ CallService(MS_VARS_FREEMEMORY, (WPARAM)tszParsed, 0);
+ return tszResult;
+ }
+ }
+ return tszFormat?_tcsdup(tszFormat):tszFormat;
+}
+#endif
+
+
+
+// --------------------------------------------------------------------------
+// Register tokens
+// --------------------------------------------------------------------------
+
+// Plugins can define tokens which will be parsed by the Variables plugin.
+
+#define MS_VARS_REGISTERTOKEN "Vars/RegisterToken"
+
+// With this service you can define your own token. The newly added tokens
+// using this service are taken into account on every call to
+// MS_VARS_FORMATSTRING.
+
+// Parameters:
+// ------------------------
+// wParam = 0
+// lParam = (LPARAM)(TOKENREGISTER*)&tr
+// See below.
+
+// Return Value:
+// ------------------------
+// Returns 0 on success, nonzero otherwise. Existing tokens will be
+// 'overwritten' if registered twice.
+
+// Needed for szService and parseFunction:
+typedef struct {
+ int cbSize; // You need to check if this is >=sizeof(ARGUMENTSINFO)
+ // (already filled in).
+ FORMATINFO *fi; // Arguments passed to MS_VARS_FORMATSTRING.
+ unsigned int argc; // Number of elements in the argv array.
+ union {
+ char **argv; // Argv[0] will be the token name, the following elements
+ // are the additional arguments.
+ WCHAR **wargv; // If the registered token was registered as a unicode
+ // token, wargv should be accessed.
+ TCHAR **targv;
+ };
+ int flags; // (output) You can set flags here (initially 0), use the
+ // AIF_* flags (see below).
+} ARGUMENTSINFO;
+
+// Available flags for ARGUMENTSINFO:
+// Set the flags of the ARGUMENTSINFO struct to any of these to influence
+// further parsing.
+#define AIF_DONTPARSE 0x01 // Don't parse the result of this function,
+ // usually the result of a token is parsed
+ // again, if the `?` is used as a function
+ // character.
+#define AIF_FALSE 0x02 // The function returned logical false.
+
+// Definition of parse/cleanup functions:
+typedef char* (*VARPARSEFUNCA)(ARGUMENTSINFO *ai);
+typedef WCHAR* (*VARPARSEFUNCW)(ARGUMENTSINFO *ai);
+typedef void (*VARCLEANUPFUNCA)(char *szReturn);
+typedef void (*VARCLEANUPFUNCW)(WCHAR *wszReturn);
+
+#if defined(UNICODE) || defined(_UNICODE)
+#define VARPARSEFUNC VARPARSEFUNCW
+#define VARCLEANUPFUNC VARCLEANUPFUNCW
+#else
+#define VARPARSEFUNC VARPARSEFUNCA
+#define VARCLEANUPFUNC VARCLEANUPFUNCA
+#endif
+
+typedef struct {
+ int cbSize; // Set this to sizeof(TOKENREGISTER).
+ union {
+ char *szTokenString; // Name of the new token to be created, without %,
+ // ?, ! etc. signs (can't be NULL).
+ WCHAR *wszTokenString;
+ TCHAR *tszTokenString;
+ };
+ union {
+ char *szService; // Name of a service that is used to request the
+ // token's value, if no service is used, a function
+ // and TRF_PARSEFUNC must be used.
+ VARPARSEFUNCA parseFunction; // See above, use with TRF_PARSEFUNC.
+ VARPARSEFUNCW parseFunctionW;
+ VARPARSEFUNC parseFunctionT;
+ };
+ union {
+ char *szCleanupService; // Name of a service to be called when the
+ // memory allocated in szService can be freed
+ // (only used when flag VRF_CLEANUP is set,
+ // else set this to NULL).
+ VARCLEANUPFUNCA cleanupFunction; // See above, use with TRF_CLEANUPFUNC.
+ VARCLEANUPFUNCW cleanupFunctionW;
+ VARCLEANUPFUNC cleanupFunctionT;
+ };
+ char *szHelpText; // Help info shown in help dialog (can be NULL). Has to
+ // be in the following format:
+ // "subject\targuments\tdescription"
+ // (Example: "math\t(x, y ,...)\tx + y + ..."), or:
+ // "subject\tdescription"
+ // (Example: "miranda\tPath to the Miranda-IM
+ // executable").
+ // Note: subject and description are translated by
+ // Variables.
+ int memType; // Describes which method Varibale's plugin needs to use to
+ // free the returned buffer, use one of the VR_MEM_* values
+ // (see below). Only valid if the flag VRF_FREEMEM is set,
+ // use TR_MEM_OWNER otherwise).
+ int flags; // Flags to use (see below), one of TRF_* (see below).
+} TOKENREGISTER;
+
+// Available Memory Storage Types:
+// These values describe which method Variables Plugin will use to free the
+// buffer returned by the parse function or service
+#define TR_MEM_VARIABLES 1 // Memory is allocated using the functions
+ // retrieved by MS_VARS_GET_MMI.
+#define TR_MEM_MIRANDA 2 // Memory is allocated using Miranda's Memory
+ // Manager Interface (using the functions
+ // returned by MS_SYSTEM_GET_MMI), if
+ // VRF_FREEMEM is set, the memory will be
+ // freed by Variables.
+#define TR_MEM_OWNER 3 // Memory is owned by the calling plugin
+ // (can't be freed by Variables Plugin
+ // automatically). This should be used if
+ // VRF_FREEMEM is not specified in the flags.
+
+// Available Flags for TOKENREGISTER:
+#define TRF_FREEMEM 0x01 // Variables Plugin will automatically free the
+ // pointer returned by the parse function or
+ // service (which method it will us is
+ // specified in memType -> see above).
+#define TRF_CLEANUP 0x02 // Call cleanup service or function, notifying
+ // that the returned buffer can be freed.
+ // Normally you should use either TRF_FREEMEM
+ // or TRF_CLEANUP.
+#define TRF_PARSEFUNC 0x40 // parseFunction will be used instead of a
+ // service.
+#define TRF_CLEANUPFUNC 0x80 // cleanupFunction will be used instead of a
+ // service.
+#define TRF_USEFUNCS TRF_PARSEFUNC|TRF_CLEANUPFUNC
+#define TRF_UNPARSEDARGS 0x04 // Provide the arguments for the parse
+ // function in their raw (unparsed) form.
+ // By default, arguments are parsed before
+ // presenting them to the parse function.
+#define TRF_FIELD 0x08 // The token can be used as a %field%.
+#define TRF_FUNCTION 0x10 // The token can be used as a ?function().
+ // Normally you should use either TRF_FIELD or
+ // TRF_FUNCTION.
+#define TRF_UNICODE 0x20 // Strings in structure are unicode (WCHAR*).
+ // In this case, the strings pointing to the
+ // arguments in the ARGUMENTS struct are
+ // unicode also. The returned buffer is
+ // expected to be unicode also, and the
+ // unicode parse and cleanup functions are
+ // called.
+
+#if defined(UNICODE) || defined(_UNICODE)
+#define TRF_TCHAR TRF_UNICODE // Strings in structure are TCHAR*.
+#else
+#define TRF_TCHAR 0
+#endif
+
+// Deprecated:
+#define TRF_CALLSVC TRF_CLEANUP
+
+// Callback Service (szService) / parseFunction:
+// ------------------------
+// Service that is called automatically by the Variable's Plugin to resolve a
+// registered variable.
+
+// Parameters:
+// wParam = 0
+// lParam = (LPARAM)(ARGUMENTSINFO *)&ai
+// see above
+
+// Return Value:
+// Needs to return the pointer to a dynamically allocacated string or NULL.
+// A return value of NULL is regarded as an error (eCount will be increaded).
+// Flags in the ARGUMENTSINFO struct can be set (see above).
+
+// Callback Service (szCallbackService) / cleanupFunction:
+// ------------------------
+// This service is called when the memory that was allocated by the parse
+// function or service can be freed. Note: It will only be called when the
+// flag VRF_CLEANUP of TOKENREGISTER is set.
+
+// Parameters:
+// wParam = 0
+// lParam = (LPARAM)(char *)&res
+// Result from parse function or service (pointer to a string).
+
+// Return Value:
+// Should return 0 on success.
+
+
+
+// --------------------------------------------------------------------------
+// Show the help dialog
+// --------------------------------------------------------------------------
+
+// Plugins can invoke Variables' help dialog which can be used for easy input
+// by users.
+
+#define MS_VARS_SHOWHELPEX "Vars/ShowHelpEx"
+
+// This service can be used to open the help dialog of Variables. This dialog
+// provides easy input for the user and/or information about the available
+// tokens.
+
+// Parameters:
+// ------------------------
+// wParam = (WPARAM)(HWND)hwndParent
+// lParam = (LPARAM)(VARHELPINFO)&vhi
+// See below.
+
+// Return Value:
+// ------------------------
+// Returns 0 on succes, any other value on error.
+
+typedef struct {
+ int cbSize; // Set to sizeof(VARHELPINFO).
+ FORMATINFO *fi; // Used for both input and output. If this pointer is not
+ // NULL, the information is used as the initial values for
+ // the dialog.
+ HWND hwndCtrl; // Used for both input and output. The window text of this
+ // window will be read and used as the initial input of the
+ // input dialog. If the user presses the OK button the window
+ // text of this window will be set to the text of the input
+ // field and a EN_CHANGE message via WM_COMMAND is send to
+ // this window. (Can be NULL).
+ char *szSubjectDesc; // The description of the %subject% token will be set
+ // to this text, if not NULL. This is translated
+ // automatically.
+ char *szExtraTextDesc; // The description of the %extratext% token will be
+ // set to this text, if not NULL. This is translated
+ // automatically.
+ int flags; // Flags, see below.
+} VARHELPINFO;
+
+
+// Flags for VARHELPINFO
+#define VHF_TOKENS 0x00000001 // Create a dialog with the list of
+ // tokens
+#define VHF_INPUT 0x00000002 // Create a dialog with an input
+ // field (this contains the list of
+ // tokens as well).
+#define VHF_SUBJECT 0x00000004 // Create a dialog to select a
+ // contact for the %subject% token.
+#define VHF_EXTRATEXT 0x00000008 // Create a dialog to enter a text
+ // for the %extratext% token.
+#define VHF_HELP 0x00000010 // Create a dialog with help info.
+#define VHF_HIDESUBJECTTOKEN 0x00000020 // Hide the %subject% token in the
+ // list of tokens.
+#define VHF_HIDEEXTRATEXTTOKEN 0x00000040 // Hide the %extratext% token in
+ // the list of tokens.
+#define VHF_DONTFILLSTRUCT 0x00000080 // Don't fill the struct with the
+ // new information if OK is pressed
+#define VHF_FULLFILLSTRUCT 0x00000100 // Fill all members of the struct
+ // when OK is pressed. By default
+ // only szFormat is set. With this
+ // flag on, hContact and
+ // szExtraText are also set.
+#define VHF_SETLASTSUBJECT 0x00000200 // Set the last contact that was
+ // used in the %subject% dialog in
+ // case fi.hContact is NULL.
+
+// Predefined flags
+#define VHF_FULLDLG VHF_INPUT|VHF_SUBJECT|VHF_EXTRATEXT|VHF_HELP
+#define VHF_SIMPLEDLG VHF_INPUT|VHF_HELP
+#define VHF_NOINPUTDLG VHF_TOKENS|VHF_HELP
+
+// If the service fills information in the struct for szFormat or szExtraText,
+// these members must be free'd using the free function of Variables.
+// If wParam==NULL, the dialog is created modeless. Only one dialog can be
+// shown at the time.
+// If both hwndCtrl and fi are NULL, the user input will not be retrievable.
+// In this case, the dialog is created with only a "Close" button, instead of
+// the "OK" and "Cancel" buttons.
+// In case of modeless dialog and fi != NULL, please make sure this pointer
+// stays valid while the dialog is open.
+
+// Helper function for easy use in standard case:
+#ifndef VARIABLES_NOHELPER
+__inline static int variables_showhelp(HWND hwndDlg, UINT uIDEdit, int flags, char *szSubjectDesc, char *szExtraDesc) {
+
+ VARHELPINFO vhi;
+
+ ZeroMemory(&vhi, sizeof(VARHELPINFO));
+ vhi.cbSize = sizeof(VARHELPINFO);
+ if (flags == 0) {
+ flags = VHF_SIMPLEDLG;
+ }
+ vhi.flags = flags;
+ vhi.hwndCtrl = GetDlgItem(hwndDlg, uIDEdit);
+ vhi.szSubjectDesc = szSubjectDesc;
+ vhi.szExtraTextDesc = szExtraDesc;
+
+ return CallService(MS_VARS_SHOWHELPEX, (WPARAM)hwndDlg, (LPARAM)&vhi);
+}
+#endif
+
+
+#define MS_VARS_GETSKINITEM "Vars/GetSkinItem"
+
+// This service can be used to get the icon you can use for example on the
+// Variables help button in your options screen. You can also get the tooltip
+// text to use with such a button. If icon library is available the icon will
+// be retrieved from icon library manager, otherwise the default is returned.
+
+// Parameters:
+// ------------------------
+// wParam = (WPARAM)0
+// lParam = (LPARAM)VSI_* (see below)
+
+// Return Value:
+// ------------------------
+// Depends on the information to retrieve (see below).
+
+// VSI_ constants
+#define VSI_HELPICON 1 // Can be used on the button accessing the
+ // Variables help dialog. Returns (HICON)hIcon on
+ // success or NULL on failure;
+#define VSI_HELPTIPTEXT 2 // Returns the tooltip text you can use for the
+ // help button. Returns (char *)szTipText, a
+ // static, translated buffer containing the help
+ // text or NULL on error.
+
+// Helper to set the icon on a button accessing the help dialog.
+// Preferably a 16x14 MButtonClass control, but it works on a standard
+// button control as well. If no icon is availble (because of old version of
+// Variables) the string "V" is shown on the button. If Variables is not
+// available, the button will be hidden.
+#ifndef VARIABLES_NOHELPER
+__inline static int variables_skin_helpbutton(HWND hwndDlg, UINT uIDButton) {
+
+ int res;
+ HICON hIcon;
+ TCHAR tszClass[32];
+
+ hIcon = NULL;
+ res = 0;
+ if (ServiceExists(MS_VARS_GETSKINITEM)) {
+ hIcon = (HICON)CallService(MS_VARS_GETSKINITEM, 0, (LPARAM)VSI_HELPICON);
+ }
+ GetClassName(GetDlgItem(hwndDlg, uIDButton), tszClass, sizeof(tszClass));
+ if (!_tcscmp(tszClass, _T("Button"))) {
+ if (hIcon != NULL) {
+ SetWindowLong(GetDlgItem(hwndDlg, uIDButton), GWL_STYLE, GetWindowLong(GetDlgItem(hwndDlg, uIDButton), GWL_STYLE)|BS_ICON);
+ SendMessage(GetDlgItem(hwndDlg, uIDButton), BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)hIcon);
+ }
+ else {
+ SetWindowLong(GetDlgItem(hwndDlg, uIDButton), GWL_STYLE, GetWindowLong(GetDlgItem(hwndDlg, uIDButton), GWL_STYLE)&~BS_ICON);
+ SetDlgItemText(hwndDlg, uIDButton, _T("V"));
+ }
+ }
+ else if (!_tcscmp(tszClass, MIRANDABUTTONCLASS)) {
+ if (hIcon != NULL) {
+ char *szTipInfo;
+
+ SendMessage(GetDlgItem(hwndDlg, uIDButton), BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)hIcon);
+ if (ServiceExists(MS_VARS_GETSKINITEM)) {
+ szTipInfo = (char *)CallService(MS_VARS_GETSKINITEM, 0, (LPARAM)VSI_HELPTIPTEXT);
+ }
+ if (szTipInfo == NULL) {
+ szTipInfo = Translate("Open String Formatting Help");
+ }
+ SendMessage(GetDlgItem(hwndDlg, uIDButton), BUTTONADDTOOLTIP, (WPARAM)szTipInfo, 0);
+ SendDlgItemMessage(hwndDlg, uIDButton, BUTTONSETASFLATBTN, 0, 0);
+ }
+ else {
+ SetDlgItemText(hwndDlg, uIDButton, _T("V"));
+ }
+ }
+ else {
+ res = -1;
+ }
+ ShowWindow(GetDlgItem(hwndDlg, uIDButton), ServiceExists(MS_VARS_FORMATSTRING));
+
+ return res;
+}
+#endif
+
+
+#define MS_VARS_SHOWHELP "Vars/ShowHelp"
+
+// WARNING: This service is obsolete, please use MS_VARS_SHOWHELPEX
+
+// Shows a help dialog where all possible tokens are displayed. The tokens
+// are explained on the dialog, too. The user can edit the initial string and
+// insert as many tokens as he likes.
+
+// Parameters:
+// ------------------------
+// wParam = (HWND)hwndEdit
+// Handle to an edit control in which the modified string
+// should be inserted (When the user clicks OK in the dialog the edited
+// string will be set to hwndEdit) (can be NULL).
+// lParam = (char *)pszInitialString
+// String that the user is provided with initially when
+// the dialog gets opened (If this is NULL then the current text in the
+// hwndEdit edit control will be used) (can be NULL).
+
+// Return Value:
+// ------------------------
+// Returns the handle to the help dialog (HWND).
+
+// Note: Only one help dialog can be opened at a time. When the dialog gets
+// closed an EN_CHANGE of the edit controll will be triggered because the
+// contents were updated. (Only when user selected OK).
+
+// Example:
+// CallService(MS_VARS_SHOWHELP, (WPARAM)hwndEdit, (LPARAM)"some initial text");
+
+// --------------------------------------------------------------------------
+// Retrieve a contact's HANDLE given a string
+// --------------------------------------------------------------------------
+
+#define MS_VARS_GETCONTACTFROMSTRING "Vars/GetContactFromString"
+
+// Searching for contacts in the database. You can find contacts in db by
+// searching for their name, e.g first name.
+
+// Parameters:
+// ------------------------
+// wParam = (WPARAM)(CONTACTSINFO *)&ci
+// See below.
+// lParam = 0
+
+// Return Value:
+// ------------------------
+// Returns number of contacts found matching the given string representation.
+// The hContacts array of CONTACTSINFO struct contains these hContacts after
+// the call.
+
+// Note: The hContacts array needs to be freed after use using
+// MS_VARS_FREEMEMORY.
+
+typedef struct {
+ int cbSize; // Set this to sizeof(CONTACTSINFO).
+ union {
+ char *szContact; // String to search for, e.g. last name (can't be NULL).
+ WCHAR * wszContact;
+ TCHAR *tszContact;
+ };
+ HANDLE *hContacts; // (output) Array of contacts found.
+ DWORD flags; // Contact details that will be matched with the search
+ // string (flags can be combined).
+} CONTACTSINFO;
+
+// Possible flags:
+#define CI_PROTOID 0x00000001 // The contact in the string is encoded
+ // in the format <PROTOID:UNIQUEID>, e.g.
+ // <ICQ:12345678>.
+#define CI_NICK 0x00000002 // Search nick names.
+#define CI_LISTNAME 0x00000004 // Search custom names shown in contact
+ // list.
+#define CI_FIRSTNAME 0x00000008 // Search contact's first names (contact
+ // details).
+#define CI_LASTNAME 0x00000010 // Search contact's last names (contact
+ // details).
+#define CI_EMAIL 0x00000020 // Search contact's email adresses
+ // (contact details).
+#define CI_UNIQUEID 0x00000040 // Search unique ids of the contac, e.g.
+ // UIN.
+#define CI_CNFINFO 0x40000000 // Searches one of the CNF_* flags (set
+ // flags to CI_CNFINFO|CNF_X), only one
+ // CNF_ type possible
+#define CI_UNICODE 0x80000000 // tszContact is a unicode string
+ // (WCHAR*).
+
+#if defined(UNICODE) || defined(_UNICODE)
+#define CI_TCHAR CI_UNICODE // Strings in structure are TCHAR*.
+#else
+#define CI_TCHAR 0
+#endif
+
+
+
+#endif //__M_VARS
diff --git a/plugins/StatusPlugins/includes/m_vsramm.h b/plugins/StatusPlugins/includes/m_vsramm.h
new file mode 100644
index 0000000000..cff14d8a2e
--- /dev/null
+++ b/plugins/StatusPlugins/includes/m_vsramm.h
@@ -0,0 +1,11 @@
+typedef struct {
+ char *szProto;
+ char *msg;
+ char *uMsg;
+ int statusMode;
+} PROTOMSGINFO;
+
+// wParam = 0
+// lParam = PROTOMSGINFO *
+// returns 0 on success
+#define MS_VSRAMM_SETAWAYMSG "VSRAMM/SetAwayMsg" \ No newline at end of file
diff --git a/plugins/StatusPlugins/lpgen.pl b/plugins/StatusPlugins/lpgen.pl
new file mode 100644
index 0000000000..5e6ea295b3
--- /dev/null
+++ b/plugins/StatusPlugins/lpgen.pl
@@ -0,0 +1,212 @@
+#!/usr/bin/perl
+
+use POSIX;
+use File::Find;
+use strict;
+
+my $rootdir = '';
+my %hash = ();
+my $clines = 0;
+
+my $version = '0.7svn';
+my $time = localtime();
+
+if (@ARGV && $ARGV[0] eq "version") {
+ shift @ARGV;
+ # 1st arg version major i.e. 07 for "0.7"
+ if (@ARGV) {
+ my $vermaj = shift @ARGV;
+ if ($vermaj =~ /^([0-9]*)([0-9])$/) {
+ if ($1 eq "") {
+ $version = $2;
+ } else {
+ $version = "$1.$2";
+ }
+ } else {
+ $version = $vermaj;
+ }
+ }
+ # 2nd arg version minor i.e. 1 for "0.7.1"
+ if (@ARGV) {
+ my $vermin = shift @ARGV;
+ if ($vermin =~ /^[0-9]+$/) {
+ $version .= ".$vermin";
+ } else {
+ $version .= $vermin;
+ }
+ }
+ # 3rd arg build number i.e. 36 for "0.7.1 build 36"
+ if (@ARGV) {
+ my $build = shift @ARGV;
+ if ($build =~ /^[0-9]+$/) {
+ $version .= " build $build";
+ } else {
+ $version .= $build;
+ }
+ }
+}
+
+#Language Files
+if (!@ARGV) {
+ create_langfile(
+ '../../miranda',
+ '../../miranda/i18n/langpack_english.txt',
+ 'English (US)', '0809',
+ 'Miranda IM Development Team',
+ 'project-info@miranda-im.org',
+ 'Scriver,avs,chat,clist,clist_nicer,db3x,db3x_mmap,dbrw,advaimg,import,modernb,mwclist,png2dib,srmm,tabsrmm,AimOscar,Gadu-Gadu,IRC,IcqOscarJ,JabberG,MSN,Yahoo');
+}
+elsif ($ARGV[0] eq "core") {
+ create_langfile('../../miranda/src',
+ '../../miranda/i18n/core-translation.txt',
+ 'English (US)', '0809',
+ 'Miranda IM Development Team',
+ 'project-info@miranda-im.org');
+}
+elsif ($ARGV[0] eq "srmm") {
+ create_langfile('../../miranda/plugins/SRMM/',
+ '../../miranda/plugins/SRMM/Docs/srmm-translation.txt',
+ 'English (US)', '0809',
+ 'Miranda IM Development Team',
+ 'project-info@miranda-im.org');
+}
+elsif ($ARGV[0] eq "import") {
+ create_langfile('../../miranda/plugins/Import/',
+ '../../miranda/plugins/Import/docs/import-translation.txt',
+ 'English (US)', '0809',
+ 'Miranda IM Development Team',
+ 'project-info@miranda-im.org');
+}
+elsif ($ARGV[0] eq "status") {
+ create_langfile('./',
+ 'statusplugins-translation.txt',
+ 'English (US)', '0809',
+ 'UnregistereD',
+ 'unregistered@users.sourceforge.net');
+}
+else {
+ print "Error: Unknown module $ARGV[0]\n";
+ exit 1;
+}
+
+sub create_langfile {
+ $rootdir = shift(@_);
+ my $outfile = shift(@_);
+ my $lang = shift(@_);
+ my $locale = shift(@_);
+ my $author = shift(@_);
+ my $email = shift(@_);
+ my $plugins = @_ ? shift(@_) : '';
+ %hash = ();
+ my %common = ();
+ $clines = 0;
+ print "Building language file for $rootdir:\n";
+ find({ wanted => \&csearch, preprocess => \&pre_dir }, $rootdir);
+ find({ wanted => \&rcsearch, preprocess => \&pre_dir }, $rootdir);
+ open(WRITE, "> $outfile") or die;
+ print WRITE <<HEADER;
+Miranda Language Pack Version 1
+Locale: $locale
+Authors: $author
+Author-email: $email
+Last-Modified-Using: Miranda IM $version
+Plugins-included: $plugins
+; Generated by lpgen on $time
+; Translations: $clines
+
+HEADER
+ foreach my $trans (keys %hash) {
+ if ($hash{$trans} =~ /^\d+$/) {
+ $common{$trans} = $hash{$trans};
+ delete $hash{$trans};
+ }
+ }
+
+ my @sorted = sort { (floor($common{$b}/20) == floor($common{$a}/20)) ? ($a cmp $b) : ($common{$b} <=> $common{$a}) } keys %common;
+ print WRITE "; Common strings that belong to many files\n;[";
+ print WRITE join "]\n;[", @sorted;
+ print WRITE "]\n";
+
+ my $file = '';
+ foreach my $trans (sort { ($hash{$a} eq $hash{$b}) ? ($a cmp $b) : ($hash{$a} cmp $hash{$b}) } keys %hash) {
+ if ($hash{$trans} ne $file) {
+ $file = $hash{$trans};
+ print WRITE "\n; $file\n";
+ }
+ print WRITE ";[$trans]\n";
+ }
+
+ close(WRITE);
+ print " $outfile is complete ($clines)\n\n";
+}
+
+sub pre_dir {
+ # avoid parsing some ext SDKs
+ my @files = ();
+ return @files if (
+ $File::Find::name =~/..\/extplugins/ or
+ $File::Find::name =~/freeimage\/Source/ or
+ $File::Find::name =~/dbrw\/sqlite3/);
+ @files = grep { not /^\.\.?$/ } @_;
+ return sort @files;
+}
+
+sub append_str {
+ my $str = shift(@_);
+ my $found = shift(@_);
+ $str = substr($str, 1, length($str) - 2);
+ if (length($str) gt 0 and $str ne "List1" and $str ne "Tree1" and $str =~ /[a-zA-Z]+/g) {
+ my $path = $File::Find::name;
+ $path =~ s/(\.\.\/)+miranda\///;
+ if (!$hash{$str}) {
+ $hash{$str} = $path;
+ $clines ++;
+ return 1;
+ } elsif ($hash{$str} ne $path) {
+ if ($hash{$str} =~ /^\d+$/) {
+ $hash{$str} ++;
+ } else {
+ $hash{$str} = 1;
+ }
+ }
+ }
+ return 0;
+}
+
+sub csearch {
+ if (-f $_ and ($_ =~ m/\.c(pp)?$/i or $_ =~ m/\.h(pp)?$/i)) {
+ my $found = 0;
+ my $file = $_;
+ print " Processing $_ ";
+ open(READ, "< $_") or return;
+ my $all = '';
+ while (my $lines = <READ>) {
+ $all = $all.$lines;
+ }
+ close(READ);
+ $_ = $all;
+ while (/(?:Button_SetIcon_IcoLib|Translate[A-Z]{0,2}|LPGENT?|ICQTranslateUtfStatic)\s*\(\s*(\".*?\")\s*[,\)]/g) {
+ $found += append_str($1, $found);
+ }
+ print "($found)\n";
+ }
+}
+
+sub rcsearch {
+ if ( -f $_ and $_ =~ m/\.rc$/i) {
+ my $found = 0;
+ my $file = $_;
+ print " Processing $_ ";
+ open(READ, "< $_") or return;
+ my $all = '';
+ while (my $lines = <READ>) {
+ $all = $all.$lines;
+ }
+ close(READ);
+ $_ = $all;
+ while (/\s*(?:CONTROL|(?:DEF)?PUSHBUTTON|[LRC]TEXT|GROUPBOX|CAPTION|MENUITEM|POPUP)\s*(\".*?\")/g) {
+ $found += append_str($1, $found);
+ }
+ print "($found)\n";
+ }
+}
diff --git a/plugins/StatusPlugins/m_statusplugins.h b/plugins/StatusPlugins/m_statusplugins.h
new file mode 100644
index 0000000000..5139673c6a
--- /dev/null
+++ b/plugins/StatusPlugins/m_statusplugins.h
@@ -0,0 +1,154 @@
+/*
+ AdvancedAutoAway Plugin for Miranda-IM (www.miranda-im.org)
+ KeepStatus Plugin for Miranda-IM (www.miranda-im.org)
+ StartupStatus Plugin for Miranda-IM (www.miranda-im.org)
+ Copyright 2003-2006 P. Boon
+
+ 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_STATUSPLUGINS
+#define __M_STATUSPLUGINS
+
+// -- common status -- (all three plugins)
+typedef struct {
+ int cbSize;
+ char *szName; // pointer to protocol modulename
+ char *szMsg; // pointer to the status message (may be NULL)
+ WORD status; // the status
+ WORD lastStatus;// last status
+ TCHAR *tszAccName;
+} PROTOCOLSETTINGEX;
+
+// wParam = PROTOCOLSETTINGEX*** (keep it like this for compatibility)
+// lParam = 0
+// returns 0 on success
+#define MS_CS_SETSTATUSEX "CommonStatus/SetStatusEx"
+
+// wParam = PROTOCOLSETTINGEX*** (keep it like this for compatibility)
+// lParam = timeout
+// returns hwnd
+#define MS_CS_SHOWCONFIRMDLGEX "CommonStatus/ShowConfirmDialogEx"
+
+// wParam = 0
+// lParam = 0
+// returns the number of protocols registerd
+#define MS_CS_GETPROTOCOUNT "CommonStatus/GetProtocolCount" // added dec '04
+
+// wParam = PROTOCOLSETTINGEX*** (keep it like this for compatibility)
+// lParam = 0
+#define ME_CS_STATUSCHANGEEX "CommonStatus/StatusChangeEx"
+
+// -- startup status --
+// wParam = profile number (set to -1 to get default profile)
+// lParam = PROTOCOLSETTINGEX*** (keep for... )(memory must be allocated protoCount*PROTOCOLSETTINGEX* and protoCount*PROTOCOLSETTINGEX)
+// szMsg member does not have to be freed
+// returns 0 on success
+#define MS_SS_GETPROFILE "StartupStatus/GetProfile" // don't use this > jan '05, internal use only
+
+// wParam = profile number
+// lParam = 0
+// return 0 on success
+#define MS_SS_LOADANDSETPROFILE "StartupStatus/LoadAndSetProfile" // you can use this
+
+// wParam = int*, maybe NULL sets this int to the default profile number
+// lParam = 0
+// returns profile count
+#define MS_SS_GETPROFILECOUNT "StartupStatus/GetProfileCount"
+
+// wParam = profile number
+// lParam = char* (must be allocated, size = 128)
+// returns 0 on success
+#define MS_SS_GETPROFILENAME "StartupStatus/GetProfileName"
+
+// -- AdvancedAutoAway --
+typedef enum {
+ ACTIVE, // user is active
+ STATUS1_SET, // first status change happened
+ STATUS2_SET, // second status change happened
+ SET_ORGSTATUS, // user was active again, original status will be restored
+ HIDDEN_ACTIVE // user is active, but this is not shown to the outside world
+} STATES;
+
+typedef struct {
+ PROTOCOLSETTINGEX* protocolSetting;
+ int originalStatusMode; // this is set only when going from ACTIVE to STATUS1_SET (or to STATUS2_SET)
+ // (note: this is therefore not always valid)
+ STATES
+ oldState, // state before the call
+ curState; // current state
+ BOOL bStatusChanged; // the status of the protocol will actually be changed
+ // (note: unlike the name suggests, the status is changed AFTER this hook is called)
+ BOOL bManual; // state changed becuase status was changed manually
+} AUTOAWAYSETTING;
+// wParam = 0;
+// lParam = AUTOAWAYSETTING*
+// Called when a protocol's state in AAA is changed this does NOT necessary means the status was changed
+// note: this hook is called for each protocol seperately
+#define ME_AAA_STATECHANGED "AdvancedAutoAway/StateChanged"
+
+
+// -- KeepStatus --
+#define KS_CONN_STATE_LOST 1 // lParam = protocol
+#define KS_CONN_STATE_OTHERLOCATION 2 // lParam = protocol
+#define KS_CONN_STATE_RETRY 3 // lParam = nth retry
+#define KS_CONN_STATE_STOPPEDCHECKING 4 // lParam = TRUE if success, FALSE if failed
+#define KS_CONN_STATE_LOGINERROR 5 // lParam = protocol, only if selected in options
+#define KS_CONN_STATE_RETRYNOCONN 6 // lParam = nth try, a connection attempt will not be made
+// wParam = one of above
+// lParam depends on wParam
+#define ME_KS_CONNECTIONEVENT "KeepStatus/ConnectionEvent"
+
+// wParam = 0
+// lParam = 0
+// returns 0 on succes, nonzero on failure, probably keepstatus wasn't reconnecting
+#define MS_KS_STOPRECONNECTING "KeepStatus/StopReconnecting"
+
+// wParam = TRUE to enable checking a protocol, FALSE to disable checking a protocol
+// lParam = protocol
+// return 0 on success, nonzero on failure, probably the protocol is 'hard' disabled or not found
+// note: you cannot enable a protocol that is disabled in the options screen, you can disable a protocol
+// if it's enabled in the option screen.
+#define MS_KS_ENABLEPROTOCOL "KeepStatus/EnableProtocol"
+
+// wParam = 0
+// lParam = protocol
+// returns TRUE if protocol is enabled for checked, FALSE otherwise
+#define MS_KS_ISPROTOCOLENABLED "KeepStatus/IsProtocolEnabled"
+
+// Indicate the status will be changed which will not be regarded as a connection failure.
+// wParam = 0
+// lParam = PROTOCOLSETTINGEX* of the new situation
+// returns 0
+#define MS_KS_ANNOUNCESTATUSCHANGE "KeepStatus/AnnounceStatusChange"
+
+__inline static int announce_status_change(char *szProto, int newstatus, char *szMsg) {
+
+ PROTOCOLSETTINGEX ps;
+
+ ZeroMemory(&ps, sizeof(PROTOCOLSETTINGEX));
+ ps.cbSize = sizeof(PROTOCOLSETTINGEX);
+ if (szProto != NULL) {
+ ps.lastStatus = CallProtoService(szProto, PS_GETSTATUS, 0, 0);
+ } else {
+ ps.lastStatus = CallService(MS_CLIST_GETSTATUSMODE, 0, 0);
+ }
+ ps.status = newstatus;
+ ps.szMsg = szMsg;
+ ps.szName = szProto;
+
+ return CallService(MS_KS_ANNOUNCESTATUSCHANGE, 0, (LPARAM)&ps);
+}
+
+#endif // __M_STATUSPLUGINS
diff --git a/plugins/StatusPlugins/notick.ico b/plugins/StatusPlugins/notick.ico
new file mode 100644
index 0000000000..30081a1d8f
--- /dev/null
+++ b/plugins/StatusPlugins/notick.ico
Binary files differ
diff --git a/plugins/StatusPlugins/notick1.ico b/plugins/StatusPlugins/notick1.ico
new file mode 100644
index 0000000000..2eff6cb958
--- /dev/null
+++ b/plugins/StatusPlugins/notick1.ico
Binary files differ
diff --git a/plugins/StatusPlugins/resource.h b/plugins/StatusPlugins/resource.h
new file mode 100644
index 0000000000..38bdf18a3b
--- /dev/null
+++ b/plugins/StatusPlugins/resource.h
@@ -0,0 +1,175 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by resource.rc
+//
+#define IDD_OPT_KEEPSTATUS 101
+#define IDD_OPT_KS_BASIC 101
+#define IDD_CONFIRMDIALOG 102
+#define IDD_OPT_AUTOAWAY 104
+#define IDD_CMDLOPTIONS 106
+#define IDD_ADDPROFILE 109
+#define IDD_OPT_STARTUPSTATUS 110
+#define IDB_TTBDOWN 111
+#define IDB_TTBUP 112
+#define IDD_PUOPT_KEEPSTATUS 113
+#define IDD_OPT_AUTOAWAYMSG 114
+#define IDI_TICK 117
+#define IDI_NOTICK 118
+#define IDD_OPT_GENAUTOAWAY 119
+#define IDD_OPT_KS_ACTION 120
+#define IDD_SETSTSMSGDIALOG 121
+#define IDD_OPT_KS_TRIGGER 122
+#define IDD_OPT_STATUSPROFILES 123
+#define IDD_OPT_AAATABS 126
+#define IDD_OPT_TABS 126
+#define IDD_OPT_KS_ADV 127
+#define IDD_TRG_AAASTATECHANGE 128
+#define IDI_TTBDOWN 129
+#define IDI_TTBUP 130
+#define IDC_PROTOCOL 1000
+#define IDC_STATUS 1001
+#define IDC_PROFILE 1002
+#define IDC_STARTUPLIST 1008
+#define IDC_STATUSMSG 1008
+#define IDC_SETSTATUSONSTARTUP 1010
+#define IDC_SETPROFILE 1010
+#define IDC_SETWINDOW 1011
+#define IDC_SETWINSTATE 1011
+#define IDC_WINDOW 1012
+#define IDC_WINSTATE 1012
+#define IDC_CLOSE 1013
+#define IDC_SHOWDIALOG 1014
+#define IDC_OFFLINECLOSE 1016
+#define IDC_CONFIRM 1017
+#define IDC_SHOWCMDL 1018
+#define IDC_COPY 1019
+#define IDC_CMDL 1020
+#define IDC_OK 1021
+#define IDC_SHORTCUT 1022
+#define IDC_CHECKCONNECTION 1025
+#define IDC_MAXRETRIES 1026
+#define IDC_INITDELAY 1027
+#define IDC_SETSTATUSDELAY 1027
+#define IDC_SETPROFILEDELAY 1027
+#define IDC_DOCKED 1028
+#define IDC_SETDOCKED 1029
+#define IDC_MAXDELAY 1031
+#define IDC_INCREASEEXPONENTIAL 1032
+#define IDC_LNOTHING 1032
+#define IDC_LCLOSE 1033
+#define IDC_LV1STATUS 1035
+#define IDC_LV2STATUS 1036
+#define IDC_STATUSLIST 1037
+#define IDC_LV1AFTERSTR 1038
+#define IDC_SHOWCONNECTIONPOPUPS 1040
+#define IDC_ADDPROFILE 1041
+#define IDC_DELPROFILE 1042
+#define IDC_PROFILENAME 1043
+#define IDC_CANCEL 1044
+#define IDC_DEFAULTPROFILE 1045
+#define IDC_MONITORMIRANDA 1045
+#define IDC_WINCOLORS 1045
+#define IDC_CHKINET 1045
+#define IDC_IGNLOCK 1045
+#define IDC_CONNLOST 1045
+#define IDC_CREATETTBBUTTONS 1046
+#define IDC_CREATETTB 1046
+#define IDC_PERPROTOCOLSETTINGS 1050
+#define IDC_SAMESETTINGS 1051
+#define IDC_RESETSTATUS 1052
+#define IDC_SETSTSMSG 1053
+#define IDC_DEFAULTCOLORS 1057
+#define IDC_ONLOCK 1057
+#define IDC_CONNSUCCESS 1057
+#define IDC_LOGINERR 1057
+#define IDC_LV2ONINACTIVE 1062
+#define IDC_CNCOTHERLOC 1062
+#define IDC_CONNRETRY 1062
+#define IDC_PUCONNLOST 1062
+#define IDC_DLGTIMEOUT 1063
+#define IDC_AWAYCHECKTIMEINSECS 1063
+#define IDC_STSMSG 1063
+#define IDC_PINGHOST 1063
+#define IDC_CONFIRMDELAY 1064
+#define IDC_PROTOCOLLIST 1066
+#define IDC_LCANCEL 1068
+#define IDC_RNOTHING 1069
+#define IDC_RCLOSE 1070
+#define IDC_RCANCEL 1071
+#define IDC_DELAY 1072
+#define IDC_BGCOLOR 1074
+#define IDC_TEXTCOLOR 1075
+#define IDC_PREV 1076
+#define IDC_LOGINERR_DELAY 1077
+#define IDC_PROTOLIST 1079
+#define IDC_ENABLECHECKING 1080
+#define IDC_DISABLECHECKING 1081
+#define IDC_IDLEWARNING 1084
+#define IDC_DESCRIPTION 1085
+#define IDC_CONNGIVEUP 1086
+#define IDC_CONTCHECK 1087
+#define IDC_BYPING 1088
+#define IDC_CHECKAPMRESUME 1089
+#define IDC_PUCONNRETRY 1090
+#define IDC_PURESULT 1091
+#define IDC_PUOTHER 1092
+#define IDC_DELAYFROMPU 1093
+#define IDC_DELAYCUSTOM 1094
+#define IDC_DELAYPERMANENT 1095
+#define IDC_LOGINERR_CANCEL 1096
+#define IDC_LOGINERR_SETDELAY 1097
+#define IDC_PUSHOWEXTRA 1098
+#define IDC_CREATEMMI 1100
+#define IDC_SETWINLOCATION 1104
+#define IDC_XPOS 1105
+#define IDC_YPOS 1106
+#define IDC_SETWINSIZE 1107
+#define IDC_WIDTH 1108
+#define IDC_HEIGHT 1109
+#define IDC_OVERRIDE 1111
+#define IDC_MIRANDAMSG 1112
+#define IDC_CUSTOMMSG 1113
+#define IDC_CURWINLOC 1114
+#define IDC_CURWINSIZE 1115
+#define IDC_HOTKEY 1116
+#define IDC_REGHOTKEY 1117
+#define IDC_VARIABLESHELP 1118
+#define IDC_AUTODIAL 1120
+#define IDC_AUTOHANGUP 1121
+#define IDC_MONITORKEYBOARD 1122
+#define IDC_MONITORMOUSE 1123
+#define IDC_IGNSYSKEYS 1124
+#define IDC_IGNALTCOMBO 1125
+#define IDC_FIRSTOFFLINE 1126
+#define IDC_INSUBMENU 1127
+#define IDC_MAXCONNECTINGTIME 1128
+#define IDC_TABS 1130
+#define IDC_NOLOCKED 1131
+#define IDC_PINGCOUNT 1132
+#define IDC_CNTDELAY 1133
+#define IDC_ENTERFIRST 1134
+#define IDC_ENTERSECOND 1135
+#define IDC_LEAVEFIRST 1136
+#define IDC_LEAVESECOND 1137
+#define IDC_BECOMEACTIVE 1138
+#define IDC_OTHERLOC 1139
+#define IDC_LOGINERROR 1140
+#define IDC_SCREENSAVE 1145
+#define IDC_TIMED 1146
+#define IDC_AWAYTIME 1147
+#define IDC_SETNA 1148
+#define IDC_NATIME 1149
+#define IDC_RADUSEMIRANDA 1210
+#define IDC_RADUSECUSTOM 1212
+#define IDC_SETNASTR 1568
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 129
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1141
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/plugins/StatusPlugins/resource.rc b/plugins/StatusPlugins/resource.rc
new file mode 100644
index 0000000000..99658d9ecb
--- /dev/null
+++ b/plugins/StatusPlugins/resource.rc
@@ -0,0 +1,540 @@
+// 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_OPT_KS_BASIC DIALOGEX 0, 0, 260, 211
+STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_CHILD | WS_VISIBLE
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ CONTROL "Check connection",IDC_CHECKCONNECTION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,49,136,10
+ EDITTEXT IDC_MAXRETRIES,13,64,22,14,ES_AUTOHSCROLL | ES_NUMBER
+ LTEXT "Max. retries",IDC_STATIC,41,67,108,8
+ GROUPBOX "Protocol Connection",IDC_STATIC,7,35,241,103
+ EDITTEXT IDC_INITDELAY,13,83,22,14,ES_AUTOHSCROLL | ES_NUMBER
+ LTEXT "Delay between retries (secs)",IDC_STATIC,41,86,109,8
+ CONTROL "Show popups",IDC_SHOWCONNECTIONPOPUPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,17,211,10
+ GROUPBOX "General",IDC_STATIC,7,7,241,25
+ CONTROL "",IDC_PROTOCOLLIST,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP,155,60,84,72
+ LTEXT "Protocols to check",IDC_STATIC,157,49,83,8
+ GROUPBOX "Dial-Up",IDC_STATIC,7,140,241,64
+ CONTROL "Don't reconnect if no internet connection seems available",IDC_CHKINET,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,151,225,10
+ CONTROL "Continuously check for internet connection",IDC_CONTCHECK,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,163,225,10
+ CONTROL "Do so by pinging host",IDC_BYPING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,24,174,214,10
+ EDITTEXT IDC_PINGHOST,36,186,189,14,ES_AUTOHSCROLL
+END
+
+IDD_CONFIRMDIALOG DIALOGEX 0, 0, 257, 121
+STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_CONTROLPARENT
+CAPTION "Confirm Status"
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ PUSHBUTTON "Close",IDC_CLOSE,7,100,59,14
+ COMBOBOX IDC_STATUS,185,100,65,101,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ CONTROL "List1",IDC_STARTUPLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,23,243,74
+ PUSHBUTTON "Cancel",IDC_CANCEL,69,100,59,14
+ LTEXT "Profile",IDC_STATIC,7,9,116,8
+ COMBOBOX IDC_PROFILE,185,7,65,89,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+ PUSHBUTTON "Message",IDC_SETSTSMSG,131,100,50,14
+END
+
+IDD_OPT_AUTOAWAY DIALOGEX 0, 0, 284, 198
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ CONTROL "after",IDC_TIMED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,83,32,8
+ EDITTEXT IDC_AWAYTIME,51,81,26,12,ES_AUTOHSCROLL
+ LTEXT "minutes of inactivity",IDC_LV1AFTERSTR,82,83,87,8
+ EDITTEXT IDC_NATIME,51,114,26,12,ES_AUTOHSCROLL
+ LTEXT "minutes of level 1 mode",IDC_SETNASTR,82,116,86,8
+ CONTROL "Confirm resetting status",IDC_CONFIRM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,181,168,10
+ LTEXT "Protocol",IDC_STATIC,9,11,78,8
+ COMBOBOX IDC_LV1STATUS,41,39,65,101,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_LV2STATUS,41,97,65,101,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ LTEXT "Only set if current status is",IDC_STATIC,180,42,95,8
+ CONTROL "",IDC_STATUSLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP,177,55,100,84
+ CONTROL "Monitor Miranda's activity only",IDC_MONITORMIRANDA,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,152,168,10
+ CONTROL "Reset status on return",IDC_RESETSTATUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,166,168,10
+ CONTROL "when screen saver engages",IDC_SCREENSAVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,55,152,10
+ LTEXT "Set",IDC_STATIC,12,42,22,8
+ CONTROL "after",IDC_SETNA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,116,32,8
+ LTEXT "Set",IDC_STATIC,12,100,22,8
+ CONTROL "only set when inactive",IDC_LV2ONINACTIVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,129,151,10
+ CONTROL "when workstation is locked",IDC_ONLOCK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,68,153,10
+ COMBOBOX IDC_PROTOCOL,177,9,100,138,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+END
+
+IDD_CMDLOPTIONS DIALOGEX 0, 0, 315, 82
+STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_CONTROLPARENT
+CAPTION "Command Line"
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ DEFPUSHBUTTON "OK",IDC_OK,257,61,51,14
+ PUSHBUTTON "Copy to Clipboard",IDC_COPY,132,61,120,14
+ EDITTEXT IDC_CMDL,7,19,301,35,ES_MULTILINE | ES_READONLY
+ LTEXT "Command Line:",IDC_STATIC,7,7,301,8
+ PUSHBUTTON "Create Shortcut",IDC_SHORTCUT,7,61,120,14
+END
+
+IDD_ADDPROFILE DIALOGEX 0, 0, 131, 60
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Add new profile"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ DEFPUSHBUTTON "OK",IDC_OK,68,39,50,14
+ PUSHBUTTON "Cancel",IDC_CANCEL,14,39,50,14
+ EDITTEXT IDC_PROFILENAME,14,21,104,14,ES_AUTOHSCROLL
+ LTEXT "Profile name",IDC_STATIC,11,11,55,8
+END
+
+IDD_OPT_STARTUPSTATUS DIALOGEX 0, 0, 305, 223
+STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_CHILD | WS_VISIBLE
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ COMBOBOX IDC_WINSTATE,209,34,80,60,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Set window state",IDC_SETWINSTATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,209,22,80,10
+ CONTROL "Show dialog",IDC_SHOWDIALOG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,71,127,10
+ CONTROL "Set status to offline before exit",IDC_OFFLINECLOSE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,180,174,10
+ PUSHBUTTON "Show CMDL",IDC_SHOWCMDL,14,194,53,14
+ CONTROL "Activate status profile",IDC_SETPROFILE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,20,89,10
+ COMBOBOX IDC_DOCKED,209,64,80,60,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Set docked",IDC_SETDOCKED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,209,52,80,10
+ GROUPBOX "Other",IDC_STATIC,7,166,182,50
+ GROUPBOX "Status on startup",IDC_STATIC,7,7,182,102
+ EDITTEXT IDC_SETPROFILEDELAY,57,35,28,14,ES_AUTOHSCROLL | ES_NUMBER
+ LTEXT "ms",IDC_STATIC,88,37,13,8
+ LTEXT "Set after",IDC_STATIC,26,37,28,8
+ EDITTEXT IDC_DLGTIMEOUT,57,86,28,14,ES_AUTOHSCROLL | ES_NUMBER
+ LTEXT "Timeout",IDC_STATIC,26,89,26,8
+ LTEXT "s",IDC_STATIC,88,89,12,8
+ CONTROL "Set window location",IDC_SETWINLOCATION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,209,82,80,10
+ EDITTEXT IDC_XPOS,209,94,30,14,ES_AUTOHSCROLL | ES_NUMBER
+ EDITTEXT IDC_YPOS,259,94,30,14,ES_AUTOHSCROLL | ES_NUMBER
+ CTEXT ",",IDC_STATIC,245,98,8,8
+ CONTROL "Set window size",IDC_SETWINSIZE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,209,120,80,10
+ EDITTEXT IDC_WIDTH,209,132,30,14,ES_AUTOHSCROLL | ES_NUMBER
+ EDITTEXT IDC_HEIGHT,259,132,30,14,ES_AUTOHSCROLL | ES_NUMBER
+ CTEXT "x",IDC_STATIC,245,135,8,8
+ COMBOBOX IDC_PROFILE,105,19,78,92,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Allow override",IDC_OVERRIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,53,76,10
+ LTEXT "Note: status profiles can be created in the 'Status Profiles' options screen",IDC_STATIC,105,37,77,34
+ LTEXT "",IDC_CURWINLOC,209,110,80,8
+ LTEXT "",IDC_CURWINSIZE,209,150,80,8
+ GROUPBOX "Window on startup",IDC_STATIC,194,7,104,155
+ CONTROL "Automatically dial on startup",IDC_AUTODIAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,129,168,10
+ CONTROL "Automatically hang up on exit",IDC_AUTOHANGUP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,144,168,10
+ GROUPBOX "Dial-up (experimental)",IDC_STATIC,7,113,182,49
+END
+
+IDD_PUOPT_KEEPSTATUS DIALOGEX 0, 0, 254, 223
+STYLE DS_SETFONT | DS_SETFOREGROUND | DS_FIXEDSYS | DS_CENTER | WS_CHILD | WS_VISIBLE
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ CONTROL "",IDC_BGCOLOR,"ColourPicker",WS_TABSTOP,15,19,35,14
+ LTEXT "Background colour",IDC_STATIC,59,23,66,8
+ CONTROL "",IDC_TEXTCOLOR,"ColourPicker",WS_TABSTOP,15,37,35,14
+ LTEXT "Text colour",IDC_STATIC,59,41,66,8
+ CONTROL "Use Windows colours",IDC_WINCOLORS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,56,108,10
+ CONTROL "Use default colours",IDC_DEFAULTCOLORS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,66,107,10
+ GROUPBOX "Delay",IDC_STATIC,137,7,110,52
+ EDITTEXT IDC_DELAY,221,30,20,14,ES_AUTOHSCROLL | ES_NUMBER
+ GROUPBOX "On left click",IDC_STATIC,7,84,103,51
+ GROUPBOX "On right click",IDC_STATIC,137,84,101,51,WS_GROUP
+ CONTROL "Do nothing",IDC_LNOTHING,"Button",BS_AUTORADIOBUTTON | WS_GROUP,15,96,80,10
+ CONTROL "Close popup",IDC_LCLOSE,"Button",BS_AUTORADIOBUTTON,15,108,79,10
+ CONTROL "Cancel reconnecting",IDC_LCANCEL,"Button",BS_AUTORADIOBUTTON,15,120,94,10
+ CONTROL "Do nothing",IDC_RNOTHING,"Button",BS_AUTORADIOBUTTON | WS_GROUP,143,96,78,10
+ CONTROL "Close popup",IDC_RCLOSE,"Button",BS_AUTORADIOBUTTON,143,108,78,10
+ CONTROL "Cancel reconnecting",IDC_RCANCEL,"Button",BS_AUTORADIOBUTTON,143,120,94,10
+ GROUPBOX "Colours",IDC_STATIC,7,7,126,73
+ PUSHBUTTON "Preview",IDC_PREV,137,63,50,14
+ GROUPBOX "Events",IDC_STATIC,7,140,240,76
+ CONTROL "Show when connection is lost",IDC_PUCONNLOST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,153,226,10
+ CONTROL "Show when a connection attempt is made",IDC_PUCONNRETRY,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,165,226,10
+ CONTROL "Show when reconnection has finished",IDC_PURESULT,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,177,226,10
+ CONTROL "Show other messages",IDC_PUOTHER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,189,226,10
+ CONTROL "From PopUp plugin",IDC_DELAYFROMPU,"Button",BS_AUTORADIOBUTTON | WS_GROUP,143,19,94,10
+ CONTROL "Custom",IDC_DELAYCUSTOM,"Button",BS_AUTORADIOBUTTON,143,32,47,10
+ CONTROL "Permanent",IDC_DELAYPERMANENT,"Button",BS_AUTORADIOBUTTON,143,45,50,10
+ CONTROL "Show additional information in popups",IDC_PUSHOWEXTRA,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,201,226,10
+END
+
+IDD_OPT_AUTOAWAYMSG DIALOGEX 0, 0, 263, 153
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ COMBOBOX IDC_STATUS,12,19,240,97,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Use Miranda's message setting",IDC_RADUSEMIRANDA,"Button",BS_AUTORADIOBUTTON,23,56,165,10
+ CONTROL "Use this message:",IDC_RADUSECUSTOM,"Button",BS_AUTORADIOBUTTON,23,69,165,10
+ EDITTEXT IDC_STATUSMSG,33,82,219,50,ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN | WS_VSCROLL
+ LTEXT "Use %time% for the current time, %date% for the current date",IDC_STATIC,33,135,220,8
+ PUSHBUTTON "Variables...",IDC_VARIABLESHELP,198,65,54,14,NOT WS_VISIBLE
+END
+
+IDD_OPT_GENAUTOAWAY DIALOGEX 0, 0, 258, 191
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ CONTROL "Specify settings for each protocol",IDC_PERPROTOCOLSETTINGS,
+ "Button",BS_AUTORADIOBUTTON,20,20,220,10
+ CONTROL "Use same settings for all protocols",IDC_SAMESETTINGS,
+ "Button",BS_AUTORADIOBUTTON,20,31,220,10
+ CONTROL "Ignore caps-lock, num-lock and scroll-lock keys",IDC_IGNLOCK,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,44,220,10
+ LTEXT "Check interval (secs)",IDC_STATIC,21,125,133,8
+ EDITTEXT IDC_AWAYCHECKTIMEINSECS,159,122,22,14,ES_AUTOHSCROLL
+ LTEXT "Confirm dialog timeout (secs)",IDC_STATIC,21,142,133,8
+ EDITTEXT IDC_CONFIRMDELAY,159,138,22,14,ES_AUTOHSCROLL
+ CTEXT "You enabled ""Change my status mode to"" in the ""Idle"" options dialog, AdvancedAutoAway's options are ignored.",IDC_IDLEWARNING,7,164,244,20,NOT WS_VISIBLE
+ CONTROL "Monitor keyboard activity",IDC_MONITORKEYBOARD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,77,220,10
+ CONTROL "Monitor mouse activity",IDC_MONITORMOUSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,88,220,10
+ CONTROL "Ignore CRTL, ALT, SHIFT, TAB, ESC and Windows keys",IDC_IGNSYSKEYS,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,55,220,10
+ CONTROL "Ignore any key combination with above keys",IDC_IGNALTCOMBO,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,66,220,10
+END
+
+IDD_OPT_KS_ACTION DIALOGEX 0, 0, 140, 162
+STYLE DS_SETFONT | DS_3DLOOK | WS_CHILD
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ CONTROL "",IDC_PROTOLIST,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP,16,63,100,72
+ LTEXT "Protocols",IDC_STATIC,19,51,30,8
+ CONTROL "Enable checking",IDC_ENABLECHECKING,"Button",BS_AUTORADIOBUTTON,16,17,69,10
+ CONTROL "Disable checking",IDC_DISABLECHECKING,"Button",BS_AUTORADIOBUTTON,16,33,71,10
+END
+
+IDD_SETSTSMSGDIALOG DIALOG 0, 0, 240, 126
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Set status message"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ DEFPUSHBUTTON "OK",IDC_OK,183,105,50,14
+ PUSHBUTTON "Cancel",IDC_CANCEL,127,105,50,14
+ EDITTEXT IDC_STSMSG,7,19,226,79,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN
+ LTEXT "Set status message",IDC_DESCRIPTION,7,7,226,8
+END
+
+IDD_OPT_KS_TRIGGER DIALOGEX 0, 0, 201, 103
+STYLE DS_SETFONT | DS_3DLOOK | WS_CHILD
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ CONTROL "Trigger when connection loss is detected",IDC_CONNLOST,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,22,170,10
+ CONTROL "Trigger when reconnection attempt is made",IDC_CONNRETRY,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,58,170,10
+ CONTROL "Trigger when successfull reconnected",IDC_CONNSUCCESS,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,70,170,10
+ CONTROL "Trigger when giving up reconnecting",IDC_CONNGIVEUP,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,82,170,10
+ CONTROL "Trigger when reconnected from another location",IDC_OTHERLOC,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,46,170,10
+ GROUPBOX "Pre-conditions",IDC_STATIC,7,7,187,89
+ CONTROL "Trigger when a login error occurs",IDC_LOGINERROR,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,34,170,10
+END
+
+IDD_OPT_STATUSPROFILES DIALOGEX 0, 0, 305, 234
+STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_CHILD | WS_VISIBLE
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ LTEXT "Protocol",IDC_STATIC,16,78,77,8
+ LTEXT "Status",IDC_STATIC,156,78,77,8
+ LISTBOX IDC_PROTOCOL,16,88,133,58,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
+ LISTBOX IDC_STATUS,156,88,133,58,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
+ LTEXT "Profile",IDC_STATIC,16,18,78,8
+ PUSHBUTTON "Add...",IDC_ADDPROFILE,16,44,64,14
+ PUSHBUTTON "Delete",IDC_DELPROFILE,81,44,67,14
+ CONTROL "Create a TopToolBar button",IDC_CREATETTB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,156,27,135,10
+ CONTROL "Show confirm dialog when loading",IDC_SHOWDIALOG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,156,17,135,10
+ COMBOBOX IDC_PROFILE,16,27,133,106,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Create a main menu item",IDC_CREATEMMI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,156,37,135,10
+ EDITTEXT IDC_STATUSMSG,16,174,273,46,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN
+ GROUPBOX "Status Profiles",IDC_STATIC,7,7,291,220
+ CONTROL "Use Miranda's message setting",IDC_MIRANDAMSG,"Button",BS_AUTORADIOBUTTON,16,150,195,10
+ CONTROL "Use this message:",IDC_CUSTOMMSG,"Button",BS_AUTORADIOBUTTON,16,161,192,10
+ CONTROL "HotKey1",IDC_HOTKEY,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,105,63,111,14
+ CONTROL "Hotkey",IDC_REGHOTKEY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,64,88,10
+ PUSHBUTTON "Variables...",IDC_VARIABLESHELP,215,157,74,14,NOT WS_VISIBLE
+ CONTROL "In submenu",IDC_INSUBMENU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,169,47,119,10
+END
+
+IDD_OPT_TABS DIALOGEX 0, 0, 314, 248
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ CONTROL "Tab1",IDC_TABS,"SysTabControl32",0x0,7,7,300,234
+END
+
+IDD_OPT_KS_ADV DIALOGEX 0, 0, 280, 206
+STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | WS_CHILD
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ EDITTEXT IDC_MAXDELAY,16,32,22,14,ES_AUTOHSCROLL | ES_NUMBER
+ LTEXT "Max. delay (secs)",IDC_STATIC,44,35,74,8
+ CONTROL "Increase delay exponential",IDC_INCREASEEXPONENTIAL,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,20,213,10
+ CONTROL "Cancel all if a protocol connects from another location",IDC_CNCOTHERLOC,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,91,234,10
+ CONTROL "Reconnect on APM resume",IDC_CHECKAPMRESUME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,102,234,10
+ CONTROL "Stop trying to reconnect",IDC_LOGINERR_CANCEL,"Button",BS_AUTORADIOBUTTON,27,126,169,10
+ CONTROL "Set delay to",IDC_LOGINERR_SETDELAY,"Button",BS_AUTORADIOBUTTON,27,139,64,10
+ CONTROL "React on login errors",IDC_LOGINERR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,113,234,10
+ EDITTEXT IDC_LOGINERR_DELAY,97,136,22,14,ES_AUTOHSCROLL | ES_NUMBER
+ LTEXT "seconds",IDC_STATIC,125,139,77,8
+ CONTROL "Set protocol offline before a connection attempt",IDC_FIRSTOFFLINE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,80,234,10
+ EDITTEXT IDC_MAXCONNECTINGTIME,132,32,22,14,ES_AUTOHSCROLL | ES_NUMBER
+ LTEXT "Max. protocol connecting time (secs)",IDC_STATIC,159,35,113,19
+ GROUPBOX "Timers",IDC_STATIC,7,7,266,48
+ GROUPBOX "Reconnecting",IDC_STATIC,7,56,266,98
+ CONTROL "Ignore locked status of protocols",IDC_NOLOCKED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,69,234,10
+ GROUPBOX "Dial-Up",IDC_STATIC,7,156,266,43
+ LTEXT "Consider connection lost after",IDC_STATIC,17,168,122,8
+ EDITTEXT IDC_PINGCOUNT,140,165,22,14,ES_AUTOHSCROLL | ES_NUMBER
+ LTEXT "failed pings",IDC_STATIC,165,168,108,8
+ EDITTEXT IDC_CNTDELAY,16,180,22,14,ES_AUTOHSCROLL | ES_NUMBER
+ LTEXT "Continuously check interval (secs)",IDC_STATIC,41,183,160,8
+END
+
+IDD_TRG_AAASTATECHANGE DIALOGEX 0, 0, 212, 144
+STYLE DS_SETFONT | DS_3DLOOK | WS_CHILD
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ CONTROL "Entering first auto-away status",IDC_ENTERFIRST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,24,110,10
+ CONTROL "Entering second auto-away status",IDC_ENTERSECOND,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,37,123,10
+ CONTROL "Leaving first auto-away status",IDC_LEAVEFIRST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,50,109,10
+ CONTROL "Leaving second auto-away status",IDC_LEAVESECOND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,63,122,10
+ CONTROL "Becoming active without status change",IDC_BECOMEACTIVE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,76,140,10
+ GROUPBOX "Pre-conditions",IDC_STATIC,7,7,198,89
+ GROUPBOX "TriggerData",IDC_STATIC,7,97,198,40
+ LTEXT "Status: The status the protocol will change to\r\nProtocol: The protocol changing state",IDC_STATIC,19,111,177,18
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO
+BEGIN
+ IDD_OPT_KS_BASIC, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 248
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 204
+ END
+
+ IDD_CONFIRMDIALOG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 250
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 114
+ END
+
+ IDD_OPT_AUTOAWAY, DIALOG
+ BEGIN
+ RIGHTMARGIN, 277
+ VERTGUIDE, 7
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 191
+ END
+
+ IDD_CMDLOPTIONS, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 308
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 75
+ END
+
+ IDD_ADDPROFILE, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 124
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 53
+ END
+
+ IDD_OPT_STARTUPSTATUS, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 298
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 216
+ END
+
+ IDD_PUOPT_KEEPSTATUS, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 247
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 216
+ END
+
+ IDD_OPT_AUTOAWAYMSG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 152
+ END
+
+ IDD_OPT_GENAUTOAWAY, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 251
+ VERTGUIDE, 240
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 184
+ END
+
+ IDD_OPT_KS_ACTION, DIALOG
+ BEGIN
+ RIGHTMARGIN, 132
+ VERTGUIDE, 7
+ BOTTOMMARGIN, 152
+ HORZGUIDE, 7
+ END
+
+ IDD_SETSTSMSGDIALOG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 233
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 119
+ END
+
+ IDD_OPT_KS_TRIGGER, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 194
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 96
+ END
+
+ IDD_OPT_STATUSPROFILES, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 298
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 227
+ END
+
+ IDD_OPT_TABS, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 307
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 241
+ END
+
+ IDD_OPT_KS_ADV, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 273
+ VERTGUIDE, 16
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 199
+ END
+
+ IDD_TRG_AAASTATECHANGE, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 205
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 137
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/plugins/StatusPlugins/statusplugins-translation.txt b/plugins/StatusPlugins/statusplugins-translation.txt
new file mode 100644
index 0000000000..6bfbb4c5bf
--- /dev/null
+++ b/plugins/StatusPlugins/statusplugins-translation.txt
@@ -0,0 +1,225 @@
+Miranda Language Pack Version 1
+Locale: 0809
+Authors: UnregistereD
+Author-email: unregistered@users.sourceforge.net
+Last-Modified-Using: Miranda IM 0.7svn
+Plugins-included:
+; Generated by lpgen on Mon Mar 8 15:34:14 2010
+; Translations: 193
+
+; Common strings that belong to many files
+;[<current>]
+;[<last>]
+;[Close]
+;[General]
+;[KeepStatus]
+;[Message]
+;[Protocol]
+;[StartupStatus]
+;[Status]
+;[Status Profiles]
+;[default]
+
+; ./AdvancedAutoAway/options.cpp
+;[Auto Away]
+;[Rules]
+;[Status Messages]
+;[minutes of %s mode]
+
+; ./KeepStatus/action_keepstatus.cpp
+;[<from trigger>]
+
+; ./KeepStatus/keepstatus.cpp
+;[%s Connected from another location]
+;[%s Login error (next retry (%d) in %ds)]
+;[%s Login error, cancel reconnecting]
+;[%s Status error (next retry (%d) in %ds)]
+;[%s\t(will be set to %s)\r\n]
+;[Giving up]
+;[No internet connection seems available... (last try (%d))]
+;[No internet connection seems available... (next retry (%d) in %ds)]
+;[Resetting status... (last try (%d))%s]
+;[Resetting status... (next retry (%d) in %ds)%s]
+;[Status error (next retry (%d) in %ds)]
+;[Status was set ok]
+;[will be set to]
+
+; ./KeepStatus/options.cpp
+;[Advanced]
+;[Basic]
+;[PopUps]
+;[You broke the Internet!]
+
+; ./StartupStatus/main.cpp
+;[Startup requires Miranda IM of version 0.8, get it at www.miranda-im.org]
+
+; ./StartupStatus/options.cpp
+;[At least one profile must exist]
+;[Create a status menu item]
+;[Hidden]
+;[Left]
+;[Minimized]
+;[None]
+;[Normal]
+;[Right]
+;[Your default profile will be changed]
+;[loc: %d x %d]
+;[size: %d x %d]
+;[unknown]
+
+; ./StartupStatus/profiles.cpp
+;[StatusProfiles]
+;[There is a maximum of 6 menu items]
+
+; ./commonstatus.cpp
+;[Give a guy some peace, would ya?]
+;[Give it up, I'm not in!]
+;[I'm a chatbot!]
+;[I'm hiding from the mafia.]
+;[I've been away since %time%.]
+;[Mmm...food.]
+;[Nope, not here.]
+;[Not right now.]
+;[That'll be the phone.]
+;[Yep, I'm here.]
+;[idleeeeeeee]
+
+; ./confirmdialog.cpp
+;[<n/a>]
+;[Closing in %d]
+;[Set %s message for %s.]
+
+; ./includes/m_variables.h
+;[Open String Formatting Help]
+
+; ./resource.rc
+;[Activate status profile]
+;[Add new profile]
+;[Add...]
+;[Allow override]
+;[Automatically dial on startup]
+;[Automatically hang up on exit]
+;[Background colour]
+;[Becoming active without status change]
+;[Cancel]
+;[Cancel all if a protocol connects from another location]
+;[Cancel reconnecting]
+;[Check connection]
+;[Check interval (secs)]
+;[Close popup]
+;[Colours]
+;[Command Line]
+;[Command Line:]
+;[Confirm Status]
+;[Confirm dialog timeout (secs)]
+;[Confirm resetting status]
+;[Consider connection lost after]
+;[Continuously check for internet connection]
+;[Continuously check interval (secs)]
+;[Copy to Clipboard]
+;[Create Shortcut]
+;[Create a TopToolBar button]
+;[Create a main menu item]
+;[Custom]
+;[Del]
+;[Delay]
+;[Delay between retries (secs)]
+;[Dial-Up]
+;[Dial-up (experimental)]
+;[Disable checking]
+;[Do nothing]
+;[Do so by pinging host]
+;[Don't reconnect if no internet connection seems available]
+;[Enable checking]
+;[Entering first auto-away status]
+;[Entering second auto-away status]
+;[Events]
+;[From PopUp plugin]
+;[HotKey1]
+;[Hotkey]
+;[Ignore CRTL, ALT, SHIFT, TAB, ESC and Windows keys]
+;[Ignore any key combination with above keys]
+;[Ignore caps-lock, num-lock and scroll-lock keys]
+;[Ignore locked status of protocols]
+;[In submenu]
+;[Increase delay exponential]
+;[Leaving first auto-away status]
+;[Leaving second auto-away status]
+;[Max. delay (secs)]
+;[Max. protocol connecting time (secs)]
+;[Max. retries]
+;[Monitor Miranda's activity only]
+;[Monitor keyboard activity]
+;[Monitor mouse activity]
+;[Note: status profiles can be created in the 'Status Profiles' options screen]
+;[OK]
+;[On left click]
+;[On right click]
+;[Only set if current status is]
+;[Other]
+;[Permanent]
+;[Pre-conditions]
+;[Preview]
+;[Profile]
+;[Profile name]
+;[Protocol Connection]
+;[Protocols]
+;[Protocols to check]
+;[React on login errors]
+;[Reconnect on APM resume]
+;[Reconnecting]
+;[Reset status on return]
+;[Set]
+;[Set after]
+;[Set delay to]
+;[Set docked]
+;[Set protocol offline before a connection attempt]
+;[Set status message]
+;[Set status to offline before exit]
+;[Set window location]
+;[Set window size]
+;[Set window state]
+;[Show CMDL]
+;[Show additional information in popups]
+;[Show confirm dialog when loading]
+;[Show dialog]
+;[Show other messages]
+;[Show popups]
+;[Show when a connection attempt is made]
+;[Show when connection is lost]
+;[Show when reconnection has finished]
+;[Specify settings for each protocol]
+;[Status on startup]
+;[Status: The status the protocol will change to\r\nProtocol: The protocol changing state]
+;[Stop trying to reconnect]
+;[Tab1]
+;[Text colour]
+;[Timeout]
+;[Timers]
+;[Trigger when a login error occurs]
+;[Trigger when connection loss is detected]
+;[Trigger when giving up reconnecting]
+;[Trigger when reconnected from another location]
+;[Trigger when reconnection attempt is made]
+;[Trigger when successfull reconnected]
+;[TriggerData]
+;[Use %time% for the current time, %date% for the current date]
+;[Use Miranda's message setting]
+;[Use Windows colours]
+;[Use default colours]
+;[Use same settings for all protocols]
+;[Use this message:]
+;[Variables...]
+;[Window on startup]
+;[You enabled ]
+;[after]
+;[failed pings]
+;[minutes of inactivity]
+;[minutes of level 1 mode]
+;[ms]
+;[only set when inactive]
+;[s]
+;[seconds]
+;[when screen saver engages]
+;[when workstation is locked]
+;[x]
diff --git a/plugins/StatusPlugins/useronli.ico b/plugins/StatusPlugins/useronli.ico
new file mode 100644
index 0000000000..9abeab6c5d
--- /dev/null
+++ b/plugins/StatusPlugins/useronli.ico
Binary files differ
diff --git a/plugins/StatusPlugins/version.rc b/plugins/StatusPlugins/version.rc
new file mode 100644
index 0000000000..dac86f85a2
--- /dev/null
+++ b/plugins/StatusPlugins/version.rc
@@ -0,0 +1,40 @@
+#include "version.h"
+#include "afxres.h"
+
+#ifdef _WIN32
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+#endif //_WIN32
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION __FILEVERSION_STRING
+ PRODUCTVERSION __PRODVERSION_STRING
+ FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
+#ifdef _DEBUG
+ FILEFLAGS VS_FF_DEBUG
+//#else
+// FILEFLAGS 0x0L
+#endif
+
+ FILEOS VOS__WINDOWS32
+ FILETYPE VFT_DLL
+ FILESUBTYPE VFT2_UNKNOWN
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "000004b0" // LOCALE_NEUTRAL<<16 + 1200 (ANSI - Unicode)
+ BEGIN
+ VALUE "Author", __AUTHOR
+ VALUE "FileDescription", __DESC
+ VALUE "InternalName", __PLUGIN_NAME
+ VALUE "LegalCopyright", __COPYRIGHT
+ VALUE "OriginalFilename", __FILENAME
+ VALUE "FileVersion", __VERSION_STRING
+ VALUE "ProductName", "Miranda IM"
+ VALUE "ProductVersion", __PROD_VERSION_STRING
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", /*LOCALE_NEUTRAL from WinNT.h */ 0x0, 1200
+ END
+END