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"