summaryrefslogtreecommitdiff
path: root/plugins/CmdLine/src/mimcmd_handlers.cpp
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2018-02-16 22:07:43 +0200
committerGeorge Hazan <ghazan@miranda.im>2018-02-16 22:08:26 +0200
commit8d127430d057891fbd3ac5989d32090715d7923a (patch)
tree2c02b3401ca7a583302730161c3e11ec9607c1f4 /plugins/CmdLine/src/mimcmd_handlers.cpp
parent9cde0c92420f4811a646964c1304f7c55f8a50a5 (diff)
fixes #1143 (CmdLine Plugin error when using Diacritics in message)
Diffstat (limited to 'plugins/CmdLine/src/mimcmd_handlers.cpp')
-rw-r--r--plugins/CmdLine/src/mimcmd_handlers.cpp778
1 files changed, 344 insertions, 434 deletions
diff --git a/plugins/CmdLine/src/mimcmd_handlers.cpp b/plugins/CmdLine/src/mimcmd_handlers.cpp
index 039b4c76bc..10caca7621 100644
--- a/plugins/CmdLine/src/mimcmd_handlers.cpp
+++ b/plugins/CmdLine/src/mimcmd_handlers.cpp
@@ -38,46 +38,43 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define VALUE_STRING 4
#define VALUE_WIDE 5
-__inline static int matches(char *command, char *lower)
+__inline static int matches(const wchar_t *command, const wchar_t *lower)
{
- return ((mir_strcmp(lower, command) == 0) || (mir_strcmp(lower, Translate(command)) == 0));
+ return ((mir_wstrcmp(lower, command) == 0) || (mir_wstrcmp(lower, TranslateW(command)) == 0));
}
-int Get2StateValue(char *state)
+int Get2StateValue(wchar_t *state)
{
- char lower[512];
- strncpy_s(lower, state, sizeof(lower));
- _strlwr(lower);
+ wchar_t lower[512];
+ wcsncpy_s(lower, state, _countof(lower));
+ _wcslwr(lower);
//if ((mir_strcmp(lower, "enable") == 0) || (mir_strcmp(lower, "show") == 0) || (mir_strcmp(lower, "on") == 0))
- if ((matches("enable", lower)) || (matches("show", lower)) || (matches("on", lower))) {
+ if ((matches(L"enable", lower)) || (matches(L"show", lower)) || (matches(L"on", lower)))
return STATE_ON;
- }
//if ((mir_strcmp(lower, "disable") == 0) || (mir_strcmp(lower, "hide") == 0) || (mir_strcmp(lower, "off") == 0))
- if ((matches("disable", lower)) || (matches("hide", lower)) || (matches("off", lower))) {
+ if ((matches(L"disable", lower)) || (matches(L"hide", lower)) || (matches(L"off", lower)))
return STATE_OFF;
- }
//if (mir_strcmp(lower, "toggle") == 0)
- if (matches("toggle", lower)) {
+ if (matches(L"toggle", lower))
return STATE_TOGGLE;
- }
return STATE_UNKNOWN;
}
-int AccountName2Protocol(const char *accountName, OUT char *uniqueProtocolName, size_t length)
+int AccountName2Protocol(const wchar_t *accountName, OUT char *uniqueProtocolName, size_t length)
{
int count;
PROTOACCOUNT **accounts = nullptr;
Proto_EnumAccounts(&count, &accounts);
- strncpy_s(uniqueProtocolName, length, accountName, _TRUNCATE);
+ strncpy_s(uniqueProtocolName, length, _T2A(accountName), _TRUNCATE);
for (int i = 0; i < count; i++) {
if (accounts[i]->bIsEnabled) {
- if (_stricmp(accountName, _T2A(accounts[i]->tszAccountName)) == 0) {
+ if (_wcsicmp(accountName, accounts[i]->tszAccountName) == 0) {
strncpy_s(uniqueProtocolName, length, accounts[i]->szModuleName, _TRUNCATE);
return 0;
}
@@ -90,37 +87,32 @@ int AccountName2Protocol(const char *accountName, OUT char *uniqueProtocolName,
void HandleWrongParametersCount(PCommand command, PReply reply)
{
reply->code = MIMRES_WRONGPARAMSCOUNT;
- mir_snprintf(reply->message, Translate("Wrong number of parameters for command '%s'."), command->command);
+ mir_snwprintf(reply->message, TranslateT("Wrong number of parameters for command '%s'."), command->command);
}
-void HandleUnknownParameter(PCommand command, char *param, PReply reply)
+void HandleUnknownParameter(PCommand command, wchar_t *param, PReply reply)
{
reply->code = MIMRES_UNKNOWNPARAM;
- mir_snprintf(reply->message, Translate("Unknown parameter '%s' for command '%s'."), param, command->command);
+ mir_snwprintf(reply->message, TranslateT("Unknown parameter '%s' for command '%s'."), param, command->command);
}
-int ParseValueParam(char *param, void *&result)
+int ParseValueParam(wchar_t *param, void *&result)
{
- if (mir_strlen(param) > 0) {
+ if (mir_wstrlen(param) > 0) {
switch (*param) {
case 's':
{
- size_t len = mir_strlen(param); //- 1 + 1
- result = (char*)malloc(len * sizeof(char));
- strcpy((char*)result, param + 1);
+ size_t len = mir_wstrlen(param); //- 1 + 1
+ result = malloc(len * sizeof(char));
+ strcpy((char*)result, _T2A(param + 1));
return VALUE_STRING;
}
case 'w':
{
- size_t len = mir_strlen(param);
+ size_t len = mir_wstrlen(param);
result = (WCHAR *)malloc(len * sizeof(WCHAR));
- char *buffer = (char*)malloc(len * sizeof(WCHAR));
- strncpy_s(buffer, len, param + 1, _TRUNCATE);
-
- MultiByteToWideChar(CP_ACP, 0, buffer, -1, (WCHAR *)result, (int)len);
-
- free(buffer);
+ wcsncpy_s((wchar_t*)result, len, param + 1, _TRUNCATE);
return VALUE_WIDE;
}
@@ -128,8 +120,8 @@ int ParseValueParam(char *param, void *&result)
{
result = (char *)malloc(sizeof(char));
- char *stop;
- long tmp = strtol(param + 1, &stop, 10);
+ wchar_t *stop;
+ long tmp = wcstol(param + 1, &stop, 10);
*((char *)result) = tmp;
return (*stop == 0) ? VALUE_BYTE : VALUE_ERROR;
@@ -138,9 +130,9 @@ int ParseValueParam(char *param, void *&result)
case 'i':
{
result = (int *)malloc(sizeof(int));
- char *stop;
+ wchar_t *stop;
- long tmp = strtol(param + 1, &stop, 10);
+ long tmp = wcstol(param + 1, &stop, 10);
*((int *)result) = tmp;
return (*stop == 0) ? VALUE_WORD : VALUE_ERROR;
@@ -149,11 +141,12 @@ int ParseValueParam(char *param, void *&result)
case 'd':
{
result = (long *)malloc(sizeof(long));
- char *stop;
- *((long *)result) = strtol(param + 1, &stop, 10);
+ wchar_t *stop;
+ *((long *)result) = wcstol(param + 1, &stop, 10);
return (*stop == 0) ? VALUE_DWORD : VALUE_ERROR;
}
+
default:
return VALUE_UNKNOWN;
}
@@ -161,40 +154,39 @@ int ParseValueParam(char *param, void *&result)
else return VALUE_ERROR;
}
-int ParseStatusParam(char *status)
+int ParseStatusParam(const wchar_t *status)
{
- char *lower = NEWSTR_ALLOCA(status);
- _strlwr(lower);
+ wchar_t *lower = NEWWSTR_ALLOCA(status);
+ CharLower(lower);
- if (!mir_strcmp(lower, "offline"))
+ if (!mir_wstrcmp(lower, L"offline"))
return ID_STATUS_OFFLINE;
- else if (!mir_strcmp(lower, "online"))
+ if (!mir_wstrcmp(lower, L"online"))
return ID_STATUS_ONLINE;
- else if (!mir_strcmp(lower, "away"))
+ if (!mir_wstrcmp(lower, L"away"))
return ID_STATUS_AWAY;
- else if (!mir_strcmp(lower, "dnd"))
+ if (!mir_wstrcmp(lower, L"dnd"))
return ID_STATUS_DND;
- else if (!mir_strcmp(lower, "na"))
+ if (!mir_wstrcmp(lower, L"na"))
return ID_STATUS_NA;
- else if (!mir_strcmp(lower, "occupied"))
+ if (!mir_wstrcmp(lower, L"occupied"))
return ID_STATUS_OCCUPIED;
- else if (!mir_strcmp(lower, "freechat"))
+ if (!mir_wstrcmp(lower, L"freechat"))
return ID_STATUS_FREECHAT;
- else if (!mir_strcmp(lower, "invisible"))
+ if (!mir_wstrcmp(lower, L"invisible"))
return ID_STATUS_INVISIBLE;
- else if (!mir_strcmp(lower, "onthephone"))
+ if (!mir_wstrcmp(lower, L"onthephone"))
return ID_STATUS_ONTHEPHONE;
- else if (!mir_strcmp(lower, "outtolunch"))
+ if (!mir_wstrcmp(lower, L"outtolunch"))
return ID_STATUS_OUTTOLUNCH;
- else
- return 0;
+ return 0;
}
-char *PrettyStatusMode(int status, char *buffer, int size)
+wchar_t* PrettyStatusMode(int status, wchar_t *buffer, size_t size)
{
wchar_t *data = pcli->pfnGetStatusModeDescription(status, 0);
if (data)
- strncpy_s(buffer, size, _T2A(data), _TRUNCATE);
+ wcsncpy_s(buffer, size, data, _TRUNCATE);
else
*buffer = 0;
@@ -207,102 +199,95 @@ void HandleStatusCommand(PCommand command, TArgument *argv, int argc, PReply rep
case 2:
{
INT_PTR status = CallService(MS_CLIST_GETSTATUSMODE, 0, 0);
- char pretty[128];
- PrettyStatusMode(status, pretty, sizeof(pretty));
+ wchar_t pretty[128];
+ PrettyStatusMode(status, pretty, _countof(pretty));
- CMStringA perAccountStatus;
+ CMStringW perAccountStatus;
int count;
PROTOACCOUNT **accounts = nullptr;
Proto_EnumAccounts(&count, &accounts);
- char pn[128];
+ wchar_t pn[128];
for (int i = 0; i < count; i++) {
if (accounts[i]->bIsEnabled) {
status = CallProtoService(accounts[i]->szModuleName, PS_GETSTATUS, 0, 0);
- PrettyStatusMode(status, pn, sizeof(pn));
+ PrettyStatusMode(status, pn, _countof(pn));
perAccountStatus.AppendChar('\n');
- perAccountStatus.Append(_T2A(accounts[i]->tszAccountName));
- perAccountStatus.Append(": ");
+ perAccountStatus.Append(accounts[i]->tszAccountName);
+ perAccountStatus.Append(L": ");
perAccountStatus.Append(pn);
}
}
reply->code = MIMRES_SUCCESS;
- mir_snprintf(reply->message, Translate("Current global status: %s.%s"), pretty, perAccountStatus.c_str());
-
- return;
+ mir_snwprintf(reply->message, TranslateT("Current global status: %s.%s"), pretty, perAccountStatus.c_str());
}
+ return;
case 3:
{
int status = ParseStatusParam(argv[2]);
if (status) {
INT_PTR old = CallService(MS_CLIST_GETSTATUSMODE, 0, 0);
- char po[128];
+ wchar_t po[128];
if (ServiceExists(MS_KS_ANNOUNCESTATUSCHANGE)) {
announce_status_change(nullptr, status, nullptr);
}
- PrettyStatusMode(old, po, sizeof(po));
+ PrettyStatusMode(old, po, _countof(po));
Clist_SetStatusMode(status);
- char pn[128];
- PrettyStatusMode(status, pn, sizeof(pn));
+ wchar_t pn[128];
+ PrettyStatusMode(status, pn, _countof(pn));
reply->code = MIMRES_SUCCESS;
- mir_snprintf(reply->message, Translate("Changed global status to '%s' (previous status was '%s')."), pn, po);
- }
- else {
- HandleUnknownParameter(command, argv[2], reply);
+ mir_snwprintf(reply->message, TranslateT("Changed global status to '%s' (previous status was '%s')."), pn, po);
}
-
- return;
+ else HandleUnknownParameter(command, argv[2], reply);
}
+ return;
case 4:
{
int status = ParseStatusParam(argv[2]);
if (status) {
char protocol[128];
- char *account = argv[3];
- AccountName2Protocol(account, protocol, sizeof(protocol));
+ wchar_t *account = argv[3];
+ AccountName2Protocol(account, protocol, _countof(protocol));
INT_PTR old = CallProtoService(protocol, PS_GETSTATUS, 0, 0);
- char po[128];
+ wchar_t po[128];
if (ServiceExists(MS_KS_ANNOUNCESTATUSCHANGE)) {
announce_status_change(protocol, status, nullptr);
}
- PrettyStatusMode(old, po, sizeof(po));
+ PrettyStatusMode(old, po, _countof(po));
INT_PTR res = CallProtoService(protocol, PS_SETSTATUS, status, 0);
- char pn[128];
- PrettyStatusMode(status, pn, sizeof(pn));
+ wchar_t pn[128];
+ PrettyStatusMode(status, pn, _countof(pn));
switch (res) {
case 0:
reply->code = MIMRES_SUCCESS;
- mir_snprintf(reply->message, Translate("Changed '%s' status to '%s' (previous status was '%s')."), account, pn, po);
+ mir_snwprintf(reply->message, TranslateT("Changed '%s' status to '%s' (previous status was '%s')."), account, pn, po);
return;
case CALLSERVICE_NOTFOUND:
reply->code = MIMRES_FAILURE;
- mir_snprintf(reply->message, Translate("'%s' doesn't seem to be a valid account."), account);
+ mir_snwprintf(reply->message, TranslateT("'%s' doesn't seem to be a valid account."), account);
return;
default:
reply->code = MIMRES_FAILURE;
- mir_snprintf(reply->message, Translate("Failed to change status for account '%s' to '%s'."), account, pn);
+ mir_snwprintf(reply->message, TranslateT("Failed to change status for account '%s' to '%s'."), account, pn);
return;
}
}
- else {
- HandleUnknownParameter(command, argv[2], reply);
- }
-
- return;
+ else HandleUnknownParameter(command, argv[2], reply);
}
+ return;
default:
HandleWrongParametersCount(command, reply);
@@ -314,58 +299,53 @@ void HandleAwayMsgCommand(PCommand command, TArgument *argv, int argc, PReply re
switch (argc) {
case 3:
{
- char *awayMsg = argv[2];
+ wchar_t *awayMsg = argv[2];
int count = 0;
PROTOACCOUNT **accounts = nullptr;
Proto_EnumAccounts(&count, &accounts);
- CMStringA szReply;
- int i;
- INT_PTR status;
- INT_PTR res = 0;
- char *protocol;
- char pn[128];
- for (i = 0; i < count; i++) {
+ CMStringW szReply;
+ for (int i = 0; i < count; i++) {
if (!accounts[i]->bIsEnabled)
continue;
if (i != 0)
szReply.AppendChar('\n');
- protocol = accounts[i]->szModuleName;
- if ((CallProtoService(protocol, PS_GETCAPS, PFLAGNUM_1, 0) & PF1_MODEMSGSEND) != 0) //if the protocol supports away messages
- {
- status = CallProtoService(protocol, PS_GETSTATUS, 0, 0);
- ptrW wszAwayMsg(mir_a2u(awayMsg));
- res = CallProtoService(protocol, PS_SETAWAYMSG, status, wszAwayMsg);
- PrettyStatusMode(status, pn, sizeof(pn));
+ char *protocol = accounts[i]->szModuleName;
+ if ((CallProtoService(protocol, PS_GETCAPS, PFLAGNUM_1, 0) & PF1_MODEMSGSEND) != 0) { //if the protocol supports away messages
+ INT_PTR status = CallProtoService(protocol, PS_GETSTATUS, 0, 0);
+ INT_PTR res = CallProtoService(protocol, PS_SETAWAYMSG, status, (LPARAM)awayMsg);
+
+ wchar_t pn[128];
+ PrettyStatusMode(status, pn, _countof(pn));
if (res)
- szReply.AppendFormat(Translate("Failed to set '%S' status message to '%s' (status is '%s')."), accounts[i]->tszAccountName, awayMsg, pn);
+ szReply.AppendFormat(TranslateT("Failed to set '%s' status message to '%s' (status is '%s')."), accounts[i]->tszAccountName, awayMsg, pn);
else
- szReply.AppendFormat(Translate("Successfully set '%S' status message to '%s' (status is '%s')."), accounts[i]->tszAccountName, awayMsg, pn);
+ szReply.AppendFormat(TranslateT("Successfully set '%s' status message to '%s' (status is '%s')."), accounts[i]->tszAccountName, awayMsg, pn);
}
- else szReply.AppendFormat(Translate("Account '%S' does not support away messages, skipping."), accounts[i]->tszAccountName);
+ else szReply.AppendFormat(TranslateT("Account '%s' does not support away messages, skipping."), accounts[i]->tszAccountName);
}
- strncpy_s(reply->message, szReply, _TRUNCATE);
+ wcsncpy_s(reply->message, szReply, _TRUNCATE);
reply->code = MIMRES_SUCCESS;
return;
}
case 4:
{
- char *awayMsg = argv[2];
+ wchar_t *awayMsg = argv[2];
char protocol[128];
- char *account = argv[3];
- AccountName2Protocol(account, protocol, sizeof(protocol));
+ wchar_t *account = argv[3];
+ AccountName2Protocol(account, protocol, _countof(protocol));
- char pn[128];
+ wchar_t pn[128];
INT_PTR res = CallProtoService(protocol, PS_GETCAPS, PFLAGNUM_1, 0);
if ((res & PF1_MODEMSGSEND) != 0) //if the protocol supports away messages
{
INT_PTR status = CallProtoService(protocol, PS_GETSTATUS, 0, 0);
res = CallProtoService(protocol, PS_SETAWAYMSG, status, (LPARAM)awayMsg);
- PrettyStatusMode(status, pn, sizeof(pn));
+ PrettyStatusMode(status, pn, _countof(pn));
}
else if (CallProtoService(protocol, PS_GETSTATUS, 0, 0) == CALLSERVICE_NOTFOUND) {
res = CALLSERVICE_NOTFOUND;
@@ -377,22 +357,22 @@ void HandleAwayMsgCommand(PCommand command, TArgument *argv, int argc, PReply re
switch (res) {
case 0:
reply->code = MIMRES_SUCCESS;
- mir_snprintf(reply->message, Translate("Changed '%s' status message to '%s' (status is '%s')."), account, awayMsg, pn);
+ mir_snwprintf(reply->message, TranslateT("Changed '%s' status message to '%s' (status is '%s')."), account, awayMsg, pn);
return;
case CALLSERVICE_NOTFOUND:
reply->code = MIMRES_FAILURE;
- mir_snprintf(reply->message, Translate("'%s' doesn't seem to be a valid account."), account);
+ mir_snwprintf(reply->message, TranslateT("'%s' doesn't seem to be a valid account."), account);
return;
case -2:
reply->code = MIMRES_FAILURE;
- mir_snprintf(reply->message, Translate("Account '%s' does not support away messages, skipping."), account);
+ mir_snwprintf(reply->message, TranslateT("Account '%s' does not support away messages, skipping."), account);
return;
default:
reply->code = MIMRES_FAILURE;
- mir_snprintf(reply->message, Translate("Failed to change status message for account '%s' to '%s' (status is '%s')."), account, awayMsg, pn);
+ mir_snwprintf(reply->message, TranslateT("Failed to change status message for account '%s' to '%s' (status is '%s')."), account, awayMsg, pn);
return;
}
}
@@ -402,26 +382,26 @@ void HandleAwayMsgCommand(PCommand command, TArgument *argv, int argc, PReply re
}
}
-void Set2StateReply(PReply reply, int state, int failure, char *successTrue, char *failureTrue, char *successFalse, char *failureFalse)
+void Set2StateReply(PReply reply, int state, int failure, wchar_t *successTrue, wchar_t *failureTrue, wchar_t *successFalse, wchar_t *failureFalse)
{
if (state) {
if (failure) {
reply->code = MIMRES_FAILURE;
- mir_snprintf(reply->message, Translate(failureTrue));
+ mir_snwprintf(reply->message, TranslateW(failureTrue));
}
else {
reply->code = MIMRES_SUCCESS;
- mir_snprintf(reply->message, Translate(successTrue));
+ mir_snwprintf(reply->message, TranslateW(successTrue));
}
}
else {
if (failure) {
reply->code = MIMRES_FAILURE;
- mir_snprintf(reply->message, Translate(failureFalse));
+ mir_snwprintf(reply->message, TranslateW(failureFalse));
}
else {
reply->code = MIMRES_SUCCESS;
- mir_snprintf(reply->message, Translate(successFalse));
+ mir_snwprintf(reply->message, TranslateW(successFalse));
}
}
}
@@ -432,8 +412,7 @@ void HandlePopupsCommand(PCommand command, TArgument *argv, int argc, PReply rep
case 2:
{
int state = CallService(MS_POPUP_QUERY, PUQS_GETSTATUS, 0);
- Set2StateReply(reply, state, 0, LPGEN("Popups are currently enabled."), "", LPGEN("Popups are currently disabled."), "");
-
+ Set2StateReply(reply, state, 0, LPGENW("Popups are currently enabled."), L"", LPGENW("Popups are currently disabled."), L"");
return;
}
@@ -464,8 +443,8 @@ void HandlePopupsCommand(PCommand command, TArgument *argv, int argc, PReply rep
return;
}
- Set2StateReply(reply, state, failure, LPGEN("Popups were enabled successfully."), LPGEN("Popups could not be enabled."),
- LPGEN("Popups were disabled successfully."), LPGEN("Popups could not be disabled."));
+ Set2StateReply(reply, state, failure, LPGENW("Popups were enabled successfully."), LPGENW("Popups could not be enabled."),
+ LPGENW("Popups were disabled successfully."), LPGENW("Popups could not be disabled."));
return;
}
@@ -481,7 +460,7 @@ void HandleSoundsCommand(PCommand command, TArgument *argv, int argc, PReply rep
case 2:
{
int state = db_get_b(NULL, "Skin", "UseSound", 1);
- Set2StateReply(reply, state, 0, LPGEN("Sounds are currently enabled."), "", LPGEN("Sounds are currently disabled."), "");
+ Set2StateReply(reply, state, 0, LPGENW("Sounds are currently enabled."), L"", LPGENW("Sounds are currently disabled."), L"");
return;
}
@@ -511,7 +490,7 @@ void HandleSoundsCommand(PCommand command, TArgument *argv, int argc, PReply rep
return;
}
- Set2StateReply(reply, state, 0, LPGEN("Sounds were enabled successfully."), "", LPGEN("Sounds were disabled successfully."), "");
+ Set2StateReply(reply, state, 0, LPGENW("Sounds were enabled successfully."), L"", LPGENW("Sounds were disabled successfully."), L"");
return;
}
@@ -527,7 +506,7 @@ void HandleClistCommand(PCommand command, TArgument *argv, int argc, PReply repl
case 2:
{
int state = IsWindowVisible(pcli->hwndContactList);
- Set2StateReply(reply, state, 0, LPGEN("Contact list is currently shown."), "", LPGEN("Contact list is currently hidden."), "");
+ Set2StateReply(reply, state, 0, LPGENW("Contact list is currently shown."), L"", LPGENW("Contact list is currently hidden."), L"");
return;
}
@@ -535,45 +514,29 @@ void HandleClistCommand(PCommand command, TArgument *argv, int argc, PReply repl
case 3:
{
int state = 0;
- HWND hClist = pcli->hwndContactList;
switch (Get2StateValue(argv[2])) {
case STATE_ON:
- {
- ShowWindow(hClist, SW_SHOW);
-
- state = TRUE;
-
- break;
- }
+ ShowWindow(pcli->hwndContactList, SW_SHOW);
+ state = TRUE;
+ break;
case STATE_OFF:
- {
- ShowWindow(hClist, SW_HIDE);
- state = FALSE;
-
- break;
- }
+ ShowWindow(pcli->hwndContactList, SW_HIDE);
+ state = FALSE;
+ break;
case STATE_TOGGLE:
- {
- state = IsWindowVisible(hClist);
-
- state = 1 - state;
- ShowWindow(hClist, (state) ? SW_SHOW : SW_HIDE);
-
- break;
- }
+ state = !IsWindowVisible(pcli->hwndContactList);
+ ShowWindow(pcli->hwndContactList, (state) ? SW_SHOW : SW_HIDE);
+ break;
default:
HandleUnknownParameter(command, argv[2], reply);
return;
}
-
- Set2StateReply(reply, state, 0, LPGEN("Contact list was shown successfully."), "",
- LPGEN("Contact list was hidden successfully."), "");
-
+ Set2StateReply(reply, state, 0, LPGENW("Contact list was shown successfully."), L"", LPGENW("Contact list was hidden successfully."), L"");
return;
}
@@ -589,30 +552,28 @@ void HandleQuitCommand(PCommand command, TArgument *argv, int argc, PReply reply
{
CallService("CloseAction", 0, 0);
- //try another quit method
- HWND hWndMiranda = pcli->hwndContactList;
- PostMessage(hWndMiranda, WM_COMMAND, ID_ICQ_EXIT, 0);
+ // try another quit method
+ PostMessage(pcli->hwndContactList, WM_COMMAND, ID_ICQ_EXIT, 0);
reply->code = MIMRES_SUCCESS;
- mir_snprintf(reply->message, Translate("Issued a quit command."));
+ mir_snwprintf(reply->message, TranslateT("Issued a quit command."));
break;
}
case 3:
{
- char lower[128];
- strncpy_s(lower, argv[2], sizeof(lower));
- _strlwr(lower);
+ wchar_t lower[128];
+ wcsncpy_s(lower, argv[2], _countof(lower));
+ _wcslwr(lower);
- if (mir_strcmp(lower, "wait") == 0) {
+ if (mir_wstrcmp(lower, L"wait") == 0) {
CallService("CloseAction", 0, 0);
//try another quit method
- HWND hWndMiranda = pcli->hwndContactList;
- PostMessage(hWndMiranda, WM_COMMAND, ID_ICQ_EXIT, 0);
+ PostMessage(pcli->hwndContactList, WM_COMMAND, ID_ICQ_EXIT, 0);
reply->code = MIMRES_SUCCESS;
- mir_snprintf(reply->message, Translate("Issued a quit and wait command."));
+ mir_snwprintf(reply->message, TranslateT("Issued a quit and wait command."));
SetEvent(heServerBufferFull);
@@ -622,9 +583,7 @@ void HandleQuitCommand(PCommand command, TArgument *argv, int argc, PReply reply
Sleep(250); //wait for Miranda to quit.
}
}
- else {
- HandleUnknownParameter(command, argv[2], reply);
- }
+ else HandleUnknownParameter(command, argv[2], reply);
break;
}
@@ -639,23 +598,21 @@ void HandleExchangeCommand(PCommand command, TArgument *argv, int argc, PReply r
switch (argc) {
case 3:
{
- char lower[128];
- strncpy_s(lower, argv[2], sizeof(lower));
- _strlwr(lower);
- if (mir_strcmp(lower, "check") == 0) {
+ wchar_t lower[128];
+ wcsncpy_s(lower, argv[2], _countof(lower));
+ _wcslwr(lower);
+ if (mir_wstrcmp(lower, L"check") == 0) {
INT_PTR ret = CallService(MS_EXCHANGE_CHECKEMAIL, 0, 0);
if (ret != CALLSERVICE_NOTFOUND) {
reply->code = MIMRES_SUCCESS;
- mir_snprintf(reply->message, Translate("Issued check email command to Exchange plugin."));
+ mir_snwprintf(reply->message, TranslateT("Issued check email command to Exchange plugin."));
}
else {
reply->code = MIMRES_FAILURE;
- mir_snprintf(reply->message, Translate("Exchange plugin is not running."));
+ mir_snwprintf(reply->message, TranslateT("Exchange plugin is not running."));
}
}
- else {
- HandleUnknownParameter(command, argv[2], reply);
- }
+ else HandleUnknownParameter(command, argv[2], reply);
return;
}
@@ -670,19 +627,19 @@ void HandleYAMNCommand(PCommand command, TArgument *argv, int argc, PReply reply
switch (argc) {
case 3:
{
- char lower[128];
- strncpy_s(lower, argv[2], sizeof(lower));
- _strlwr(lower);
- if (mir_strcmp(lower, "check") == 0) {
+ wchar_t lower[128];
+ wcsncpy_s(lower, argv[2], _countof(lower));
+ _wcslwr(lower);
+ if (mir_wstrcmp(lower, L"check") == 0) {
if (ServiceExists(MS_YAMN_FORCECHECK)) {
CallService(MS_YAMN_FORCECHECK, 0, 0);
reply->code = MIMRES_SUCCESS;
- mir_snprintf(reply->message, Translate("Issued check email command to YAMN plugin."));
+ mir_snwprintf(reply->message, TranslateT("Issued check email command to YAMN plugin."));
}
else {
reply->code = MIMRES_FAILURE;
- mir_snprintf(reply->message, Translate("YAMN plugin is not running."));
+ mir_snwprintf(reply->message, TranslateT("YAMN plugin is not running."));
}
}
else {
@@ -702,22 +659,22 @@ void HandleCallServiceCommand(PCommand command, TArgument *argv, int argc, PRepl
switch (argc) {
case 5:
{
- char *service = argv[2];
- if (ServiceExists(service)) {
+ wchar_t *service = argv[2];
+ if (ServiceExists(_T2A(service))) {
void *wParam = nullptr;
void *lParam = nullptr;
INT_PTR res1 = ParseValueParam(argv[3], wParam);
INT_PTR res2 = ParseValueParam(argv[4], lParam);
if ((res1 != 0) && (res2 != 0)) {
- //very dangerous but the user asked
- INT_PTR res = CallService(service, ((res1 == 1) ? *((long *)wParam) : (WPARAM)wParam), (LPARAM)((res2 == 1) ? *((long *)lParam) : (LPARAM)lParam));
+ // very dangerous but the user asked
+ INT_PTR res = CallService(_T2A(service), ((res1 == 1) ? *((long *)wParam) : (WPARAM)wParam), (LPARAM)((res2 == 1) ? *((long *)lParam) : (LPARAM)lParam));
reply->code = MIMRES_SUCCESS;
- mir_snprintf(reply->message, Translate("CallService call successful: service '%s' returned %p."), service, res);
+ mir_snwprintf(reply->message, TranslateT("CallService call successful: service '%s' returned %p."), service, res);
}
else {
reply->code = MIMRES_FAILURE;
- mir_snprintf(reply->message, Translate("Invalid parameter '%s' passed to CallService command."), (wParam) ? argv[4] : argv[3]);
+ mir_snwprintf(reply->message, TranslateT("Invalid parameter '%s' passed to CallService command."), (wParam) ? argv[4] : argv[3]);
}
free(wParam);
@@ -726,7 +683,7 @@ void HandleCallServiceCommand(PCommand command, TArgument *argv, int argc, PRepl
}
else {
reply->code = MIMRES_FAILURE;
- mir_snprintf(reply->message, Translate("Service '%s' does not exist."), service);
+ mir_snwprintf(reply->message, TranslateT("Service '%s' does not exist."), service);
}
break;
@@ -737,12 +694,12 @@ void HandleCallServiceCommand(PCommand command, TArgument *argv, int argc, PRepl
}
}
-void ParseMessage(char buffer[512], const char *message)
+void ParseMessage(wchar_t buffer[512], const wchar_t *message)
{
unsigned int j = 0;
- for (unsigned int i = 0; i < mir_strlen(message); ++i) {
- char c = message[i];
- if (c == '\\' && i < (mir_strlen(message) - 1) && message[i + 1] == 'n') {
+ for (unsigned int i = 0; i < mir_wstrlen(message); ++i) {
+ wchar_t c = message[i];
+ if (c == '\\' && i < (mir_wstrlen(message) - 1) && message[i + 1] == 'n') {
c = '\n';
i++;
}
@@ -751,33 +708,33 @@ void ParseMessage(char buffer[512], const char *message)
buffer[j] = '\0';
}
-MCONTACT ParseContactParam(char *contact)
+MCONTACT ParseContactParam(wchar_t *contact)
{
- char name[512];
- char account[128];
+ wchar_t name[512];
+ wchar_t account[128];
char protocol[128];
- char *p = strrchr(contact, ':');
+ wchar_t *p = wcsrchr(contact, ':');
if (p == nullptr)
- return GetContactFromID(contact, (char*)nullptr);
+ return GetContactFromID(contact, nullptr);
*p = 0;
- strncpy_s(name, contact, _TRUNCATE);
- strncpy_s(account, p + 1, _TRUNCATE);
+ wcsncpy_s(name, contact, _TRUNCATE);
+ wcsncpy_s(account, p + 1, _TRUNCATE);
*p = ':';
- AccountName2Protocol(account, protocol, sizeof(protocol));
+ AccountName2Protocol(account, protocol, _countof(protocol));
return GetContactFromID(name, protocol);
}
void HandleMessageCommand(PCommand command, TArgument *argv, int argc, PReply reply)
{
if (argc >= 4) {
- char message[512];
+ wchar_t message[512];
ParseMessage(message, argv[argc - 1]); //get the message
- CMStringA szReply;
+ CMStringW szReply;
ACKDATA *ack = nullptr;
for (int i = 2; i < argc - 1; i++) {
- char *contact = argv[i];
+ wchar_t *contact = argv[i];
MCONTACT hContact = ParseContactParam(contact);
if (i != 3)
@@ -785,7 +742,7 @@ void HandleMessageCommand(PCommand command, TArgument *argv, int argc, PReply re
if (hContact) {
bShouldProcessAcks = TRUE;
- HANDLE hProcess = (HANDLE)ProtoChainSend(hContact, PSS_MESSAGE, 0, (LPARAM)message);
+ HANDLE hProcess = (HANDLE)ProtoChainSend(hContact, PSS_MESSAGE, 0, ptrA(Utf8EncodeW(message)));
const int MAX_COUNT = 60;
int counter = 0;
while (((ack = GetAck(hProcess)) == nullptr) && (counter < MAX_COUNT)) {
@@ -797,7 +754,7 @@ void HandleMessageCommand(PCommand command, TArgument *argv, int argc, PReply re
if (counter < MAX_COUNT) {
if (ack->result == ACKRESULT_SUCCESS) {
if (ack->szModule) {
- szReply.AppendFormat(Translate("Message sent to '%s'."), contact);
+ szReply.AppendFormat(TranslateT("Message sent to '%s'."), contact);
DBEVENTINFO e = {};
char module[128];
@@ -807,21 +764,21 @@ void HandleMessageCommand(PCommand command, TArgument *argv, int argc, PReply re
e.pBlob = (PBYTE)message;
e.cbBlob = (DWORD)mir_strlen((char *)message) + 1;
- strncpy_s(module, ack->szModule, sizeof(module));
+ strncpy_s(module, ack->szModule, _countof(module));
e.szModule = module;
e.timestamp = (DWORD)time(nullptr);
db_event_add(ack->hContact, &e);
}
- else szReply.AppendFormat(Translate("Message to '%s' was marked as sent but the account seems to be offline"), contact);
+ else szReply.AppendFormat(TranslateT("Message to '%s' was marked as sent but the account seems to be offline"), contact);
}
- else szReply.AppendFormat(Translate("Could not send message to '%s'."), contact);
+ else szReply.AppendFormat(TranslateT("Could not send message to '%s'."), contact);
}
- else szReply.AppendFormat(Translate("Timed out while waiting for acknowledgment for contact '%s'."), contact);
+ else szReply.AppendFormat(TranslateT("Timed out while waiting for acknowledgment for contact '%s'."), contact);
}
- else szReply.AppendFormat(Translate("Could not find contact handle for contact '%s'."), contact);
+ else szReply.AppendFormat(TranslateT("Could not find contact handle for contact '%s'."), contact);
}
- strncpy_s(reply->message, szReply, _TRUNCATE);
+ wcsncpy_s(reply->message, szReply, _TRUNCATE);
}
else HandleWrongParametersCount(command, reply);
}
@@ -846,7 +803,6 @@ bool ParseDatabaseData(DBVARIANT *var, char *buffer, int size, int free)
if (free) {
mir_free(var->pszVal);
}
-
return true;
case DBVT_WCHAR:
@@ -878,30 +834,26 @@ bool ParseDatabaseData(DBVARIANT *var, char *buffer, int size, int free)
void HandleDatabaseCommand(PCommand command, TArgument *argv, int argc, PReply reply)
{
- if (argc >= 3) //we have something to parse
- {
- char dbcmd[128];
- strncpy_s(dbcmd, argv[2], sizeof(dbcmd));
- dbcmd[sizeof(dbcmd) - 1] = 0;
- _strlwr(dbcmd);
- if (mir_strcmp(dbcmd, "delete") == 0) {
+ if (argc >= 3) { // we have something to parse
+ wchar_t dbcmd[128];
+ wcsncpy_s(dbcmd, argv[2], _TRUNCATE);
+ _wcslwr(dbcmd);
+ if (mir_wstrcmp(dbcmd, L"delete") == 0) {
if (argc == 5) {
- char *module = argv[3];
- char *key = argv[4];
+ wchar_t *module = argv[3];
+ wchar_t *key = argv[4];
- db_unset(NULL, module, key);
+ db_unset(NULL, _T2A(module), _T2A(key));
reply->code = MIMRES_SUCCESS;
- mir_snprintf(reply->message, Translate("Setting '%s/%s' deleted."), module, key);
- }
- else {
- HandleWrongParametersCount(command, reply);
+ mir_snwprintf(reply->message, TranslateT("Setting '%s/%s' deleted."), module, key);
}
+ else HandleWrongParametersCount(command, reply);
}
- else if (mir_strcmp(dbcmd, "set") == 0) {
+ else if (mir_wstrcmp(dbcmd, L"set") == 0) {
if (argc == 6) {
- char *module = argv[3];
- char *key = argv[4];
+ ptrA module(mir_u2a(argv[3]));
+ ptrA key(mir_u2a(argv[4]));
void *value = nullptr;
char *wrote = nullptr;
@@ -940,18 +892,16 @@ void HandleDatabaseCommand(PCommand command, TArgument *argv, int argc, PReply r
}
reply->code = MIMRES_SUCCESS;
- mir_snprintf(reply->message, Translate("Wrote '%s:%s' to database entry '%s/%s'."), wrote, argv[5] + 1, module, key);
+ mir_snwprintf(reply->message, TranslateT("Wrote '%S:%s' to database entry '%S/%S'."), wrote, argv[5] + 1, module, key);
free(value);
}
- else {
- HandleWrongParametersCount(command, reply);
- }
+ else HandleWrongParametersCount(command, reply);
}
- else if (mir_strcmp(dbcmd, "get") == 0) {
+ else if (mir_wstrcmp(dbcmd, L"get") == 0) {
if (argc == 5) {
- char *module = argv[3];
- char *key = argv[4];
+ ptrA module(mir_u2a(argv[3]));
+ ptrA key(mir_u2a(argv[4]));
DBVARIANT var = { 0 };
@@ -959,58 +909,51 @@ void HandleDatabaseCommand(PCommand command, TArgument *argv, int argc, PReply r
if (!res) {
char buffer[1024];
- if (ParseDatabaseData(&var, buffer, sizeof(buffer), TRUE)) {
+ if (ParseDatabaseData(&var, buffer, _countof(buffer), TRUE)) {
reply->code = MIMRES_SUCCESS;
- mir_snprintf(reply->message, "'%s/%s' - %s.", module, key, buffer);
+ mir_snwprintf(reply->message, L"'%S/%S' - %S.", module, key, buffer);
}
else {
reply->code = MIMRES_FAILURE;
- mir_snprintf(reply->message, Translate("Could not retrieve setting '%s/%s': %s."), module, key, buffer);
+ mir_snwprintf(reply->message, TranslateT("Could not retrieve setting '%S/%S': %S."), module, key, buffer);
}
}
else {
reply->code = MIMRES_FAILURE;
- mir_snprintf(reply->message, Translate("Setting '%s/%s' was not found."), module, key);
+ mir_snwprintf(reply->message, TranslateT("Setting '%S/%S' was not found."), module, key);
}
}
- else {
- HandleWrongParametersCount(command, reply);
- }
- }
- else {
- HandleUnknownParameter(command, dbcmd, reply);
+ else HandleWrongParametersCount(command, reply);
}
+ else HandleUnknownParameter(command, dbcmd, reply);
}
- else {
- HandleWrongParametersCount(command, reply);
- }
+ else HandleWrongParametersCount(command, reply);
}
-int ParseProxyType(char *type)
+int ParseProxyType(wchar_t *type)
{
- char lower[128];
- strncpy_s(lower, type, sizeof(lower));
- lower[sizeof(lower) - 1] = 0;
- _strlwr(lower);
+ wchar_t lower[128];
+ wcsncpy_s(lower, type, _countof(lower));
+ lower[_countof(lower) - 1] = 0;
+ _wcslwr(lower);
- if (mir_strcmp(lower, "socks4") == 0) {
+ if (mir_wstrcmp(lower, L"socks4") == 0)
return PROXY_SOCKS4;
- }
- else if (mir_strcmp(lower, "socks5") == 0) {
+
+ if (mir_wstrcmp(lower, L"socks5") == 0)
return PROXY_SOCKS5;
- }
- else if (mir_strcmp(lower, "http") == 0) {
+
+ if (mir_wstrcmp(lower, L"http") == 0)
return PROXY_HTTP;
- }
- else if (mir_strcmp(lower, "https") == 0) {
+
+ if (mir_wstrcmp(lower, L"https") == 0)
return PROXY_HTTPS;
- }
- else
- return 0;
+
+ return 0;
}
-char *PrettyProxyType(int type, char *buffer, int size)
+char* PrettyProxyType(int type, char *buffer, int size)
{
char *pretty = "";
switch (type) {
@@ -1035,55 +978,46 @@ char *PrettyProxyType(int type, char *buffer, int size)
}
strncpy_s(buffer, size, pretty, _TRUNCATE);
-
return buffer;
}
void HandleProtocolProxyCommand(PCommand command, TArgument *argv, int argc, PReply reply, char *module, char *protocol)
{
- char proxycmd[128];
- strncpy_s(proxycmd, argv[3], sizeof(proxycmd));
- proxycmd[sizeof(proxycmd) - 1] = 0;
- _strlwr(proxycmd);
-
- char buffer[1024];
+ wchar_t proxycmd[128];
+ wcsncpy_s(proxycmd, argv[3], _countof(proxycmd));
+ proxycmd[_countof(proxycmd) - 1] = 0;
+ _wcslwr(proxycmd);
+ wchar_t buffer[1024];
- if (mir_strcmp(proxycmd, "status") == 0) {//status command
+ if (mir_wstrcmp(proxycmd, L"status") == 0) {//status command
switch (argc) {
case 4:
{
int value = db_get_b(NULL, module, "NLUseProxy", 0);
reply->code = MIMRES_SUCCESS;
- mir_snprintf(buffer, "%s proxy status is %s", protocol, (value) ? "enabled" : "disabled");
-
- break;
+ mir_snwprintf(buffer, L"%S proxy status is %s", protocol, (value) ? L"enabled" : L"disabled");
}
+ break;
case 5:
{
int state = Get2StateValue(argv[4]);
switch (state) {
case STATE_OFF:
- {
- db_set_b(NULL, module, "NLUseProxy", 0);
-
- reply->code = MIMRES_SUCCESS;
- mir_snprintf(buffer, Translate("'%s' proxy was disabled."), protocol);
+ db_set_b(NULL, module, "NLUseProxy", 0);
- break;
- }
+ reply->code = MIMRES_SUCCESS;
+ mir_snwprintf(buffer, TranslateT("'%S' proxy was disabled."), protocol);
+ break;
case STATE_ON:
- {
- db_set_b(NULL, module, "NLUseProxy", 1);
-
- reply->code = MIMRES_SUCCESS;
- mir_snprintf(buffer, Translate("'%s' proxy was enabled."), protocol);
+ db_set_b(NULL, module, "NLUseProxy", 1);
- break;
- }
+ reply->code = MIMRES_SUCCESS;
+ mir_snwprintf(buffer, TranslateT("'%S' proxy was enabled."), protocol);
+ break;
case STATE_TOGGLE:
{
@@ -1092,16 +1026,14 @@ void HandleProtocolProxyCommand(PCommand command, TArgument *argv, int argc, PRe
db_set_b(NULL, module, "NLUseProxy", value);
reply->code = MIMRES_SUCCESS;
- mir_snprintf(buffer, (value) ? Translate("'%s' proxy was enabled.") : Translate("'%s' proxy was disabled."));
-
- break;
+ mir_snwprintf(buffer, (value) ? TranslateT("'%S' proxy was enabled.") : TranslateT("'%S' proxy was disabled."), protocol);
}
+ break;
default:
HandleUnknownParameter(command, argv[4], reply);
return;
}
-
break;
}
@@ -1110,28 +1042,26 @@ void HandleProtocolProxyCommand(PCommand command, TArgument *argv, int argc, PRe
return;
}
}
- else if (mir_strcmp(proxycmd, "server") == 0) {
+ else if (mir_wstrcmp(proxycmd, L"server") == 0) {
switch (argc) {
case 4:
{
char host[256], type[256];
- GetStringFromDatabase(NULL, module, "NLProxyServer", "<unknown>", host, sizeof(host));
+ GetStringFromDatabase(NULL, module, "NLProxyServer", "<unknown>", host, _countof(host));
int port = db_get_w(NULL, module, "NLProxyPort", 0);
- PrettyProxyType(db_get_b(NULL, module, "NLProxyType", 0), type, sizeof(type));
+ PrettyProxyType(db_get_b(NULL, module, "NLProxyType", 0), type, _countof(type));
reply->code = MIMRES_SUCCESS;
- mir_snprintf(buffer, Translate("%s proxy server: %s %s:%d."), protocol, type, host, port);
-
- break;
+ mir_snwprintf(buffer, TranslateT("%S proxy server: %S %S:%d."), protocol, type, host, port);
}
+ break;
case 7:
{
int type = ParseProxyType(argv[4]);
- char *host = argv[5];
- long port;
- char *stop = nullptr;
- port = strtol(argv[6], &stop, 10);
+ ptrA host(mir_u2a(argv[5]));
+ wchar_t *stop = nullptr;
+ long port = wcstol(argv[6], &stop, 10);
if ((*stop == 0) && (type > 0)) {
db_set_s(NULL, module, "NLProxyServer", host);
@@ -1139,15 +1069,14 @@ void HandleProtocolProxyCommand(PCommand command, TArgument *argv, int argc, PRe
db_set_b(NULL, module, "NLProxyType", type);
reply->code = MIMRES_SUCCESS;
- mir_snprintf(buffer, Translate("%s proxy set to %s %s:%d."), protocol, argv[4], host, port);
+ mir_snwprintf(buffer, TranslateT("%S proxy set to %s %S:%d."), protocol, argv[4], host, port);
}
else {
reply->code = MIMRES_FAILURE;
- mir_snprintf(buffer, Translate("%s The port or the proxy type parameter is invalid."), protocol);
+ mir_snwprintf(buffer, TranslateT("%S The port or the proxy type parameter is invalid."), protocol);
}
-
- break;
}
+ break;
default:
HandleWrongParametersCount(command, reply);
@@ -1159,26 +1088,23 @@ void HandleProtocolProxyCommand(PCommand command, TArgument *argv, int argc, PRe
return;
}
-
if (reply->message[0] != 0) {
- mir_strncat(reply->message, "\n", _countof(reply->message) - mir_strlen(reply->message));
- mir_strncat(reply->message, buffer, _countof(reply->message) - mir_strlen(reply->message));
+ mir_wstrncat(reply->message, L"\n", _countof(reply->message) - mir_wstrlen(reply->message));
+ mir_wstrncat(reply->message, buffer, _countof(reply->message) - mir_wstrlen(reply->message));
reply->message[_countof(reply->message) - 1] = 0;
}
- else {
- mir_snprintf(reply->message, buffer);
- }
+ else mir_snwprintf(reply->message, buffer);
}
void HandleProxyCommand(PCommand command, TArgument *argv, int argc, PReply reply)
{
if (argc >= 4) {
- char account[128];
- char protocol[128];
- strncpy_s(account, argv[2], sizeof(account));
- account[sizeof(account) - 1] = 0;
+ wchar_t account[128];
+ wcsncpy_s(account, argv[2], _countof(account));
+ account[_countof(account) - 1] = 0;
- AccountName2Protocol(account, protocol, sizeof(protocol));
+ char protocol[128];
+ AccountName2Protocol(account, protocol, _countof(protocol));
int count = 0;
PROTOACCOUNT **accounts = nullptr;
@@ -1209,53 +1135,53 @@ void HandleProxyCommand(PCommand command, TArgument *argv, int argc, PReply repl
if (!found) {
reply->code = MIMRES_FAILURE;
- mir_snprintf(reply->message, Translate("'%s' doesn't seem to be a valid account."), account);
+ mir_snwprintf(reply->message, TranslateT("'%s' doesn't seem to be a valid account."), account);
}
}
- else {
- HandleWrongParametersCount(command, reply);
- }
+ else HandleWrongParametersCount(command, reply);
}
-int ContactMatchSearch(MCONTACT hContact, char *contact, char *id, char *account, TArgument *argv, int argc)
+int ContactMatchSearch(MCONTACT hContact, wchar_t *contact, wchar_t *id, char *account, TArgument *argv, int argc)
{
int matches = 1;
- char lwrName[2048] = "\0";
- char lwrAccount[128] = "\0";
- char lwrKeyword[512] = "\0";
- char lwrID[512] = "\0";
- char *pos;
+ wchar_t lwrName[2048];
+ char lwrAccount[128];
+ wchar_t lwrKeyword[512];
+ wchar_t lwrID[512];
+ wchar_t *pos;
- strncpy_s(lwrName, contact, sizeof(lwrName));
- strncpy_s(lwrAccount, account, sizeof(lwrAccount));
+ wcsncpy_s(lwrName, contact, _countof(lwrName));
+ strncpy_s(lwrAccount, account, _countof(lwrAccount));
- if (id) { strncpy_s(lwrID, id, sizeof(lwrID)); }
+ if (id)
+ wcsncpy_s(lwrID, id, _countof(lwrID));
+ else
+ lwrID[0] = 0;
- _strlwr(lwrName);
+ _wcslwr(lwrName);
_strlwr(lwrAccount);
- _strlwr(lwrID);
+ _wcslwr(lwrID);
for (int i = 0; i < argc; i++) {
- strncpy_s(lwrKeyword, argv[i], sizeof(lwrKeyword));
- _strlwr(lwrKeyword);
+ wcsncpy_s(lwrKeyword, argv[i], _countof(lwrKeyword));
+ _wcslwr(lwrKeyword);
- pos = strstr(lwrKeyword, "account:");
+ pos = wcsstr(lwrKeyword, L"account:");
if (pos) {
pos += 8;
- if (strstr(lwrAccount, pos) == nullptr) {
+ if (strstr(lwrAccount, _T2A(pos)) == nullptr) {
matches = 0;
-
break;
}
}
else {
- pos = strstr(lwrKeyword, "status:");
+ pos = wcsstr(lwrKeyword, L"status:");
if (pos) {
int searchStatus = ParseStatusParam(pos + 7);
char protocol[128];
- AccountName2Protocol(account, protocol, sizeof(protocol));
+ AccountName2Protocol(_A2T(account), protocol, _countof(protocol));
WORD contactStatus = db_get_w(hContact, protocol, "Status", ID_STATUS_OFFLINE);
if (searchStatus != contactStatus) {
@@ -1264,15 +1190,15 @@ int ContactMatchSearch(MCONTACT hContact, char *contact, char *id, char *account
}
}
else {
- pos = strstr(lwrKeyword, "id:");
+ pos = wcsstr(lwrKeyword, L"id:");
if (pos) {
pos += 3;
- if (strstr(lwrID, pos) == nullptr) {
+ if (wcsstr(lwrID, pos) == nullptr) {
matches = 0;
break;
}
}
- else if ((strstr(lwrName, lwrKeyword) == nullptr)) {
+ else if ((wcsstr(lwrName, lwrKeyword) == nullptr)) {
matches = 0;
break;
}
@@ -1286,38 +1212,34 @@ int ContactMatchSearch(MCONTACT hContact, char *contact, char *id, char *account
void __cdecl OpenMessageWindowThread(void *data)
{
MCONTACT hContact = (UINT_PTR)data;
- if (hContact) {
+ if (hContact)
CallServiceSync(MS_MSG_SENDMESSAGEW, hContact, 0);
- }
}
-
void HandleContactsCommand(PCommand command, TArgument *argv, int argc, PReply reply)
{
if (argc >= 3) {
- if (_stricmp(argv[2], "list") == 0) {
- char buffer[1024];
+ if (_wcsicmp(argv[2], L"list") == 0) {
+ wchar_t buffer[1024];
char protocol[128];
int count = 0;
reply->code = MIMRES_SUCCESS;
for (MCONTACT hContact = db_find_first(); hContact; hContact = db_find_next(hContact)) {
- GetContactProto(hContact, protocol, sizeof(protocol));
+ GetContactProto(hContact, protocol, _countof(protocol));
- char *contact = GetContactName(hContact, protocol);
- char *id = GetContactID(hContact, protocol);
+ ptrW contact(GetContactName(hContact, protocol));
+ ptrW id(GetContactID(hContact, protocol));
if (ContactMatchSearch(hContact, contact, id, protocol, &argv[3], argc - 3)) {
- mir_snprintf(buffer, "%s:[%s]:%s (%08d)", contact, id, protocol, hContact);
+ mir_snwprintf(buffer, L"%s:[%s]:%S (%08d)", contact, id, protocol, hContact);
if (count) {
- mir_strncat(reply->message, "\n", _countof(reply->message) - mir_strlen(reply->message));
- mir_strncat(reply->message, buffer, _countof(reply->message) - mir_strlen(reply->message));
- }
- else {
- strncpy_s(reply->message, buffer, _countof(reply->message));
+ mir_wstrncat(reply->message, L"\n", _countof(reply->message) - mir_wstrlen(reply->message));
+ mir_wstrncat(reply->message, buffer, _countof(reply->message) - mir_wstrlen(reply->message));
}
+ else wcsncpy_s(reply->message, buffer, _countof(reply->message));
- if (mir_strlen(reply->message) > 4096) {
+ if (mir_wstrlen(reply->message) > 4096) {
SetEvent(heServerBufferFull);
Sleep(750); //wait a few milliseconds for the event to be processed
count = 0;
@@ -1326,27 +1248,21 @@ void HandleContactsCommand(PCommand command, TArgument *argv, int argc, PReply r
count++;
}
-
- free(contact);
- free(id);
}
}
- else if (_stricmp(argv[2], "open") == 0) {
+ else if (_wcsicmp(argv[2], L"open") == 0) {
if (argc > 3) {
char protocol[128];
reply->code = MIMRES_SUCCESS;
*reply->message = 0;
for (MCONTACT hContact = db_find_first(); hContact; hContact = db_find_next(hContact)) {
- GetContactProto(hContact, protocol, sizeof(protocol));
+ GetContactProto(hContact, protocol, _countof(protocol));
- char *contact = GetContactName(hContact, protocol);
- char *id = GetContactID(hContact, protocol);
+ ptrW contact(GetContactName(hContact, protocol));
+ ptrW id(GetContactID(hContact, protocol));
if (ContactMatchSearch(hContact, contact, id, protocol, &argv[3], argc - 3))
mir_forkthread(OpenMessageWindowThread, (void*)hContact);
-
- free(contact);
- free(id);
}
}
else if (argc == 3) {
@@ -1366,31 +1282,28 @@ void HandleContactsCommand(PCommand command, TArgument *argv, int argc, PReply r
else HandleWrongParametersCount(command, reply);
}
-void AddHistoryEvent(DBEVENTINFO *dbEvent, char *contact, PReply reply)
+void AddHistoryEvent(DBEVENTINFO *dbEvent, wchar_t *contact, PReply reply)
{
char timestamp[256];
- TimeZone_ToString(dbEvent->timestamp, "D, s", timestamp, sizeof(timestamp));
-
- char *sender = (dbEvent->flags & DBEF_SENT) ? Translate("[me]") : contact;
- char *message = DbEvent_GetTextA(dbEvent, CP_ACP);
+ TimeZone_ToString(dbEvent->timestamp, "D, s", timestamp, _countof(timestamp));
- static char buffer[8192];
- mir_snprintf(buffer, "[%s] %15s: %s", timestamp, sender, message);
+ wchar_t *sender = (dbEvent->flags & DBEF_SENT) ? TranslateT("[me]") : contact;
+ wchar_t *message = DbEvent_GetTextW(dbEvent, CP_ACP);
+ static wchar_t buffer[8192];
+ mir_snwprintf(buffer, L"[%S] %15s: %s", timestamp, sender, message);
if (reply->message[0] != 0) {
- mir_strncat(reply->message, "\n", _countof(reply->message) - mir_strlen(reply->message));
- mir_strncat(reply->message, buffer, _countof(reply->message) - mir_strlen(reply->message));
- }
- else {
- strncpy_s(reply->message, buffer, _countof(reply->message));
+ mir_wstrncat(reply->message, L"\n", _countof(reply->message) - mir_wstrlen(reply->message));
+ mir_wstrncat(reply->message, buffer, _countof(reply->message) - mir_wstrlen(reply->message));
}
+ else wcsncpy_s(reply->message, buffer, _countof(reply->message));
- if (mir_strlen(reply->message) > (_countof(reply->message) / 2)) {
+ if (mir_wstrlen(reply->message) > (_countof(reply->message) / 2)) {
SetEvent(heServerBufferFull);
Sleep(750);
- mir_strcpy(reply->message, "\n");
+ mir_wstrcpy(reply->message, L"\n");
}
mir_free(message);
}
@@ -1398,17 +1311,17 @@ void AddHistoryEvent(DBEVENTINFO *dbEvent, char *contact, PReply reply)
void HandleHistoryCommand(PCommand command, TArgument *argv, int argc, PReply reply)
{
if (argc >= 3) {
- char *cmd = argv[2];
+ wchar_t *cmd = argv[2];
switch (argc) {
case 3:
- if (_stricmp(cmd, "unread") == 0) {
- char buffer[4096];
+ if (_wcsicmp(cmd, L"unread") == 0) {
+ wchar_t buffer[4096];
int count;
int contacts = 0;
DBEVENTINFO dbEvent = {};
reply->code = MIMRES_SUCCESS;
- mir_snprintf(reply->message, Translate("No unread messages found."));
+ mir_snwprintf(reply->message, TranslateT("No unread messages found."));
for (MCONTACT hContact = db_find_first(); hContact; hContact = db_find_next(hContact)) {
MEVENT hEvent = db_event_firstUnread(hContact);
@@ -1423,23 +1336,21 @@ void HandleHistoryCommand(PCommand command, TArgument *argv, int argc, PReply re
}
char protocol[128];
- GetContactProto(hContact, protocol, sizeof(protocol));
- char *contact = GetContactName(hContact, protocol);
- mir_snprintf(buffer, Translate("%s:%s - %d unread events."), contact, protocol, count);
+ GetContactProto(hContact, protocol, _countof(protocol));
+ ptrW contact(GetContactName(hContact, protocol));
+ mir_snwprintf(buffer, TranslateT("%s:%S - %d unread events."), contact, protocol, count);
if (contacts > 0) {
- mir_strncat(reply->message, "\n", _countof(reply->message) - mir_strlen(reply->message));
- mir_strncat(reply->message, buffer, _countof(reply->message) - mir_strlen(reply->message));
+ mir_wstrncat(reply->message, L"\n", _countof(reply->message) - mir_wstrlen(reply->message));
+ mir_wstrncat(reply->message, buffer, _countof(reply->message) - mir_wstrlen(reply->message));
}
- else strncpy_s(reply->message, buffer, _countof(reply->message));
+ else wcsncpy_s(reply->message, buffer, _countof(reply->message));
contacts++;
-
- free(contact);
}
}
}
- else if (_stricmp(cmd, "show") == 0)
+ else if (_wcsicmp(cmd, L"show") == 0)
HandleWrongParametersCount(command, reply);
else
HandleUnknownParameter(command, cmd, reply);
@@ -1447,10 +1358,10 @@ void HandleHistoryCommand(PCommand command, TArgument *argv, int argc, PReply re
case 4:
{
- char *contact = argv[3];
+ wchar_t *contact = argv[3];
MCONTACT hContact = ParseContactParam(contact);
if (hContact) {
- if (_stricmp(cmd, "unread") == 0) {
+ if (_wcsicmp(cmd, L"unread") == 0) {
MEVENT hEvent = db_event_firstUnread(hContact);
reply->code = MIMRES_SUCCESS;
@@ -1464,29 +1375,29 @@ void HandleHistoryCommand(PCommand command, TArgument *argv, int argc, PReply re
hEvent = db_event_next(hContact, hEvent);
}
}
- else if (_stricmp(cmd, "show") == 0) {
+ else if (_wcsicmp(cmd, L"show") == 0) {
reply->code = MIMRES_SUCCESS;
- mir_snprintf(reply->message, Translate("Contact '%s' has %d events in history."), contact, db_event_count(hContact));
+ mir_snwprintf(reply->message, TranslateT("Contact '%s' has %d events in history."), contact, db_event_count(hContact));
}
else HandleUnknownParameter(command, cmd, reply);
}
else {
reply->code = MIMRES_FAILURE;
- mir_snprintf(reply->message, Translate("Could not find contact handle for contact '%s'."), contact);
+ mir_snwprintf(reply->message, TranslateT("Could not find contact handle for contact '%s'."), contact);
}
}
break;
case 6:
{
- char *contact = argv[3];
+ wchar_t *contact = argv[3];
MCONTACT hContact = ParseContactParam(contact);
if (hContact) {
- if (_stricmp(cmd, "show") == 0) {
- char *stop1 = nullptr;
- char *stop2 = nullptr;
- long start = strtol(argv[4], &stop1, 10);
- long stop = strtol(argv[5], &stop2, 10);
+ if (_wcsicmp(cmd, L"show") == 0) {
+ wchar_t *stop1 = nullptr;
+ wchar_t *stop2 = nullptr;
+ long start = wcstol(argv[4], &stop1, 10);
+ long stop = wcstol(argv[5], &stop2, 10);
if (!(*stop1) && !(*stop2)) {
int size = db_event_count(hContact);
if (start < 0) { start = size + start + 1; }
@@ -1503,9 +1414,8 @@ void HandleHistoryCommand(PCommand command, TArgument *argv, int argc, PReply re
dbEvent.pBlob = (PBYTE)message;
while (hEvent) {
- dbEvent.cbBlob = sizeof(message);
- if (!db_event_get(hEvent, &dbEvent)) // if successful call
- {
+ dbEvent.cbBlob = _countof(message);
+ if (!db_event_get(hEvent, &dbEvent)) { // if successful call
dbEvent.pBlob[dbEvent.cbBlob] = 0;
if ((index >= start) && (index <= stop))
AddHistoryEvent(&dbEvent, contact, reply);
@@ -1521,14 +1431,14 @@ void HandleHistoryCommand(PCommand command, TArgument *argv, int argc, PReply re
}
else HandleUnknownParameter(command, (*stop1) ? argv[4] : argv[5], reply);
}
- else if (_stricmp(cmd, "unread") == 0)
+ else if (_wcsicmp(cmd, L"unread") == 0)
HandleWrongParametersCount(command, reply);
else
HandleUnknownParameter(command, cmd, reply);
}
else {
reply->code = MIMRES_FAILURE;
- mir_snprintf(reply->message, Translate("Could not find contact handle for contact '%s'."), contact);
+ mir_snwprintf(reply->message, TranslateT("Could not find contact handle for contact '%s'."), contact);
}
}
break;
@@ -1548,14 +1458,14 @@ void HandleVersionCommand(PCommand command, TArgument*, int argc, PReply reply)
if (ServiceExists(MS_CRASHDUMPER_GETINFO)) {
char *data;
CallService(MS_CRASHDUMPER_GETINFO, (WPARAM)FALSE, (LPARAM)&data);
- mir_snprintf(reply->message, data);
+ mir_snwprintf(reply->message, _A2T(data));
mir_free(data);
}
else {
char miranda[512];
DWORD v = pluginInfo.version;
- Miranda_GetVersionText(miranda, sizeof(miranda));
- mir_snprintf(reply->message, "Miranda %s\nCmdLine v.%d.%d.%d.%d", miranda, ((v >> 24) & 0xFF), ((v >> 16) & 0xFF), ((v >> 8) & 0xFF), (v & 0xFF));
+ Miranda_GetVersionText(miranda, _countof(miranda));
+ mir_snwprintf(reply->message, L"Miranda %S\nCmdLine v.%d.%d.%d.%d", miranda, ((v >> 24) & 0xFF), ((v >> 16) & 0xFF), ((v >> 8) & 0xFF), (v & 0xFF));
}
}
else HandleWrongParametersCount(command, reply);
@@ -1564,11 +1474,11 @@ void HandleVersionCommand(PCommand command, TArgument*, int argc, PReply reply)
void HandleSetNicknameCommand(PCommand command, TArgument *argv, int argc, PReply reply)
{
if (argc == 4) {
- char protocol[512], nickname[512];
- mir_strcpy(protocol, argv[2]);
- mir_strcpy(nickname, argv[3]);
+ wchar_t protocol[512], nickname[512];
+ mir_wstrcpy(protocol, argv[2]);
+ mir_wstrcpy(nickname, argv[3]);
- int res = CallProtoService(protocol, PS_SETMYNICKNAME, SMNN_UNICODE, (LPARAM)nickname);
+ int res = CallProtoService(_T2A(protocol), PS_SETMYNICKNAME, SMNN_UNICODE, (LPARAM)nickname);
if (res == 0) {
reply->code = MIMRES_SUCCESS;
@@ -1576,7 +1486,7 @@ void HandleSetNicknameCommand(PCommand command, TArgument *argv, int argc, PRepl
}
else {
reply->code = MIMRES_FAILURE;
- mir_snprintf(reply->message, Translate("Error setting nickname to '%s' for protocol '%s'"), nickname, protocol);
+ mir_snwprintf(reply->message, TranslateT("Error setting nickname to '%s' for protocol '%s'"), nickname, protocol);
}
}
else HandleWrongParametersCount(command, reply);
@@ -1586,10 +1496,10 @@ void HandleIgnoreCommand(PCommand command, TArgument *argv, int argc, PReply rep
{
if (argc >= 4) {
BOOL block = FALSE;
- if (_stricmp(argv[2], "block") == 0) {
+ if (_wcsicmp(argv[2], L"block") == 0) {
block = TRUE;
}
- else if (_stricmp(argv[2], "unblock") == 0) {
+ else if (_wcsicmp(argv[2], L"unblock") == 0) {
block = FALSE;
}
else {
@@ -1617,26 +1527,26 @@ void HandleLuaCommand(PCommand command, TArgument *argv, int argc, PReply reply)
return;
}
- if (_stricmp(argv[2], "call") == 0) {
+ if (_wcsicmp(argv[2], L"call") == 0) {
wchar_t *result = argc == 4
- ? lua_call(nullptr, _A2T(argv[3]))
- : lua_call(_A2T(argv[3]), _A2T(argv[4]));
- mir_strcpy(reply->message, _T2A(result));
+ ? lua_call(nullptr, argv[3])
+ : lua_call(argv[3], argv[4]);
+ mir_wstrcpy(reply->message, result);
mir_free(result);
reply->code = MIMRES_SUCCESS;
return;
}
- if (_stricmp(argv[2], "exec") == 0) {
- ptrW result(lua_exec(_A2T(argv[3])));
- mir_strcpy(reply->message, _T2A(result));
+ if (_wcsicmp(argv[2], L"exec") == 0) {
+ ptrW result(lua_exec(argv[3]));
+ mir_wstrcpy(reply->message, result);
reply->code = MIMRES_SUCCESS;
return;
}
- if (_stricmp(argv[2], "eval") == 0) {
- ptrW result(lua_eval(_A2T(argv[3])));
- mir_strcpy(reply->message, _T2A(result));
+ if (_wcsicmp(argv[2], L"eval") == 0) {
+ ptrW result(lua_eval(argv[3]));
+ mir_wstrcpy(reply->message, result);
reply->code = MIMRES_SUCCESS;
return;
}
@@ -1721,6 +1631,6 @@ void HandleCommand(PCommand command, TArgument *argv, int argc, PReply reply)
default:
reply->code = MIMRES_NOTFOUND;
- mir_snprintf(reply->message, Translate("Command '%s' is not currently supported."), command->command);
+ mir_snwprintf(reply->message, TranslateT("Command '%s' is not currently supported."), command->command);
}
}