bool ImageDirEngineImpl::LoadImageDir(const TCHAR *dirName) { fileName = str::Dup(dirName); fileExt = _T(""); ScopedMem<TCHAR> pattern(path::Join(dirName, _T("*"))); WIN32_FIND_DATA fdata; HANDLE hfind = FindFirstFile(pattern, &fdata); if (INVALID_HANDLE_VALUE == hfind) return false; do { if (!(fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { if (ImageEngine::IsSupportedFile(fdata.cFileName)) pageFileNames.Append(path::Join(dirName, fdata.cFileName)); } } while (FindNextFile(hfind, &fdata)); FindClose(hfind); if (pageFileNames.Count() == 0) return false; pageFileNames.SortNatural(); pages.AppendBlanks(pageFileNames.Count()); mediaboxes.AppendBlanks(pageFileNames.Count()); return true; }
bool StressTest::OpenDir(const TCHAR *dirPath) { assert(filesToOpen.Count() == 0); bool hasFiles = CollectStressTestSupportedFilesFromDirectory(dirPath, fileFilter, filesToOpen); filesToOpen.SortNatural(); ScopedMem<TCHAR> pattern(str::Format(_T("%s\\*"), dirPath)); bool hasSubDirs = CollectPathsFromDirectory(pattern, dirsToVisit, true); return hasFiles || hasSubDirs; }
// parses a list of page ranges such as 1,3-5,7- (i..e all but pages 2 and 6) // into an interable list (returns NULL on parsing errors) // caller must delete the result static bool ParsePageRanges(const TCHAR *ranges, Vec<PageRange>& result) { if (!ranges) return false; StrVec rangeList; rangeList.Split(ranges, _T(","), true); rangeList.SortNatural(); for (size_t i = 0; i < rangeList.Count(); i++) { int start, end; if (str::Parse(rangeList.At(i), _T("%d-%d%$"), &start, &end) && 0 < start && start <= end) result.Append(PageRange(start, end)); else if (str::Parse(rangeList.At(i), _T("%d-%$"), &start) && 0 < start) result.Append(PageRange(start, INT_MAX)); else if (str::Parse(rangeList.At(i), _T("%d%$"), &start) && 0 < start) result.Append(PageRange(start, start)); else return false; } return result.Count() > 0; }