void CChat::GenerateChatName(CSString &sName, const CClient * pClient) // static { if (pClient == nullptr) return; // decide upon 'base' name lpctstr pszName = nullptr; if (pClient->GetChar() != nullptr) pszName = pClient->GetChar()->GetName(); else if (pClient->GetAccount() != nullptr) pszName = pClient->GetAccount()->GetName(); if (pszName == nullptr) return; // try the base name CSString sTempName(pszName); if (g_Accounts.Account_FindChat(sTempName.GetPtr()) != nullptr) { sTempName.Empty(); // append (n) to the name to make it unique for (uint attempts = 2; attempts <= g_Accounts.Account_GetCount(); attempts++) { sTempName.Format("%s (%u)", pszName, attempts); if (g_Accounts.Account_FindChat(static_cast<lpctstr>(sTempName)) == nullptr) break; sTempName.Empty(); } } // copy name to output sName.Copy(sTempName.GetPtr()); }
bool SplitFilenameString_Priv (const char* pFilename, const size_t Length, CSString& Path, CSString& BaseFilename, CSString& Extension) { const char* pParse = pFilename; int Index = Length - 1; int ExtensionIndex; Extension.Empty(); BaseFilename.Empty(); Path.Empty(); if (Length == 0) return true; while (Index >= 0) { if (pParse[Index] == '.') { Extension = pParse + Index + 1; ExtensionIndex = Index; break; } else if (pParse[Index] == '\\' || pParse[Index] == '/' || pParse[Index] == ':') { ExtensionIndex = Length; Extension.Empty(); break; } --Index; } while (Index >= 0) { if (pParse[Index] == '\\' || pParse[Index] == '/' || pParse[Index] == ':') { BaseFilename = pParse + Index + 1; BaseFilename.Truncate(ExtensionIndex - Index - 1); Path.Copy(pFilename, Index + 1); return true; } --Index; } BaseFilename.Copy(pFilename, ExtensionIndex - Index - 1); return true; }
bool SrFindSubDataPath (const char* pFilename, CSString& OutputPath, CSString& OutputFilename, CSString& OutputExtension) { CSString Path; int Index; SplitFilenameString(pFilename, Path, OutputFilename, OutputExtension); Index = Path.FindRI("\\data\\"); if (Index >= 0) ++Index; else if (Index < 0 && Path.StartsWithI("data\\")) Index = 0; if (Index < 0) { OutputPath.Empty(); return false; } OutputPath.Copy(Path.c_str() + Index + 5, Path.GetLength() - Index - 5); return true; }