summaryrefslogtreecommitdiff
path: root/plugins/TrafficCounter
diff options
context:
space:
mode:
authorKirill Volinsky <mataes2007@gmail.com>2017-11-28 22:12:43 +0300
committerKirill Volinsky <mataes2007@gmail.com>2017-11-28 22:12:43 +0300
commit80221d816eeb98f0df38e0243390033c614952f3 (patch)
tree7618176108093921b6934343bc2f76a66ea97730 /plugins/TrafficCounter
parent25df99ba7462958f2cb9075020ec1c9a5a7c9f50 (diff)
Source files converted to utf-8
Diffstat (limited to 'plugins/TrafficCounter')
-rw-r--r--plugins/TrafficCounter/src/TrafficCounter.cpp164
-rw-r--r--plugins/TrafficCounter/src/TrafficCounter.h12
-rw-r--r--plugins/TrafficCounter/src/misc.cpp80
-rw-r--r--plugins/TrafficCounter/src/misc.h34
-rw-r--r--plugins/TrafficCounter/src/options.cpp40
-rw-r--r--plugins/TrafficCounter/src/opttree.cpp2
-rw-r--r--plugins/TrafficCounter/src/opttree.h2
-rw-r--r--plugins/TrafficCounter/src/statistics.cpp154
-rw-r--r--plugins/TrafficCounter/src/stdafx.h46
-rw-r--r--plugins/TrafficCounter/src/vars.cpp22
-rw-r--r--plugins/TrafficCounter/src/version.h2
11 files changed, 279 insertions, 279 deletions
diff --git a/plugins/TrafficCounter/src/TrafficCounter.cpp b/plugins/TrafficCounter/src/TrafficCounter.cpp
index ef7c33e8ca..3c2c81fa82 100644
--- a/plugins/TrafficCounter/src/TrafficCounter.cpp
+++ b/plugins/TrafficCounter/src/TrafficCounter.cpp
@@ -23,15 +23,15 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//GLOBAL
/*-------------------------------------------------------------------------------------------------------------------*/
uTCFLAGS unOptions;
-PROTOLIST *ProtoList; // .
-PROTOLIST OverallInfo; // .
+PROTOLIST *ProtoList; // Данные обо всех аккаунтах.
+PROTOLIST OverallInfo; // Суммарные данные по видимым аккаунтам.
int NumberOfAccounts;
HWND TrafficHwnd;
HINSTANCE hInst;
CLIST_INTERFACE *pcli;
-int hLangpack = 0; // .
+int hLangpack = 0; // Поддержка плагинозависимого перевода.
BOOL bPopupExists = FALSE, bVariablesExists = FALSE, bTooltipExists = FALSE;
static wchar_t tszFormat[] =
@@ -51,7 +51,7 @@ wchar_t *TRAFFIC_COUNTER_WINDOW_CLASS = L"TrafficCounterWnd";
WORD notify_send_size = 0;
WORD notify_recv_size = 0;
//
-//
+// Цвет шрифта и фона
COLORREF Traffic_BkColor, Traffic_FontColor;
//notify
@@ -88,12 +88,12 @@ FontIDW TrafficFontID;
ColourIDW TrafficBackgroundColorID;
//---------------------------------------------------------------------------------------------
-// ToolTip
+// Для ToolTip
//---------------------------------------------------------------------------------------------
BOOL TooltipShowing;
POINT TooltipPosition;
-//
+// Вспомогательные переменные чтобы заставить работать ключевой цвет
BOOL UseKeyColor;
COLORREF KeyColor;
@@ -129,7 +129,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD, LPVOID)
extern "C" int __declspec(dllexport) Load(void)
{
- // .
+ // Получаем дескриптор языкового пакета.
mir_getLP(&pluginInfoEx);
pcli = Clist_GetInterface();
@@ -146,13 +146,13 @@ extern "C" int __declspec(dllexport) Load(void)
extern "C" int __declspec(dllexport) Unload(void)
{
- // .
+ // Удаляем шрифт.
if (Traffic_h_font) {
DeleteObject(Traffic_h_font);
Traffic_h_font = nullptr;
}
- // .
+ // Убиваем все рабочие данные.
DestroyProtocolList();
return 0;
}
@@ -164,20 +164,20 @@ int TrafficCounterShutdown(WPARAM, LPARAM)
SaveSettings(0);
- // .
+ // Удаляем пункт главного меню.
if (hTrafficMainMenuItem) {
Menu_RemoveItem(hTrafficMainMenuItem);
hTrafficMainMenuItem = nullptr;
}
- // .
+ // Удаляем контекстное меню.
if (TrafficPopupMenu) {
DestroyMenu(TrafficPopupMenu);
TrafficPopupMenu = nullptr;
}
- // .
+ // Разрегистрируем процедуру отрисовки фрейма.
CallService(MS_SKINENG_REGISTERPAINTSUB, (WPARAM)TrafficHwnd, (LPARAM)NULL);
- // .
+ // Удаляем фрейм.
if ((ServiceExists(MS_CLIST_FRAMES_REMOVEFRAME)) && Traffic_FrameID) {
CallService(MS_CLIST_FRAMES_REMOVEFRAME, (WPARAM)Traffic_FrameID, 0);
Traffic_FrameID = nullptr;
@@ -200,7 +200,7 @@ int TrafficCounterModulesLoaded(WPARAM, LPARAM)
CreateProtocolList();
ModuleLoad(0, 0);
- //
+ // Читаем флаги
unOptions.Flags = db_get_dw(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_WHAT_DRAW, 0x0882);
Stat_SelAcc = db_get_w(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_STAT_ACC_OPT, 0x01);
@@ -214,7 +214,7 @@ int TrafficCounterModulesLoaded(WPARAM, LPARAM)
Traffic_PopupTimeoutDefault = db_get_b(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_POPUP_TIMEOUT_DEFAULT, 1);
Traffic_PopupTimeoutValue = db_get_b(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_POPUP_TIMEOUT_VALUE, 5);
- //
+ // Формат счётчика для каждого активного протокола
if (db_get_ws(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_COUNTER_FORMAT, &dbv) == 0) {
if (mir_wstrlen(dbv.ptszVal) > 0)
mir_wstrncpy(Traffic_CounterFormat, dbv.ptszVal, _countof(Traffic_CounterFormat));
@@ -226,7 +226,7 @@ int TrafficCounterModulesLoaded(WPARAM, LPARAM)
mir_wstrcpy(Traffic_CounterFormat, tszFormat);
}
- //
+ // Формат всплывающих подсказок
if (db_get_ws(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_TOOLTIP_FORMAT, &dbv) == 0) {
if (mir_wstrlen(dbv.ptszVal) > 0)
mir_wstrncpy(Traffic_TooltipFormat, dbv.ptszVal, _countof(Traffic_TooltipFormat));
@@ -240,7 +240,7 @@ int TrafficCounterModulesLoaded(WPARAM, LPARAM)
Traffic_AdditionSpace = db_get_b(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_ADDITION_SPACE, 0);
- //
+ // Счётчик времени онлайна
OverallInfo.Total.Timer = db_get_dw(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_TOTAL_ONLINE_TIME, 0);
//register traffic font
@@ -258,7 +258,7 @@ int TrafficCounterModulesLoaded(WPARAM, LPARAM)
TrafficFontID.order = 0;
Font_RegisterW(&TrafficFontID);
- //
+ // Регистрируем цвет фона
TrafficBackgroundColorID.cbSize = sizeof(ColourIDW);
mir_wstrcpy(TrafficBackgroundColorID.group, LPGENW("Traffic counter"));
mir_wstrcpy(TrafficBackgroundColorID.name, LPGENW("Font"));
@@ -269,11 +269,11 @@ int TrafficCounterModulesLoaded(WPARAM, LPARAM)
HookEvent(ME_FONT_RELOAD, UpdateFonts);
- // Variables
+ // Добавляем поддержку плагина Variables
RegisterVariablesTokens();
CreateServiceFunction("TrafficCounter/ShowHide", MenuCommand_TrafficShowHide);
- // /
+ // Регистрируем горячую клавишу для показа/скрытия фрейма
{
HOTKEYDESC hkd = {};
hkd.DefHotKey = HOTKEYCODE(HOTKEYF_CONTROL | HOTKEYF_SHIFT, 'T');
@@ -284,17 +284,17 @@ int TrafficCounterModulesLoaded(WPARAM, LPARAM)
Hotkey_Register(&hkd);
}
- // .
+ // Добавляем пункт в главное меню.
if (unOptions.ShowMainMenuItem)
Traffic_AddMainMenuItem();
- // .
+ // Создаём контекстное меню.
if (TrafficPopupMenu = CreatePopupMenu()) {
AppendMenu(TrafficPopupMenu, MF_STRING, POPUPMENU_HIDE, TranslateT("Hide traffic window"));
AppendMenu(TrafficPopupMenu, MF_STRING, POPUPMENU_CLEAR_NOW, TranslateT("Clear the current (Now:) value"));
}
- // Netlib
+ // Регистрируем обработчики событий Netlib
HookEvent(ME_NETLIB_FASTRECV, TrafficRecv);
HookEvent(ME_NETLIB_FASTSEND, TrafficSend);
@@ -308,12 +308,12 @@ void SaveSettings(BYTE OnlyCnt)
{
unsigned short int i;
- //
+ // Сохраняем счётчик времени онлайна
db_set_dw(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_TOTAL_ONLINE_TIME, OverallInfo.Total.Timer);
if (OnlyCnt) return;
- //
+ // Для каждого протокола сохраняем флаги
for (i = 0; i < NumberOfAccounts; i++) {
if (!ProtoList[i].name) continue;
db_set_b(NULL, ProtoList[i].name, SETTINGS_PROTO_FLAGS, ProtoList[i].Flags);
@@ -331,13 +331,13 @@ void SaveSettings(BYTE OnlyCnt)
db_set_b(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_POPUP_TIMEOUT_DEFAULT, Traffic_PopupTimeoutDefault);
db_set_b(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_POPUP_TIMEOUT_VALUE, Traffic_PopupTimeoutValue);
//
- //
+ // Формат счётчиков
db_set_ws(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_COUNTER_FORMAT, Traffic_CounterFormat);
db_set_ws(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_TOOLTIP_FORMAT, Traffic_TooltipFormat);
db_set_b(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_ADDITION_SPACE, Traffic_AdditionSpace);
- //
+ // Сохраняем флаги
db_set_dw(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_WHAT_DRAW, unOptions.Flags);
db_set_w(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_STAT_ACC_OPT, Stat_SelAcc);
}
@@ -414,7 +414,7 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC)
int height = rect.bottom - rect.top;
int width = rect.right - rect.left;
- // .
+ // Свой контекст устройства.
HDC hdc = CreateCompatibleDC(hDC);
BITMAPINFO RGB32BitsBITMAPINFO = { 0 };
@@ -453,43 +453,43 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC)
HFONT old_font = (HFONT)SelectObject(hdc, Traffic_h_font);
- //
+ // Ограничиваем область рисования
rect.top += 2;
rect.left += 3;
rect.bottom -= 2;
rect.right -= 3;
//-------------------
- // Variables, .
+ // Если нет плагина Variables, рисуем упрощённо.
//-------------------
if (!bVariablesExists) {
SummarySession = SummaryTotal = 0;
- //
+ // Для каждого аккаунта
for (int i = 0; i < NumberOfAccounts; i++) {
- // .
+ // Только если разрешено его отображение.
if (ProtoList[i].Visible && ProtoList[i].Enabled) {
int dx = 0;
- // .
+ // Изображаем иконку аккаунта.
if (unOptions.DrawProtoIcon) {
TC_DrawIconEx(hdc, rect.left, rect.top,
Skin_LoadProtoIcon(ProtoList[i].name, CallProtoService(ProtoList[i].name, PS_GETSTATUS, 0, 0)), b, ClistModernPresent);
dx = 19;
}
- //
+ // Изображаем имя аккаунта
if (unOptions.DrawProtoName) {
rect.left += dx;
TC_AlphaText(hdc, ProtoList[i].tszAccountName, &rect, DT_SINGLELINE | DT_LEFT | DT_TOP, ClistModernPresent);
rect.left -= dx;
}
- // .
- // .
+ // Следующие позиции строятся от правого края.
+ // Общее время.
if (unOptions.DrawTotalTimeCounter) {
wchar_t bu[32];
GetDurationFormatM(ProtoList[i].Total.Timer, L"h:mm:ss", bu, 32);
TC_AlphaText(hdc, bu, &rect, DT_SINGLELINE | DT_RIGHT | DT_TOP, ClistModernPresent);
}
- // .
+ // Текущее время.
if (unOptions.DrawCurrentTimeCounter) {
wchar_t bu[32];
@@ -498,7 +498,7 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC)
TC_AlphaText(hdc, bu, &rect, DT_SINGLELINE | DT_RIGHT | DT_TOP, ClistModernPresent);
rect.right += 50;
}
- // .
+ // Изображаем общий трафик.
if (unOptions.DrawTotalTraffic) {
wchar_t bu[32];
@@ -510,7 +510,7 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC)
if (ProtoList[i].Visible)
SummaryTotal += ProtoList[i].TotalRecvTraffic + ProtoList[i].TotalSentTraffic;
}
- // .
+ // Изображаем текущий трафик.
if (unOptions.DrawCurrentTraffic) {
wchar_t bu[32];
@@ -526,17 +526,17 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC)
rect.top += Traffic_LineHeight + Traffic_AdditionSpace;
}
}
- // .
+ // Рисуем суммарный трафик выбранных аккаунтов.
if (unOptions.ShowSummary) {
- // .
+ // Изображаем иконку.
int dx = 0;
if (unOptions.DrawProtoIcon) {
TC_DrawIconEx(hdc, rect.left, rect.top,
Skin_LoadIcon(SKINICON_OTHER_MIRANDA), b, ClistModernPresent);
dx = 19;
}
- //
- //
+ // Выводим текст
+ // Изображаем имя
if (unOptions.DrawProtoName) {
wchar_t *bu = mir_a2u("Summary");
@@ -545,14 +545,14 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC)
rect.left -= dx;
mir_free(bu);
}
- // .
+ // Общее время.
if (unOptions.DrawTotalTimeCounter) {
wchar_t bu[32];
GetDurationFormatM(OverallInfo.Total.Timer, L"h:mm:ss", bu, 32);
TC_AlphaText(hdc, bu, &rect, DT_SINGLELINE | DT_RIGHT | DT_TOP, ClistModernPresent);
}
- // .
+ // Текущее время.
if (unOptions.DrawCurrentTimeCounter) {
wchar_t bu[32];
@@ -561,7 +561,7 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC)
TC_AlphaText(hdc, bu, &rect, DT_SINGLELINE | DT_RIGHT | DT_TOP, ClistModernPresent);
rect.right += 50;
}
- // .
+ // Изображаем общий трафик.
if (unOptions.DrawTotalTraffic) {
wchar_t bu[32];
@@ -570,7 +570,7 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC)
TC_AlphaText(hdc, bu, &rect, DT_SINGLELINE | DT_RIGHT | DT_TOP, ClistModernPresent);
rect.right += 100;
}
- // .
+ // Изображаем текущий трафик.
if (unOptions.DrawCurrentTraffic) {
wchar_t bu[32];
@@ -581,17 +581,17 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC)
}
}
rect.top += Traffic_LineHeight + Traffic_AdditionSpace;
- // .
+ // Рисуем всеобщий трафик.
if (unOptions.ShowOverall) {
- // .
+ // Изображаем иконку.
int dx = 0;
if (unOptions.DrawProtoIcon) {
TC_DrawIconEx(hdc, rect.left, rect.top,
Skin_LoadIcon(SKINICON_OTHER_MIRANDA), b, ClistModernPresent);
dx = 19;
}
- //
- //
+ // Выводим текст
+ // Изображаем имя
if (unOptions.DrawProtoName) {
wchar_t *bu = mir_a2u("Overall");
@@ -600,8 +600,8 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC)
rect.left -= dx;
mir_free(bu);
}
- // .
- // .
+ // Следующие позиции строятся от правого края.
+ // Изображаем общий трафик.
if (unOptions.DrawTotalTraffic) {
wchar_t bu[32];
@@ -610,7 +610,7 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC)
TC_AlphaText(hdc, bu, &rect, DT_SINGLELINE | DT_RIGHT | DT_TOP, ClistModernPresent);
rect.right += 100;
}
- // .
+ // Изображаем текущий трафик.
if (unOptions.DrawCurrentTraffic) {
wchar_t bu[32];
@@ -623,16 +623,16 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC)
}
else {
//-------------
- // Variables - -
+ // Если есть Variables - рисуем по-новому
//-------------
RowItemInfo *ItemsList;
WORD ItemsNumber, RowsNumber;
- // Variables .
+ // Готовим список строк для Variables и иконок.
wchar_t **ExtraText = (wchar_t**)mir_alloc(sizeof(wchar_t*));
HICON *ahIcon = (HICON*)mir_alloc(sizeof(HICON));
RowsNumber = 0;
- // .
+ // Цикл по аккаунтам.
for (int i = 0; i < NumberOfAccounts; i++) {
if (ProtoList[i].Visible && ProtoList[i].Enabled) {
ExtraText = (wchar_t**)mir_realloc(ExtraText, sizeof(wchar_t*) * (RowsNumber + 1));
@@ -642,7 +642,7 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC)
ahIcon[RowsNumber++] = Skin_LoadProtoIcon(ProtoList[i].name, CallProtoService(ProtoList[i].name, PS_GETSTATUS, 0, 0));
}
}
- // 2 .
+ // Ещё 2 особых элемента.
if (unOptions.ShowSummary) {
ExtraText = (wchar_t**)mir_realloc(ExtraText, sizeof(wchar_t*) * (RowsNumber + 1));
ahIcon = (HICON*)mir_realloc(ahIcon, sizeof(HICON) * (RowsNumber + 1));
@@ -658,16 +658,16 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC)
ahIcon[RowsNumber++] = Skin_LoadIcon(SKINICON_OTHER_MIRANDA);
}
- //
+ // Рисуем свой счётчик для каждого из выбранных протоколов
for (int i = 0; i < RowsNumber; i++) {
wchar_t *buf = variables_parse(Traffic_CounterFormat, ExtraText[i], NULL);
if (ItemsNumber = GetRowItems(buf, &ItemsList)) {
- // .
+ // Рисуем текст.
for (int dx = 0; dx < ItemsNumber; dx++) {
- // .
+ // Делаем копию прямоугольника для рисования.
memcpy(&rect2, &rect, sizeof(RECT));
rect2.bottom = rect2.top + Traffic_LineHeight;
- // ?
+ // Что за тег?
switch (ItemsList[dx].Alignment) {
case 'I':
TC_DrawIconEx(hdc, ItemsList[dx].Interval, rect2.top, ahIcon[i], b, ClistModernPresent);
@@ -688,7 +688,7 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC)
}
}
- // .
+ // Нужно освободить память.
for (; ItemsNumber--;)
mir_free(ItemsList[ItemsNumber].String);
@@ -698,7 +698,7 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC)
rect.top += Traffic_LineHeight + Traffic_AdditionSpace;
}
- // .
+ // Удаляем список строк.
for (; RowsNumber--;)
mir_free(ExtraText[RowsNumber]);
mir_free(ExtraText);
@@ -735,7 +735,7 @@ void ProtocolIsOnLine(int num)
- 1000 * ProtoList[num].AllStatistics[ProtoList[num].NumberOfRecords - 1].Time;
ProtoList[num].Session.Timer = 0;
- if (online_count == 1) // - .
+ if (online_count == 1) // Хотя бы один аккаунт перешёл в онлайн - готовимся считать суммарное время.
{
OverallInfo.Session.TimeAtStart = CurrentTimeMs - 1000 * OverallInfo.Session.Timer;
OverallInfo.Total.TimeAtStart = CurrentTimeMs - 1000 * OverallInfo.Total.Timer;
@@ -838,13 +838,13 @@ LRESULT CALLBACK TrafficCounterWndProc_MW(HWND hwnd, UINT msg, WPARAM wParam, LP
NotifyOnSend();
break;
- case TIMER_REDRAW: // .
+ case TIMER_REDRAW: // Перерисовка раз в полсекунды.
{
DWORD CurrentTimeMs;
SYSTEMTIME stNow;
SaveSettings(1);
- // .
+ // Перед подсчётом суммарного трафика обнуляем счётчики.
OverallInfo.CurrentRecvTraffic =
OverallInfo.CurrentSentTraffic =
OverallInfo.TotalRecvTraffic =
@@ -862,11 +862,11 @@ LRESULT CALLBACK TrafficCounterWndProc_MW(HWND hwnd, UINT msg, WPARAM wParam, LP
Stat_CheckStatistics(i);
- { // .
+ { // Здесь на основании статистики вычисляются значения всех трафиков и времени.
DWORD Sum1, Sum2;
unsigned long int j;
- // .
+ // Значения для текущей сессии.
for (Sum1 = Sum2 = 0, j = ProtoList[i].StartIndex; j < ProtoList[i].NumberOfRecords; j++) {
Sum1 += ProtoList[i].AllStatistics[j].Incoming;
Sum2 += ProtoList[i].AllStatistics[j].Outgoing;
@@ -875,7 +875,7 @@ LRESULT CALLBACK TrafficCounterWndProc_MW(HWND hwnd, UINT msg, WPARAM wParam, LP
ProtoList[i].CurrentSentTraffic = Sum2 - ProtoList[i].StartOutgoing;
OverallInfo.CurrentRecvTraffic += ProtoList[i].CurrentRecvTraffic;
OverallInfo.CurrentSentTraffic += ProtoList[i].CurrentSentTraffic;
- // .
+ // Значения для выбранного периода.
ProtoList[i].TotalRecvTraffic =
Stat_GetItemValue(1 << i,
unOptions.PeriodForShow + 1,
@@ -892,7 +892,7 @@ LRESULT CALLBACK TrafficCounterWndProc_MW(HWND hwnd, UINT msg, WPARAM wParam, LP
OverallInfo.TotalSentTraffic += ProtoList[i].TotalSentTraffic;
}
}
- // ?
+ // Не пора ли уведомить?
if (unOptions.NotifyBySize && Traffic_Notify_size_value) {
if (!((OverallInfo.CurrentRecvTraffic >> 10) % Traffic_Notify_size_value)
&& notify_recv_size != OverallInfo.CurrentRecvTraffic >> 10)
@@ -903,10 +903,10 @@ LRESULT CALLBACK TrafficCounterWndProc_MW(HWND hwnd, UINT msg, WPARAM wParam, LP
NotifyOnSend();
}
- // .
+ // Счётчики суммарного времени.
GetLocalTime(&stNow);
- // ?
+ // Не пора ли сбросить общий счётчик?
if ((unOptions.PeriodForShow == 0
&& stNow.wHour == 0
&& stNow.wMinute == 0
@@ -1002,7 +1002,7 @@ void CreateTrafficWindow(HWND hCluiWnd)
0, 0, 0, 0, hCluiWnd, nullptr, hInst, nullptr);
if (ServiceExists(MS_CLIST_FRAMES_ADDFRAME)) {
- //
+ // Готовимся создавать фрейм
memset(&f, 0, sizeof(CLISTFrame));
f.align = alBottom;
f.cbSize = sizeof(CLISTFrame);
@@ -1011,12 +1011,12 @@ void CreateTrafficWindow(HWND hCluiWnd)
f.hWnd = TrafficHwnd;
f.TBname = ("Traffic counter");
f.name = ("Traffic counter");
- //
+ // Создаём фрейм
Traffic_FrameID = (HANDLE)CallService(MS_CLIST_FRAMES_ADDFRAME, (WPARAM)&f, 0);
CallService(MS_SKINENG_REGISTERPAINTSUB, (WPARAM)f.hWnd, (LPARAM)TrafficCounter_PaintCallbackProc);
}
- // .
+ // Создаём таймеры.
SetTimer(TrafficHwnd, TIMER_REDRAW, 500, nullptr);
UpdateNotifyTimer();
}
@@ -1113,8 +1113,8 @@ void CreateProtocolList(void)
ProtoList[i].StartIndex = ProtoList[i].NumberOfRecords - 1;
ProtoList[i].StartIncoming = ProtoList[i].AllStatistics[ProtoList[i].StartIndex].Incoming;
ProtoList[i].StartOutgoing = ProtoList[i].AllStatistics[ProtoList[i].StartIndex].Outgoing;
- } //
- // .
+ } // цикл по аккаунтам
+ // Начальные значения для суммарной информации.
OverallInfo.Session.Timer = OverallInfo.Total.Timer = 0;
}
@@ -1169,7 +1169,7 @@ int UpdateFonts(WPARAM, LPARAM)
TrafficFontHeight = abs(logfont.lfHeight) + 1;
Traffic_BkColor = Colour_GetW(TrafficBackgroundColorID);
- //
+ // Ключевой цвет
UseKeyColor = db_get_b(NULL, "ModernSettings", "UseKeyColor", 1);
KeyColor = db_get_dw(NULL, "ModernSettings", "KeyColor", 0);
@@ -1190,15 +1190,15 @@ unsigned short int TrafficWindowHeight(void)
for (int i = 0; i < NumberOfAccounts; i++)
ActProto += ProtoList[i].Visible && ProtoList[i].Enabled;
- // 16 ( ).
+ // Высота строки минимум 16 пикселей (для иконки).
Traffic_LineHeight = TrafficFontHeight > 16 ? TrafficFontHeight : 16;
- // .
+ // Высота фрейма равна количеству строк.
int MaxWndHeight = ActProto * Traffic_LineHeight + Traffic_AdditionSpace * (ActProto - 1) + 4;
return (MaxWndHeight < TrafficFontHeight) ? 0 : MaxWndHeight;
}
-// ProtoList
+// Функция вносит изменения в ProtoList при коммутации аккаунтов
int OnAccountsListChange(WPARAM wParam, LPARAM lParam)
{
PROTOACCOUNT *acc = (PROTOACCOUNT*)lParam;
diff --git a/plugins/TrafficCounter/src/TrafficCounter.h b/plugins/TrafficCounter/src/TrafficCounter.h
index a033d67289..a11f4178be 100644
--- a/plugins/TrafficCounter/src/TrafficCounter.h
+++ b/plugins/TrafficCounter/src/TrafficCounter.h
@@ -24,7 +24,7 @@ int TrafficRecv(WPARAM wParam,LPARAM lParam);
int TrafficSend(WPARAM wParam,LPARAM lParam);
//---------------------------------------------------------------------------------------------
-//
+// Имена параметров с настройками в базе
//---------------------------------------------------------------------------------------------
#define TRAFFIC_SETTINGS_GROUP "TrafficCounter"
@@ -51,13 +51,13 @@ int TrafficSend(WPARAM wParam,LPARAM lParam);
#define TIMER_REDRAW 3300
#define TIMER_TOOLTIP 3301
#define SETTINGS_TOTAL_ONLINE_TIME "TotalOnlineTime"
-//
+// Разные флажки
#define SETTINGS_WHAT_DRAW "WhatDraw"
-// -
+// Настройки для протоколов - сохраняются в ветке протокола
#define SETTINGS_PROTO_FLAGS "tc_Flags"
-/*====== =====*/
+/*====== ФУНКЦИИ МОДУЛЯ =====*/
int TrafficCounterOptInitialise(WPARAM wParam,LPARAM lParam);
int TrafficCounterModulesLoaded(WPARAM wParam,LPARAM lParam);
int TrafficCounterShutdown(WPARAM wParam,LPARAM lParam);
@@ -77,10 +77,10 @@ int OnAccountsListChange(WPARAM wParam, LPARAM lParam);
int UpdateFonts(WPARAM wParam, LPARAM lParam);
void UpdateTrafficWindowSize(void);
unsigned short int TrafficWindowHeight(void);
-//
+// Рисование
int TrafficCounter_Draw(HWND, HDC);
int PaintTrafficCounterWindow(HWND, HDC);
-//
+// Вспомогательные функции
INT_PTR MenuCommand_TrafficShowHide(WPARAM, LPARAM);
void Traffic_AddMainMenuItem(void);
diff --git a/plugins/TrafficCounter/src/misc.cpp b/plugins/TrafficCounter/src/misc.cpp
index f15a045250..3e8b231e07 100644
--- a/plugins/TrafficCounter/src/misc.cpp
+++ b/plugins/TrafficCounter/src/misc.cpp
@@ -19,52 +19,52 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "stdafx.h"
-/* .
-:
-InputString - ;
-RowItemsList - .
- - . */
+/* Функция разбирает строку и возвращает список тегов и соответствующих им строк.
+Аргументы:
+InputString - строка для разбора;
+RowItemsList - список найденных элементов.
+Возвращаемое значение - количество элементов в списках. */
WORD GetRowItems(wchar_t *InputString, RowItemInfo **RowItemsList)
{
wchar_t *begin, *end;
WORD c = 0;
- // .
+ // Ищем слева открывающую скобку.
begin = wcschr(InputString, '{');
- // ...
+ // Если скобка найдена...
if (begin) {
- //
+ // Выделяем память под указатели
*RowItemsList = (RowItemInfo*)mir_alloc(sizeof(RowItemInfo));
}
else return 0;
do {
- // .
+ // Сразу вслед за ней ищем закрывающую.
end = wcschr(begin, '}');
- //
+ // Выделяем память под указатели
*RowItemsList = (RowItemInfo*)mir_realloc(*RowItemsList, sizeof(RowItemInfo) * (c + 1));
- // .
+ // Разбираем тег.
swscanf(begin + 1, L"%c%hd",
&((*RowItemsList)[c].Alignment),
&((*RowItemsList)[c].Interval));
- // - , .
+ // Ищем далее открывающую скобку - это конец строки, соответствующей тегу.
begin = wcschr(end, '{');
if (begin) {
- // .
+ // Выделяем память под строку.
(*RowItemsList)[c].String = (wchar_t*)mir_alloc(sizeof(wchar_t) * (begin - end));
- // .
+ // Копируем строку.
wcsncpy((*RowItemsList)[c].String, end + 1, begin - end - 1);
(*RowItemsList)[c].String[begin - end - 1] = 0;
}
else {
- // .
+ // Выделяем память под строку.
(*RowItemsList)[c].String = (wchar_t*)mir_alloc(sizeof(wchar_t) * mir_wstrlen(end));
- // .
+ // Копируем строку.
wcsncpy((*RowItemsList)[c].String, end + 1, mir_wstrlen(end));
}
@@ -74,7 +74,7 @@ WORD GetRowItems(wchar_t *InputString, RowItemInfo **RowItemsList)
return c;
}
-/* . */
+/* Функция возвращает количество дней в указанном месяце указанного года. */
BYTE DaysInMonth(BYTE Month, WORD Year)
{
switch (Month) {
@@ -94,8 +94,8 @@ BYTE DaysInMonth(BYTE Month, WORD Year)
return 0;
}
-//
-// 7 - , 1 - . .
+// Функция определяет день недели по дате
+// 7 - ВС, 1 - ПН и т. д.
BYTE DayOfWeek(BYTE Day, BYTE Month, WORD Year)
{
WORD a, y, m;
@@ -111,19 +111,19 @@ BYTE DayOfWeek(BYTE Day, BYTE Month, WORD Year)
}
/*
-:
-Value - ;
-Unit - (0 - , 1 - , 2 - , 3 - );
-Buffer - ;
-Size - .
- : .
+Аргументы:
+Value - количество байт;
+Unit - единицы измерения (0 - байты, 1 - килобайты, 2 - мегабайты, 3 - автоматически);
+Buffer - адрес строки для записи результата;
+Size - размер буфера.
+Возвращаемое значение: требуемый размер буфера.
*/
size_t GetFormattedTraffic(DWORD Value, BYTE Unit, wchar_t *Buffer, size_t Size)
{
wchar_t Str1[32], szUnit[4] = { ' ', 0 };
DWORD Divider;
NUMBERFMT nf = { 0, 1, 3, L",", L" ", 0 };
- wchar_t *Res; // .
+ wchar_t *Res; // Промежуточный результат.
switch (Unit) {
case 0: //bytes
@@ -167,36 +167,36 @@ size_t GetFormattedTraffic(DWORD Value, BYTE Unit, wchar_t *Buffer, size_t Size)
return l;
}
-/*
-:
-Duration: ;
-Format: ;
-Buffer: , .
-Size - . */
+/* Преобразование интервала времени в его строковое представление
+Аргументы:
+Duration: интервал времени в секундах;
+Format: строка формата;
+Buffer: адрес буфера, куда функция помещает результат.
+Size - размер буфера. */
size_t GetDurationFormatM(DWORD Duration, wchar_t *Format, wchar_t *Buffer, size_t Size)
{
size_t Length;
DWORD q;
WORD TokenIndex, FormatIndex;
- wchar_t Token[256], // .
- *Res; // .
+ wchar_t Token[256], // Аккумулятор.
+ *Res; // Промежуточный результат.
- Res = (wchar_t*)malloc(sizeof(wchar_t)); // - , .
+ Res = (wchar_t*)malloc(sizeof(wchar_t)); // Выделяем чуть-чуть памяти под результат, но это только начало.
//SecureZeroMemory(Res, sizeof(wchar_t));
Res[0] = 0;
for (FormatIndex = 0; Format[FormatIndex];) {
- // . , - .
+ // Ищем токены. Считается, что токен - только буквы.
TokenIndex = 0;
q = iswalpha(Format[FormatIndex]);
- // .
+ // Копируем символы в аккумулятор до смены флага.
do {
Token[TokenIndex++] = Format[FormatIndex++];
} while (q == iswalpha(Format[FormatIndex]));
Token[TokenIndex] = 0;
- // ?
+ // Что получили в аккумуляторе?
if (!mir_wstrcmp(Token, L"d")) {
q = Duration / (60 * 60 * 24);
mir_snwprintf(Token, L"%d", q);
@@ -233,7 +233,7 @@ size_t GetDurationFormatM(DWORD Duration, wchar_t *Format, wchar_t *Buffer, size
Duration -= q;
}
- // , .
+ // Добавим памяти, если нужно.
Length = mir_wstrlen(Res) + mir_wstrlen(Token) + 1;
Res = (wchar_t*)realloc(Res, Length * sizeof(wchar_t));
mir_wstrcat(Res, Token);
@@ -249,7 +249,7 @@ size_t GetDurationFormatM(DWORD Duration, wchar_t *Format, wchar_t *Buffer, size
return Length;
}
-/* :
+/* Результат:
-1 - st1 < st2
0 - st1 = st2
+1 - st1 > st2
diff --git a/plugins/TrafficCounter/src/misc.h b/plugins/TrafficCounter/src/misc.h
index d0d784e6cf..04343d3c33 100644
--- a/plugins/TrafficCounter/src/misc.h
+++ b/plugins/TrafficCounter/src/misc.h
@@ -1,30 +1,30 @@
typedef struct
{
- wchar_t Alignment; // . L - , R - .
- WORD Interval; // , .
- wchar_t *String; // .
+ wchar_t Alignment; // Выравнивание. L - к левой границе, R - к правой.
+ WORD Interval; // Расстояние, на которое граница строки отстоит от левого края фрейма.
+ wchar_t *String; // Собственно строка.
} RowItemInfo;
-/* .
-:
-InputString - ;
-RowItemsList - .
- - . */
+/* Функция разбирает строку и возвращает список тегов и соответствующих им строк.
+Аргументы:
+InputString - строка для разбора;
+RowItemsList - список найденных элементов.
+Возвращаемое значение - количество элементов в списках. */
WORD GetRowItems(wchar_t *InputString, RowItemInfo **RowItemsList);
-/* . */
+/* Функция возвращает количество дней в указанном месяце указанного года. */
BYTE DaysInMonth(BYTE Month, WORD Year);
-//
-// 7 - , 1 - . .
+// Функция определяет день недели по дате
+// 7 - ВС, 1 - ПН и т. д.
BYTE DayOfWeek(BYTE Day, BYTE Month, WORD Year);
-/* :
- Value - ;
- Unit - (0 - , 1 - , 2 - , 3 - );
- Buffer - ;
- Size - .
- : . */
+/* Аргументы:
+ Value - количество байт;
+ Unit - единицы измерения (0 - байты, 1 - килобайты, 2 - мегабайты, 3 - автоматически);
+ Buffer - адрес строки для записи результата;
+ Size - размер буфера.
+Возвращаемое значение: требуемый размер буфера. */
size_t GetFormattedTraffic(DWORD Value, BYTE Unit, wchar_t *Buffer, size_t Size);
size_t GetDurationFormatM(DWORD Duration, wchar_t *Format, wchar_t *Buffer, size_t Size);
diff --git a/plugins/TrafficCounter/src/options.cpp b/plugins/TrafficCounter/src/options.cpp
index 605f04767a..16cfb39ab7 100644
--- a/plugins/TrafficCounter/src/options.cpp
+++ b/plugins/TrafficCounter/src/options.cpp
@@ -17,13 +17,13 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* ======================================================================================
-
-: Mironych
+Здесь содержатся переменные и функции для работы со статистикой
+Автор: Mironych
=======================================================================================*/
#include "stdafx.h"
-OPTTREE_OPTION *pOptions; // opttree.c .
+OPTTREE_OPTION *pOptions; // Через этот указатель модуль opttree.c может добраться до списка опций.
/////////////////////////////////////////////////////////////////////////////////////////
@@ -135,8 +135,8 @@ static OPTTREE_OPTION options[] =
{0, LPGENW("General") L"/" LPGENW("Draw frame as skin element"), OPTTREE_CHECK, 1, nullptr, "DrawFrmAsSkin"},
{0, LPGENW("General") L"/" LPGENW("Show tooltip in traffic window"), OPTTREE_CHECK, 1, nullptr, "ShowTooltip"},
{0, LPGENW("General") L"/" LPGENW("\"Toggle traffic counter\" in main menu"), OPTTREE_CHECK, 1, nullptr, "ShowMainMenuItem"},
- //
- // 16 16
+ // Резервируем место под активные и видимые протоколы
+ // Максимум 16 позиций видимых и 16 активных
{0, nullptr, OPTTREE_CHECK, OPTTREE_INVISIBLE, nullptr, nullptr},
{0, nullptr, OPTTREE_CHECK, OPTTREE_INVISIBLE, nullptr, nullptr},
{0, nullptr, OPTTREE_CHECK, OPTTREE_INVISIBLE, nullptr, nullptr},
@@ -183,12 +183,12 @@ static INT_PTR CALLBACK DlgProcTCOptions(HWND hwndDlg, UINT msg, WPARAM wParam,
if (!Initialized) {
pOptions = options;
optionCount = _countof(options);
- // Variables,
+ // Если нет Variables, активируем галочки для старого метода рисования
if (!bVariablesExists)
for (i = 0; i < 8; i++)
options[i].dwFlag = 1;
- // .
+ // Флажки для видимости аккаунтов создаются в любом случае.
for (i = j = 0; (j < NumberOfAccounts) && (i < optionCount) ; i++)
if ((options[i].dwFlag & OPTTREE_INVISIBLE) && !options[i].szSettingName)
{
@@ -215,11 +215,11 @@ static INT_PTR CALLBACK DlgProcTCOptions(HWND hwndDlg, UINT msg, WPARAM wParam,
//show/hide button
SetDlgItemText(hwndDlg,IDC_BSHOWHIDE,(IsWindowVisible(TrafficHwnd) != 0)? TranslateT("Hide now") : TranslateT("Show now"));
- //
+ // Строки формата для счётчиков
EnableWindow(GetDlgItem(hwndDlg, IDC_EDIT_COUNTER_FORMAT), bVariablesExists);
SetDlgItemText(hwndDlg, IDC_EDIT_COUNTER_FORMAT, Traffic_CounterFormat);
- //
+ // Формат всплывающей подсказки
EnableWindow(GetDlgItem(hwndDlg,IDC_EDIT_TOOLTIP_FORMAT), bTooltipExists);
SetDlgItemText(hwndDlg, IDC_EDIT_TOOLTIP_FORMAT, Traffic_TooltipFormat);
@@ -230,7 +230,7 @@ static INT_PTR CALLBACK DlgProcTCOptions(HWND hwndDlg, UINT msg, WPARAM wParam,
SendDlgItemMessage(hwndDlg, IDC_COMBO_AUTO_CLEAR, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Year"));
SendDlgItemMessage(hwndDlg, IDC_COMBO_AUTO_CLEAR, CB_SETCURSEL, unOptions.PeriodForShow, 0);
- //
+ // Интервал между строками
SetDlgItemInt(hwndDlg, IDC_EDIT_SPACE, Traffic_AdditionSpace, 0);
SendDlgItemMessage(hwndDlg, IDC_EDIT_SPACE, EM_LIMITTEXT, 2, 0);
@@ -246,7 +246,7 @@ static INT_PTR CALLBACK DlgProcTCOptions(HWND hwndDlg, UINT msg, WPARAM wParam,
OptTree_SetOptions(hwndDlg, IDC_APPEARANCEOPTIONS, options, optionCount, unOptions.ShowTooltip, "ShowTooltip");
OptTree_SetOptions(hwndDlg, IDC_APPEARANCEOPTIONS, options, optionCount, unOptions.ShowMainMenuItem, "ShowMainMenuItem");
- //
+ // Настройки видимости протоколов
for (i = 0; i < NumberOfAccounts; i++) {
char buffer[32];
mir_strcpy(buffer, ProtoList[i].name);
@@ -285,9 +285,9 @@ static INT_PTR CALLBACK DlgProcTCOptions(HWND hwndDlg, UINT msg, WPARAM wParam,
case PSN_APPLY:
unOptions.PeriodForShow = (char)SendDlgItemMessage(hwndDlg,IDC_COMBO_AUTO_CLEAR,CB_GETCURSEL,0,0);
- //
+ // Интервал между строками
Traffic_AdditionSpace = GetDlgItemInt(hwndDlg, IDC_EDIT_SPACE, nullptr, 0);
- // Appearance
+ // Настройки Appearance
unOptions.DrawProtoIcon = OptTree_GetOptions(hwndDlg, IDC_APPEARANCEOPTIONS, options, optionCount, "DrawProtoIcon");
unOptions.DrawProtoName = OptTree_GetOptions(hwndDlg, IDC_APPEARANCEOPTIONS, options, optionCount, "DrawProtoName");
unOptions.DrawCurrentTraffic = OptTree_GetOptions(hwndDlg, IDC_APPEARANCEOPTIONS, options, optionCount, "DrawCurrentTraffic");
@@ -300,7 +300,7 @@ static INT_PTR CALLBACK DlgProcTCOptions(HWND hwndDlg, UINT msg, WPARAM wParam,
unOptions.ShowTooltip = OptTree_GetOptions(hwndDlg, IDC_APPEARANCEOPTIONS, options, optionCount, "ShowTooltip");
unOptions.ShowMainMenuItem = OptTree_GetOptions(hwndDlg, IDC_APPEARANCEOPTIONS, options, optionCount, "ShowMainMenuItem");
- //
+ // Настройки видимости протоколов
for (i = 0; i < NumberOfAccounts; i++)
{
char buffer[32];
@@ -309,25 +309,25 @@ static INT_PTR CALLBACK DlgProcTCOptions(HWND hwndDlg, UINT msg, WPARAM wParam,
}
unOptions.ShowOverall = OptTree_GetOptions(hwndDlg, IDC_APPEARANCEOPTIONS, options, optionCount, "ShowOverall");
- //
+ // Формат счётчиков
GetDlgItemText(hwndDlg, IDC_EDIT_COUNTER_FORMAT, Traffic_CounterFormat, _countof(Traffic_CounterFormat));
- //
+ // Формат всплывающей подсказки
GetDlgItemText(hwndDlg, IDC_EDIT_TOOLTIP_FORMAT, Traffic_TooltipFormat, _countof(Traffic_TooltipFormat));
- //
+ // Ключевой цвет
UseKeyColor = db_get_b(NULL, "ModernSettings", "UseKeyColor", 1);
KeyColor = db_get_dw(NULL, "ModernSettings", "KeyColor", 0);
- //
+ // Перерисовываем фрейм
UpdateTrafficWindowSize();
- // , .
+ // Если отключается показ пункта главного меню, то удаляем его.
if (!unOptions.ShowMainMenuItem && hTrafficMainMenuItem)
{
Menu_RemoveItem(hTrafficMainMenuItem);
hTrafficMainMenuItem = nullptr;
}
- // , .
+ // Если включается, то создаём.
if (unOptions.ShowMainMenuItem && !hTrafficMainMenuItem)
Traffic_AddMainMenuItem();
diff --git a/plugins/TrafficCounter/src/opttree.cpp b/plugins/TrafficCounter/src/opttree.cpp
index c3d6cfdc7d..fb9ffe8f91 100644
--- a/plugins/TrafficCounter/src/opttree.cpp
+++ b/plugins/TrafficCounter/src/opttree.cpp
@@ -36,7 +36,7 @@ static void OptTree_TranslateItem(HWND hwndTree, HTREEITEM hItem)
tvi.pszText = buf;
tvi.cchTextMax = _countof(buf);
SendMessage(hwndTree, TVM_GETITEM, 0, (LPARAM)&tvi);
- // , .
+ // Проверим, надо ли переводить.
if ((tvi.lParam != -1) && (pOptions[tvi.lParam].dwFlag & OPTTREE_NOTRANSLATE)) return;
tvi.pszText = TranslateW(tvi.pszText);
SendMessage(hwndTree, TVM_SETITEM, 0, (LPARAM)&tvi);
diff --git a/plugins/TrafficCounter/src/opttree.h b/plugins/TrafficCounter/src/opttree.h
index 8c80b599eb..4fde5a2387 100644
--- a/plugins/TrafficCounter/src/opttree.h
+++ b/plugins/TrafficCounter/src/opttree.h
@@ -24,7 +24,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifndef __opttree_h__
#define __opttree_h__
-//
+// дыруш
#define OPTTREE_CHECK 0
#define OPTTREE_INVISIBLE 2
#define OPTTREE_NOTRANSLATE 4
diff --git a/plugins/TrafficCounter/src/statistics.cpp b/plugins/TrafficCounter/src/statistics.cpp
index 342b1d8fa2..5451e7158e 100644
--- a/plugins/TrafficCounter/src/statistics.cpp
+++ b/plugins/TrafficCounter/src/statistics.cpp
@@ -17,13 +17,13 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* ======================================================================================
-
-: Mironych
+Здесь содержатся переменные и функции для работы со статистикой
+Автор: Mironych
=======================================================================================*/
#include "stdafx.h"
-WORD Stat_SelAcc; //
+WORD Stat_SelAcc; // Выбранные аккаунты в окне статистики
HWND hListAccs;
@@ -34,7 +34,7 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA
switch (msg) {
case WM_INITDIALOG:
TranslateDialogDefault(hwndDlg);
- // ListBox c .
+ // Создаём ListBox c перечнем аккаунтов.
hListAccs = CreateWindowEx(WS_EX_CLIENTEDGE,
L"ListBox",
nullptr, WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | LBS_NOTIFY,
@@ -42,19 +42,19 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA
hwndDlg, nullptr, nullptr, nullptr);
SendMessage(hListAccs, WM_SETFONT, (WPARAM)(HFONT)GetStockObject(DEFAULT_GUI_FONT), 0);
for (i = 0; i < NumberOfAccounts; i++) {
- //
+ // Готовим список аккаунтов
if (ProtoList[i].tszAccountName)
SendMessage(hListAccs, LB_ADDSTRING, 0, (LPARAM)ProtoList[i].tszAccountName);
}
for (i = NumberOfAccounts; i--;)
SendMessage(hListAccs, LB_SETSEL, (WPARAM)0x01 & (Stat_SelAcc >> i), (LPARAM)i);
- //
+ // Готовим список единиц измерения
SendDlgItemMessage(hwndDlg, IDC_COMBO_UNITS, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Bytes"));
SendDlgItemMessage(hwndDlg, IDC_COMBO_UNITS, CB_INSERTSTRING, -1, (LPARAM)TranslateT("KB"));
SendDlgItemMessage(hwndDlg, IDC_COMBO_UNITS, CB_INSERTSTRING, -1, (LPARAM)TranslateT("MB"));
SendDlgItemMessage(hwndDlg, IDC_COMBO_UNITS, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Adaptive"));
SendDlgItemMessage(hwndDlg, IDC_COMBO_UNITS, CB_SETCURSEL, unOptions.Stat_Units, 0);
- //
+ // Готовим закладки
{
TCITEM tci;
tci.mask = TCIF_TEXT;
@@ -70,7 +70,7 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA
SendDlgItemMessage(hwndDlg, IDC_TAB_STATS, TCM_INSERTITEM, 4, (LPARAM)&tci);
SendDlgItemMessage(hwndDlg, IDC_TAB_STATS, TCM_SETCURSEL, unOptions.Stat_Tab, 0);
}
- // ListView -
+ // Готовим ListView - колонки и стили
{
SendDlgItemMessage(hwndDlg, IDC_LIST_DATA, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT);
SendDlgItemMessage(hwndDlg, IDC_LIST_DATA, LVM_SETUNICODEFORMAT, 1, 0);
@@ -136,7 +136,7 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA
for (i = NumberOfAccounts; i--;)
if (0x01 & (Stat_SelAcc >> i)) {
SetFilePointer(ProtoList[i].hFile, sizeof(HOURLYSTATS), nullptr, FILE_BEGIN);
- SetEndOfFile(ProtoList[i].hFile); // .
+ SetEndOfFile(ProtoList[i].hFile); // Усекаем файл до одной записи.
ProtoList[i].NumberOfRecords = 1;
ProtoList[i].AllStatistics = (HOURLYSTATS*)mir_realloc(ProtoList[i].AllStatistics, sizeof(HOURLYSTATS));
ProtoList[i].AllStatistics[0].Hour = stNow.wHour;
@@ -179,10 +179,10 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA
if (!(pdi->item.mask & LVIF_TEXT)) return 0;
- // .
+ // Если нужна надпись.
if (!pdi->item.iSubItem) {
EldestAcc = Stat_GetEldestAcc(Stat_SelAcc);
- // !
+ // Индекс применим только для самого старого аккаунта!
Index = Stat_GetStartIndex(EldestAcc, unOptions.Stat_Tab, pdi->item.iItem, &st);
switch (unOptions.Stat_Tab) {
case 0: // Hourly
@@ -196,12 +196,12 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA
GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &st, nullptr, pdi->item.pszText, 32);
break;
case 2: // Weekly
- // .
+ // Уходим к первому понедельнику слева.
SystemTimeToVariantTime(&st, &vartime);
vartime -= DayOfWeek(st.wDay, st.wMonth, st.wYear) - 1;
VariantTimeToSystemTime(vartime, &st);
GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &st, nullptr, pdi->item.pszText, 32);
- // .
+ // Теперь к воскресенью.
SystemTimeToVariantTime(&st, &vartime);
vartime += 6;
VariantTimeToSystemTime(vartime, &st);
@@ -220,14 +220,14 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA
Value = Stat_GetItemValue(Stat_SelAcc, unOptions.Stat_Tab, pdi->item.iItem, pdi->item.iSubItem);
- // ListView .
+ // Теперь можно записать в ListView циферки.
switch (pdi->item.iSubItem) {
- case 1: //
- case 2: //
- case 3: //
+ case 1: // Входящий
+ case 2: // Исходящий
+ case 3: // Сумма
GetFormattedTraffic(Value, unOptions.Stat_Units, pdi->item.pszText, 32);
break;
- case 4: //
+ case 4: // Время
{
wchar_t *Fmt[5] = { L"m:ss", L"h:mm:ss", L"h:mm:ss", L"d hh:mm:ss", L"d hh:mm:ss" };
GetDurationFormatM(Value, Fmt[unOptions.Stat_Tab], pdi->item.pszText, 32);
@@ -257,10 +257,10 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA
LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lParam;
switch (lplvcd->nmcd.dwDrawStage) {
- case CDDS_PREPAINT: // ListView.
+ case CDDS_PREPAINT: // Перед началом рисования всего ListView.
SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, CDRF_NOTIFYITEMDRAW);
return TRUE;
- case CDDS_ITEMPREPAINT: // .
+ case CDDS_ITEMPREPAINT: // Перед началом рисования строки.
{
COLORREF Color;
BYTE r, g, b;
@@ -291,7 +291,7 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA
}
/*
- n.
+Функция читает статистику из файла для аккаунта с номером n.
*/
void Stat_ReadFile(BYTE n)
{
@@ -308,9 +308,9 @@ void Stat_ReadFile(BYTE n)
ProtoList[n].hFile = CreateFile(FileName, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ, nullptr, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);
GetFileSizeEx(ProtoList[n].hFile, &Size);
- if (Size.QuadPart != 0) // ...
+ if (Size.QuadPart != 0) // Если файл со статистикой существует и имеет ненулевой размер...
{
- // ...
+ // ...то читаем статистику из файла
ProtoList[n].NumberOfRecords = DWORD(Size.QuadPart / sizeof(HOURLYSTATS));
ProtoList[n].AllStatistics = (HOURLYSTATS*)mir_alloc(sizeof(HOURLYSTATS)*ProtoList[n].NumberOfRecords);
ReadFile(ProtoList[n].hFile, &ProtoList[n].AllStatistics[0], sizeof(HOURLYSTATS)*ProtoList[n].NumberOfRecords, &BytesRead, nullptr);
@@ -320,7 +320,7 @@ void Stat_ReadFile(BYTE n)
}
}
else {
- // .
+ // Необходимо создать новый файл.
ProtoList[n].NumberOfRecords = 1;
ProtoList[n].AllStatistics = (HOURLYSTATS*)mir_alloc(sizeof(HOURLYSTATS));
ProtoList[n].AllStatistics[0].Hour = stNow.wHour;
@@ -334,17 +334,17 @@ void Stat_ReadFile(BYTE n)
Stat_CheckStatistics(n);
}
-/* ListView .
-: hwndDialog - . */
+/* Функция готовит вывод в ListView статистики.
+Аргументы: hwndDialog - хэндл окна диалога. */
void Stat_Show(HWND hwndDialog)
{
DWORD MaxRecords;
- // .
+ // Нужно узнать количество записей.
MaxRecords = Stat_GetRecordsNumber(Stat_GetEldestAcc(Stat_SelAcc), unOptions.Stat_Tab);
- // ListView.
+ // Установим такое же количество строк в ListView.
SendDlgItemMessage(hwndDialog, IDC_LIST_DATA, LVM_SETITEMCOUNT, MaxRecords, 0);
- // .
+ // Надо показать самые свежие записи.
SendDlgItemMessage(hwndDialog, IDC_LIST_DATA, LVM_ENSUREVISIBLE, (WPARAM)(MaxRecords - 1), 0);
}
@@ -361,11 +361,11 @@ void Stat_UpdateTotalTraffic(HWND hwndDialog, DWORD Incoming, DWORD Outgoing)
}
/*
- n.
- , .
- ( ),
- .
- , .
+Функция сравнивает с текущим время последней записи в статистике для аккаунта с номером n.
+Если они совпадают, ничего не происходит.
+Если текущее время меньше времени последней записи (часы перевели назад),
+количество записей уменьшается на соответствующее количество часов.
+Если текущее время больше, в статистику включается необходимое количество пустых записей.
*/
void Stat_CheckStatistics(BYTE n)
{
@@ -381,15 +381,15 @@ void Stat_CheckStatistics(BYTE n)
GetLocalTime(&stNow);
d = TimeCompare(stNow, stLast);
- // ...
+ // Если текущее время совпадает со временем последней записи...
if (!d) {
- // ... .
+ // ...сохраняем запись в файл и уходим.
SetFilePointer(ProtoList[n].hFile, -LONG(sizeof(HOURLYSTATS)), nullptr, FILE_END);
WriteFile(ProtoList[n].hFile, &ProtoList[n].AllStatistics[ProtoList[n].NumberOfRecords - 1], sizeof(HOURLYSTATS), &q, nullptr);
return;
}
- // .
+ // Если часы перевели назад.
if (d < 0) {
do {
stLast.wHour--;
@@ -411,14 +411,14 @@ void Stat_CheckStatistics(BYTE n)
}
if (d > 0) {
- // .
+ // Сохраняем.
SetFilePointer(ProtoList[n].hFile, -LONG(sizeof(HOURLYSTATS)), nullptr, FILE_END);
WriteFile(ProtoList[n].hFile, &ProtoList[n].AllStatistics[ProtoList[n].NumberOfRecords - 1], sizeof(HOURLYSTATS), &q, nullptr);
- // , ( ).
+ // Последняя запись из статистики понадобится для вычисления новых записей, поэтому копируем её (кроме трафика и времени).
memcpy(&htTmp, &ProtoList[n].AllStatistics[ProtoList[n].NumberOfRecords - 1],
sizeof(HOURLYSTATS) - 2 * sizeof(DWORD) - sizeof(WORD));
- // .
+ // Счётчик времени каждый час должен начинать считать с нуля.
ProtoList[n].Total.TimeAtStart = GetTickCount() - stNow.wMilliseconds;
do {
@@ -441,7 +441,7 @@ void Stat_CheckStatistics(BYTE n)
stLast.wMonth = htTmp.Month;
stLast.wYear = htTmp.Year;
- // .
+ // Добавляем записи одновременно в ОЗУ и в файл.
WriteFile(ProtoList[n].hFile, &htTmp, sizeof(HOURLYSTATS), &q, nullptr);
memcpy(&ProtoList[n].AllStatistics[ProtoList[n].NumberOfRecords - 1], &htTmp, sizeof(HOURLYSTATS));
@@ -449,16 +449,16 @@ void Stat_CheckStatistics(BYTE n)
}
}
-/* , .
- .
-:
-ItemNumber - ListView ( ).
-stReq - , .
+/* Функция возращает индекс первой записи в статистике, относящейся к выбранному интервалу.
+При вычислении учитывается выбранный интервал и аккаунты.
+Аргументы:
+ItemNumber - номер строки в ListView (номер периода).
+stReq - дата, соответствующая вычисленному индексу.
*/
DWORD Stat_GetStartIndex(BYTE AccNum, BYTE Interval, DWORD ItemNumber, SYSTEMTIME *stReq)
{
- DWORD Left, Right, Probe; // ( ).
- SYSTEMTIME stProbe = { 0 }; // .
+ DWORD Left, Right, Probe; // Границы интервала для поиска (индексы статистики).
+ SYSTEMTIME stProbe = { 0 }; // Время тыка.
signed short int d = 1;
if (!ItemNumber) {
@@ -469,7 +469,7 @@ DWORD Stat_GetStartIndex(BYTE AccNum, BYTE Interval, DWORD ItemNumber, SYSTEMTIM
return 0;
}
- // , .
+ // Вычисляем время, соответствующее началу интервала.
for (Probe = 0, Left = 1; Left < ProtoList[AccNum].NumberOfRecords; Left++) {
switch (Interval) {
case STAT_INTERVAL_HOUR:
@@ -509,7 +509,7 @@ DWORD Stat_GetStartIndex(BYTE AccNum, BYTE Interval, DWORD ItemNumber, SYSTEMTIM
Left = 0; Right = ProtoList[AccNum].NumberOfRecords - 1;
- // .
+ // Вычисляем индекс начала интервала.
while (TRUE) {
if (Right - Left == 1) return Right;
Probe = (Left + Right) >> 1;
@@ -525,12 +525,12 @@ DWORD Stat_GetStartIndex(BYTE AccNum, BYTE Interval, DWORD ItemNumber, SYSTEMTIM
return Probe;
}
-/* ,
- ,
- . */
+/* Функция устанавливает величину сдвига для заданного аккаунта,
+то есть номер записи в статистике старейшего из выбранных аккаунтов,
+дата которой соответствует началу статистики указанного аккаунта. */
void Stat_SetAccShift(BYTE AccNum, BYTE EldestAccount)
{
- DWORD Left, Right, Probe = 0; // ( ).
+ DWORD Left, Right, Probe = 0; // Границы интервала для поиска (индексы статистики).
SYSTEMTIME stReq = { 0 }, stProbe;
signed short int d = 1;
@@ -544,7 +544,7 @@ void Stat_SetAccShift(BYTE AccNum, BYTE EldestAccount)
stReq.wMonth = ProtoList[AccNum].AllStatistics[0].Month;
stReq.wYear = ProtoList[AccNum].AllStatistics[0].Year;
- // .
+ // Вычисляем индекс начала интервала.
Left = 0; Right = ProtoList[EldestAccount].NumberOfRecords - 1;
while (TRUE) {
if (Right - Left == 1) {
@@ -564,13 +564,13 @@ void Stat_SetAccShift(BYTE AccNum, BYTE EldestAccount)
ProtoList[AccNum].Shift = Probe;
}
-/* ,
- ListView.
-:
-SelectedAccs - , ;
-Interval - ;
-ItemNum - ListVew;
-SubitemNum - , . */
+/* Функция вычисляет значение, соответствующее указанному подэлементу
+указанной строки ListView.
+Аргументы:
+SelectedAccs - слово, в котором единичные биты соответствуют выбранным аккаунтам;
+Interval - выбранный интервал;
+ItemNum - номер строки в ListVew;
+SubitemNum - номер колонки, определяет вид информации. */
DWORD Stat_GetItemValue(WORD SelectedAccs, BYTE Interval, DWORD ItemNum, BYTE SubItemNum)
{
@@ -592,29 +592,29 @@ DWORD Stat_GetItemValue(WORD SelectedAccs, BYTE Interval, DWORD ItemNum, BYTE Su
for (i = 0;;) {
if (IndexM >= 0)
switch (SubItemNum) {
- case 1: //
+ case 1: // Входящий
Result += ProtoList[a].AllStatistics[IndexM].Incoming;
break;
- case 2: //
+ case 2: // Исходящий
Result += ProtoList[a].AllStatistics[IndexM].Outgoing;
break;
- case 3: //
+ case 3: // Сумма
Result += ProtoList[a].AllStatistics[IndexM].Incoming
+ ProtoList[a].AllStatistics[IndexM].Outgoing;
break;
- case 4: //
+ case 4: // Время
Result += ProtoList[a].AllStatistics[IndexM].Time;
break;
}
- IndexM++; IndexP++; // .
+ IndexM++; IndexP++; // Переходим к следующей записи.
if (IndexM == ProtoList[a].NumberOfRecords)
break;
- // ?
+ // Когда остановиться?
switch (Interval) {
case STAT_INTERVAL_HOUR:
- i = 1; // .
+ i = 1; // Новый час начинается каждый час.
break;
case STAT_INTERVAL_DAY:
i = (0 == ProtoList[EldestAcc].AllStatistics[IndexP].Hour);
@@ -643,16 +643,16 @@ DWORD Stat_GetItemValue(WORD SelectedAccs, BYTE Interval, DWORD ItemNum, BYTE Su
return Result;
}
-/*
- . */
+/* Функция возвращает количество записей в статистике для
+заданного аккаунта и заданного интервала. */
DWORD Stat_GetRecordsNumber(BYTE AccNum, BYTE Interval)
{
DWORD Result, i;
- // .
+ // Нужно узнать количество записей.
switch (Interval) {
case STAT_INTERVAL_HOUR:
- Result = ProtoList[AccNum].NumberOfRecords; // .
+ Result = ProtoList[AccNum].NumberOfRecords; // Для почасовой статистики совпадает.
break;
case STAT_INTERVAL_DAY:
for (Result = 1, i = ProtoList[AccNum].NumberOfRecords - 1; i--;)
@@ -688,16 +688,16 @@ BYTE Stat_GetEldestAcc(WORD SelectedAccs)
{
BYTE Result, i;
- // , .
- // ( .)
+ // Узнаём номер аккаунта из числа выбранных, имеющего самую старую первую запись.
+ // (Это аккаунт с максимальным количеством записей.)
for (Result = i = 0; i < NumberOfAccounts; i++) {
- // - .
+ // Надо с чего-то начать поиск.
if (0x01 & (SelectedAccs >> i)) {
Result = i;
break;
}
}
- // .
+ // Продолжаем поиск.
for (; ++i < NumberOfAccounts;) {
if (0x01 & (SelectedAccs >> i) && (ProtoList[i].NumberOfRecords > ProtoList[Result].NumberOfRecords))
Result = i;
diff --git a/plugins/TrafficCounter/src/stdafx.h b/plugins/TrafficCounter/src/stdafx.h
index 2868dc3b87..edd4494e3a 100644
--- a/plugins/TrafficCounter/src/stdafx.h
+++ b/plugins/TrafficCounter/src/stdafx.h
@@ -65,53 +65,53 @@ typedef struct
typedef struct tagTimer
{
- DWORD TimeAtStart; // - .
- DWORD Timer; // .
+ DWORD TimeAtStart; // Время в момент запуска таймера - в миллисекундах.
+ DWORD Timer; // Количество секунд со времени запуска таймера.
} TIMER;
typedef struct
{
- char *name; // .
+ char *name; // Имя аккаунта.
- TIMER Session; // ( ).
- TIMER Total; // .
+ TIMER Session; // Таймер текущей сессии (протокол в онлайне).
+ TIMER Total; // Таймер общий.
- DWORD TotalRecvTraffic, // ( )
+ DWORD TotalRecvTraffic, // Общий трафик протокола (за выбранный период)
TotalSentTraffic,
- CurrentRecvTraffic, // ( )
+ CurrentRecvTraffic, // Текущий трафик протокола (за сессию)
CurrentSentTraffic;
union
{
BYTE Flags;
struct
{
- unsigned int Reserv0:1; // - .
- unsigned int Visible:1; // = 1 -
- unsigned int Enabled:1; // = 1 -
- unsigned int State:1; // = 1 -
+ unsigned int Reserv0:1; // Активность потеряла смысл - статистика ведётся по всем аккаунтам.
+ unsigned int Visible:1; // = 1 - аккаунт будет показываться во фрейме счётчиков
+ unsigned int Enabled:1; // = 1 - аккаунт включен и не прячется
+ unsigned int State:1; // = 1 - аккаунт сейчас онлайн
unsigned int Reserv1:3;
};
};
- // 0.1.1.0.
- DWORD NumberOfRecords; // .
- HOURLYSTATS *AllStatistics; // .
- HANDLE hFile; // .
+ // Добавлено в версии 0.1.1.0.
+ DWORD NumberOfRecords; // Количество часов в общей статистике.
+ HOURLYSTATS *AllStatistics; // Полная статистика вместе со статистикой онлайна.
+ HANDLE hFile; // Файл с сохранённой статистикой данного протокола.
- DWORD StartIndex; // , .
- DWORD StartIncoming; // .
- DWORD StartOutgoing; // .
+ DWORD StartIndex; // Номер записи в статистике, бывший актуальным на момент запуска.
+ DWORD StartIncoming; // Значение входящего трафика на момент запуска.
+ DWORD StartOutgoing; // Значение исходящего трафика на момент запуска.
// 0.1.1.5.
- DWORD Shift; // ,
- // .
+ DWORD Shift; // Номер записи в статистике старейшего выбранного аккаунта,
+ // дата которой соответствует началу статистики данного аккаунта.
// 0.1.1.6
- wchar_t *tszAccountName; // .
+ wchar_t *tszAccountName; // Человеческое имя аккаунта для использования в графическом интерфейсе.
} PROTOLIST;
//---------------------------------------------------------------------------------------------
-//
+// Различные флаги
//---------------------------------------------------------------------------------------------
typedef union
{
@@ -166,7 +166,7 @@ extern COLORREF KeyColor;
extern HGENMENU hTrafficMainMenuItem;
extern WORD Stat_SelAcc;
-extern OPTTREE_OPTION *pOptions; // TrafficCounter.c.
+extern OPTTREE_OPTION *pOptions; // Объявлено в модуле TrafficCounter.c.
extern PROTOLIST OverallInfo;
#endif
diff --git a/plugins/TrafficCounter/src/vars.cpp b/plugins/TrafficCounter/src/vars.cpp
index b7df5fb1ba..fdbb22892b 100644
--- a/plugins/TrafficCounter/src/vars.cpp
+++ b/plugins/TrafficCounter/src/vars.cpp
@@ -17,8 +17,8 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* ======================================================================================
- Variables
-: Mironych
+Здесь содержатся функции для поддержки плагина Variables
+Автор: Mironych
=======================================================================================*/
#include "stdafx.h"
@@ -50,7 +50,7 @@ static wchar_t* GetTraffic(ARGUMENTSINFO *ai)
}
}
else
- { // ,
+ { // Ищем индекс протокола, переданного первым аргументом
for (tmp = ed = 0; ed < NumberOfAccounts; ed++)
{
if (!ProtoList[ed].name) continue;
@@ -61,7 +61,7 @@ static wchar_t* GetTraffic(ARGUMENTSINFO *ai)
tmprn = ProtoList[ed].CurrentRecvTraffic;
tmpst = ProtoList[ed].TotalSentTraffic;
tmprt = ProtoList[ed].TotalRecvTraffic;
- tmp = 0xAA; // ,
+ tmp = 0xAA; // Признак того, что протокол был найден
}
mir_free(buf);
}
@@ -98,8 +98,8 @@ static wchar_t* GetTraffic(ARGUMENTSINFO *ai)
if (!mir_wstrcmp(ai->targv[4], L"d")) ed = 3;
else return nullptr;
- // .
- // .
+ // Получаем форматированную строку и возвращаем указатель на неё.
+ // Сначала узнаем размер буфера.
size_t l = GetFormattedTraffic(tmp, ed, nullptr, 0);
wchar_t *res = (wchar_t*)mir_alloc(l * sizeof(wchar_t));
if (!res) return nullptr;
@@ -117,7 +117,7 @@ static wchar_t* GetTime(ARGUMENTSINFO *ai)
if (ai->argc != 4) return nullptr;
- // ,
+ // Ищем индекс протокола, переданного первым аргументом
for (flag = ed = 0; ed < NumberOfAccounts; ed++)
{
wchar_t *buf;
@@ -147,8 +147,8 @@ static wchar_t* GetTime(ARGUMENTSINFO *ai)
if (flag != 0xAA) return nullptr;
- // .
- // .
+ // Получаем форматированную строку и возвращаем указатель на неё.
+ // Сначала узнаем размер буфера.
size_t l = GetDurationFormatM(Duration, ai->targv[3], nullptr, 0);
wchar_t *res = (wchar_t*)mir_alloc(l * sizeof(wchar_t));
if (!res) return nullptr;
@@ -166,14 +166,14 @@ void RegisterVariablesTokens(void)
memset(&trs, 0, sizeof(trs));
trs.cbSize = sizeof(TOKENREGISTER);
- // ,
+ // Функция, возвращающая трафик
trs.tszTokenString = L"tc_GetTraffic";
trs.parseFunctionT = GetTraffic;
trs.szHelpText = "Traffic counter\t(A,B,C,D)\tGet traffic counter value. A: <ProtocolName> OR overall OR summary; B: now OR total; C: sent OR received OR both; D: b - in bytes, k - in kilobytes, m - in megabytes, d - dynamic";
trs.flags = TRF_TCHAR | TRF_PARSEFUNC | TRF_FUNCTION | TRF_FREEMEM;
trs.memType = TR_MEM_MIRANDA;
CallService(MS_VARS_REGISTERTOKEN, 0, (LPARAM)&trs);
- // ,
+ // Функция, возвращающая время
trs.tszTokenString = L"tc_GetTime";
trs.parseFunctionT = GetTime;
trs.szHelpText = "Traffic counter\t(A,B,C)\tGet time counter value. A: <ProtocolName> OR summary; B: now OR total; C: format";
diff --git a/plugins/TrafficCounter/src/version.h b/plugins/TrafficCounter/src/version.h
index 1b0394a143..46154c826f 100644
--- a/plugins/TrafficCounter/src/version.h
+++ b/plugins/TrafficCounter/src/version.h
@@ -11,4 +11,4 @@
#define __AUTHOR "Ghost, Mironych"
#define __AUTHOREMAIL ""
#define __AUTHORWEB "https://miranda-ng.org/p/TrafficCounter/"
-#define __COPYRIGHT " 2002-2006 Ghost, 2007-2012 Mironych"
+#define __COPYRIGHT "© 2002-2006 Ghost, 2007-2012 Mironych"