wchar_t* WINAPI TruncPathStr(wchar_t *Str, int MaxLength) { assert(MaxLength >= 0); MaxLength=Max(0, MaxLength); if (Str) { int nLength = (int)wcslen(Str); if ((MaxLength > 0) && (nLength > MaxLength) && (nLength >= 2)) { wchar_t *lpStart = nullptr; if (*Str && (Str[1] == L':') && IsSlash(Str[2])) lpStart = Str+3; else { if ((Str[0] == L'\\') && (Str[1] == L'\\')) { if ((lpStart = const_cast<wchar_t*>(FirstSlash(Str+2))) ) { wchar_t *lpStart2=lpStart; if ((lpStart-Str < nLength) && ((lpStart=const_cast<wchar_t*>(FirstSlash(lpStart2+1))))) lpStart++; } } } if (!lpStart || (lpStart-Str > MaxLength-5)) return TruncStr(Str, MaxLength); wchar_t *lpInPos = lpStart+3+(nLength-MaxLength); wmemmove(lpStart+3, lpInPos, (wcslen(lpInPos)+1)); wmemcpy(lpStart, L"...", 3); } } return Str; }
void FilePanels::GoToFile(const wchar_t *FileName) { if (FirstSlash(FileName)) { string ADir,PDir; Panel *PassivePanel = GetAnotherPanel(ActivePanel); int PassiveMode = PassivePanel->GetMode(); if (PassiveMode == NORMAL_PANEL) { PassivePanel->GetCurDir(PDir); AddEndSlash(PDir); } int ActiveMode = ActivePanel->GetMode(); if (ActiveMode==NORMAL_PANEL) { ActivePanel->GetCurDir(ADir); AddEndSlash(ADir); } string strNameFile = PointToName(FileName); string strNameDir = FileName; CutToSlash(strNameDir); /* $ 10.04.2001 IS Не делаем SetCurDir, если нужный путь уже есть на открытых панелях, тем самым добиваемся того, что выделение с элементов панелей не сбрасывается. */ BOOL AExist=(ActiveMode==NORMAL_PANEL) && !StrCmpI(ADir,strNameDir); BOOL PExist=(PassiveMode==NORMAL_PANEL) && !StrCmpI(PDir,strNameDir); // если нужный путь есть на пассивной панели if (!AExist && PExist) ProcessKey(KEY_TAB); if (!AExist && !PExist) ActivePanel->SetCurDir(strNameDir,TRUE); ActivePanel->GoToFile(strNameFile); // всегда обновим заголовок панели, чтобы дать обратную связь, что // Ctrl-F10 обработан ActivePanel->SetTitle(); } }
bool IsPluginPrefixPath(const wchar_t *Path) //Max: { if (Path[0] == L'\\') return false; const wchar_t* pC = wcschr(Path, L':'); if (!pC) return false; if ((pC - Path) == 1) // односимвольные префиксы не поддерживаются return false; const wchar_t* pS = FirstSlash(Path); if (pS && pS < pC) return false; return true; }
static int WipeDirectory(const string& Name) { string strTempName, strPath; if (FirstSlash(Name.data())) { strPath = Name; DeleteEndSlash(strPath); CutToSlash(strPath); } FarMkTempEx(strTempName,nullptr, FALSE, strPath.empty()?nullptr:strPath.data()); if (!os::MoveFile(Name, strTempName)) { return FALSE; } return os::RemoveDirectory(strTempName); }
int WipeDirectory(const string& Name) { string strTempName, strPath; if (FirstSlash(Name)) { strPath = Name; DeleteEndSlash(strPath); CutToSlash(strPath); } FarMkTempEx(strTempName,nullptr, FALSE, strPath.IsEmpty()?nullptr:strPath.CPtr()); if (!apiMoveFile(Name, strTempName)) { return FALSE; } return apiRemoveDirectory(strTempName); }
int WipeDirectory(const wchar_t *Name) { string strTempName, strPath; if (FirstSlash(Name)) { strPath = Name; DeleteEndSlash(strPath); CutToSlash(strPath); } FarMkTempEx(strTempName,nullptr, FALSE, strPath.IsEmpty()?nullptr:strPath.CPtr()); if (!apiMoveFile(Name, strTempName)) { SetLastError((_localLastError = GetLastError())); return FALSE; } return apiRemoveDirectory(strTempName); }