diff options
Diffstat (limited to 'plugins/Folders/utils.cpp')
-rw-r--r-- | plugins/Folders/utils.cpp | 357 |
1 files changed, 357 insertions, 0 deletions
diff --git a/plugins/Folders/utils.cpp b/plugins/Folders/utils.cpp new file mode 100644 index 0000000000..64623b63f1 --- /dev/null +++ b/plugins/Folders/utils.cpp @@ -0,0 +1,357 @@ +/*
+Custom profile folders plugin for Miranda IM
+
+Copyright © 2005 Cristian Libotean
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#include "utils.h"
+
+int Log(char *format, ...)
+{
+#ifdef _DEBUG
+ char str[4096];
+ va_list vararg;
+ int tBytes;
+ FILE *fout = fopen("folders.log", "at");
+
+ va_start(vararg, format);
+
+ tBytes = _vsnprintf(str, sizeof(str), format, vararg);
+ if (tBytes > 0)
+ {
+ str[tBytes] = 0;
+ }
+
+ va_end(vararg);
+ if (str[strlen(str) - 1] != '\n')
+ {
+ strcat(str, "\n");
+ }
+ fputs(str, fout);
+ fclose(fout);
+#endif
+ return 0;
+}
+
+char *StrCopy(char *source, size_t index, const char *what, size_t count)
+{
+ size_t i;
+ for (i = 0; i < count; i++)
+ {
+ source[index + i] = what[i];
+ }
+ return source;
+}
+
+wchar_t *StrCopy(wchar_t *source, size_t index, const wchar_t *what, size_t count)
+{
+ size_t i;
+ for (i = 0; i < count; i++)
+ {
+ source[index + i] = what[i];
+ }
+ return source;
+}
+
+char *StrDelete(char *source, size_t index, size_t count)
+{
+ size_t len = strlen(source);
+ size_t i;
+ count = (count + index > len) ? len - index : count;
+ for (i = index; i + count <= len; i++)
+ {
+ source[i] = source[i + count];
+ }
+ return source;
+}
+
+wchar_t *StrDelete(wchar_t *source, size_t index, size_t count)
+{
+ size_t len = wcslen(source);
+ size_t i;
+ count = (count + index > len) ? len - index : count;
+ for (i = index; i + count <= len; i++)
+ {
+ source[i] = source[i + count];
+ }
+ return source;
+}
+
+
+char *StrInsert(char *source, size_t index, const char *what)
+{
+ size_t whatLen = strlen(what);
+ size_t sourceLen = strlen(source);
+ size_t i;
+ for (i = sourceLen; i >= index; i--)
+ {
+ source[i + whatLen] = source[i];
+ }
+ for (i = 0; i < whatLen; i++)
+ {
+ source[index + i] = what[i];
+ }
+ return source;
+}
+
+wchar_t *StrInsert(wchar_t *source, size_t index, const wchar_t *what)
+{
+ size_t whatLen = wcslen(what);
+ size_t sourceLen = wcslen(source);
+ size_t i;
+ for (i = sourceLen; i >= index; i--)
+ {
+ source[i + whatLen] = source[i];
+ }
+ for (i = 0; i < whatLen; i++)
+ {
+ source[index + i] = what[i];
+ }
+ return source;
+}
+
+
+char *StrReplace(char *source, const char *what, const char *withWhat)
+{
+ char *pos;
+ size_t whatLen = strlen(what);
+ size_t withWhatLen = strlen(withWhat);
+ size_t minLen;
+ size_t index;
+
+ while ((pos = strstr(source, what)))
+ {
+ minLen = min(whatLen, withWhatLen);
+ StrCopy(source, pos - source, withWhat, minLen);
+ index = pos - source + minLen;
+ if (whatLen > withWhatLen)
+ {
+ StrDelete(source, index, whatLen - withWhatLen);
+ }
+ else{
+ if (whatLen < withWhatLen)
+ {
+ StrInsert(source, index, withWhat + minLen);
+ }
+ }
+ }
+ return source;
+}
+
+wchar_t *StrReplace(wchar_t *source, const wchar_t *what, const wchar_t *withWhat)
+{
+ wchar_t *pos;
+ size_t whatLen = wcslen(what);
+ size_t withWhatLen = wcslen(withWhat);
+ size_t minLen;
+ size_t index;
+
+ while ((pos = wcsstr(source, what)))
+ {
+ minLen = min(whatLen, withWhatLen);
+ StrCopy(source, pos - source, withWhat, minLen);
+ index = pos - source + minLen;
+ if (whatLen > withWhatLen)
+ {
+ StrDelete(source, index, whatLen - withWhatLen);
+ }
+ else{
+ if (whatLen < withWhatLen)
+ {
+ StrInsert(source, index, withWhat + minLen);
+ }
+ }
+ }
+ return source;
+}
+
+char *StrTrim(char *szText, const char *szTrimChars)
+{
+ size_t i = strlen(szText) - 1;
+ while ((i >= 0) && (strchr(szTrimChars, szText[i])))
+ {
+ szText[i--] = '\0';
+ }
+ i = 0;
+ while ((i < strlen(szText)) && (strchr(szTrimChars, szText[i])))
+ {
+ i++;
+ }
+ if (i)
+ {
+ StrDelete(szText, 0, i);
+ }
+ return szText;
+}
+
+wchar_t *StrTrim(wchar_t *szText, const wchar_t *szTrimChars)
+{
+ size_t i = wcslen(szText) - 1;
+ while ((i >= 0) && (wcschr(szTrimChars, szText[i])))
+ {
+ szText[i--] = '\0';
+ }
+ i = 0;
+ while ((i < wcslen(szText)) && (wcschr(szTrimChars, szText[i])))
+ {
+ i++;
+ }
+ if (i)
+ {
+ StrDelete(szText, 0, i);
+ }
+ return szText;
+}
+
+void CreateDirectories(char *path)
+{
+ char *pos = path;
+ char tmp;
+ while (pos = strchr(pos, '\\'))
+ {
+ tmp = pos[0];
+ pos[0] = '\0';
+ CreateDirectoryA(path, NULL);
+ pos[0] = tmp;
+ pos++;
+ }
+ CreateDirectoryA(path, NULL);
+ GetLastError();
+}
+
+void CreateDirectories(wchar_t *path)
+{
+ wchar_t *pos = path;
+ wchar_t tmp;
+ while (pos = wcschr(pos, '\\'))
+ {
+ tmp = pos[0];
+ pos[0] = '\0';
+ CreateDirectoryW(path, NULL);
+ pos[0] = tmp;
+ pos++;
+ }
+ CreateDirectoryW(path, NULL);
+ GetLastError();
+}
+
+void RemoveDirectories(char *path)
+{
+ char *pos;
+ char *buffer = _strdup(path);
+ if (!(GetFileAttributesA(buffer) & FILE_ATTRIBUTE_REPARSE_POINT)) { RemoveDirectoryA(buffer); }
+ while (pos = strrchr(buffer, '\\'))
+ {
+ pos[0] = '\0';
+ if (!(GetFileAttributesA(buffer) & FILE_ATTRIBUTE_REPARSE_POINT)) { RemoveDirectoryA(buffer); }
+ }
+ free(buffer);
+}
+
+void RemoveDirectories(wchar_t *path)
+{
+ wchar_t *pos;
+ wchar_t *buffer = _wcsdup(path);
+ if (!(GetFileAttributesW(buffer) & FILE_ATTRIBUTE_REPARSE_POINT)) { RemoveDirectoryW(buffer); }
+ while (pos = wcsrchr(buffer, '\\'))
+ {
+ pos[0] = '\0';
+ if (!(GetFileAttributesW(buffer) & FILE_ATTRIBUTE_REPARSE_POINT)) { RemoveDirectoryW(buffer); }
+ }
+ free(buffer);
+}
+
+int DirectoryExists(char *path)
+{
+ char buffer[4096];
+ GetCurrentDirectoryA(sizeof(buffer), buffer);
+ int res = SetCurrentDirectoryA(path);
+ SetCurrentDirectoryA(buffer);
+ return res;
+}
+
+int DirectoryExists(wchar_t *path)
+{
+ wchar_t buffer[4096];
+ GetCurrentDirectoryW(sizeof(buffer), buffer);
+ int res = SetCurrentDirectoryW(path);
+ SetCurrentDirectoryW(buffer);
+ return res;
+}
+
+
+int GetStringFromDatabase(char *szSettingName, const char *szError, char *szResult, size_t size)
+{
+ DBVARIANT dbv = {0};
+ int res = 1;
+ size_t len;
+ dbv.type = DBVT_ASCIIZ;
+ if (DBGetContactSetting(NULL, ModuleName, szSettingName, &dbv) == 0)
+ {
+ res = 0;
+ size_t tmp = strlen(dbv.pszVal);
+ len = (tmp < size - 1) ? tmp : size - 1;
+ strncpy(szResult, dbv.pszVal, len);
+ szResult[len] = '\0';
+ mir_free(dbv.pszVal);
+ }
+ else{
+ res = 1;
+ size_t tmp = strlen(szError);
+ len = (tmp < size - 1) ? tmp : size - 1;
+ strncpy(szResult, szError, len);
+ szResult[len] = '\0';
+ }
+ return res;
+}
+
+int GetStringFromDatabase(char *szSettingName, const wchar_t *szError, wchar_t *szResult, size_t size)
+{
+ DBVARIANT dbv = {0};
+ int res = 1;
+ size_t len;
+ dbv.type = DBVT_WCHAR;
+ if (DBGetContactSettingWString(NULL, ModuleName, szSettingName, &dbv) == 0)
+ //if (DBGetContactSetting(NULL, ModuleName, szSettingName, &dbv) == 0)
+ {
+ res = 0;
+ size_t tmp = wcslen(dbv.pwszVal);
+ len = (tmp < size - 1) ? tmp : size - 1;
+ wcsncpy(szResult, dbv.pwszVal, len);
+ szResult[len] = '\0';
+ mir_free(dbv.pwszVal);
+ }
+ else{
+ res = 1;
+ size_t tmp = wcslen(szError);
+ len = (tmp < size - 1) ? tmp : size - 1;
+ wcsncpy(szResult, szError, len);
+ szResult[len] = '\0';
+ }
+ return res;
+}
+
+
+int WriteStringToDatabase(char *szSettingName, const char *szValue)
+{
+ return DBWriteContactSettingString(NULL, ModuleName, szSettingName, szValue);
+}
+
+int WriteStringToDatabase(char *szSettingName, const wchar_t *szValue)
+{
+ return DBWriteContactSettingWString(NULL, ModuleName, szSettingName, szValue);
+}
\ No newline at end of file |