byte *FindXprData(const char *Name, int *DataSize) { // scan xprs static bool ready = false; if (!ready) { ready = true; appEnumGameFiles(ReadXprFile, "xpr"); } // find a file for (int i = 0; i < xprFiles.Num(); i++) { XprInfo *Info = &xprFiles[i]; for (int j = 0; j < Info->Items.Num(); j++) { XprEntry *File = &Info->Items[j]; if (strcmp(File->Name, Name) == 0) { // found appPrintf("Loading stream %s from %s (%d bytes)\n", Name, Info->File->RelativeName, File->DataSize); FArchive *Reader = appCreateFileReader(Info->File); Reader->Seek(File->DataOffset); byte *buf = (byte*)appMalloc(File->DataSize); Reader->Serialize(buf, File->DataSize); delete Reader; if (DataSize) *DataSize = File->DataSize; return buf; } } } appPrintf("WARNING: external stream %s was not found\n", Name); if (DataSize) *DataSize = 0; return NULL; }
static void BioReadBulkCatalog() { static bool ready = false; if (ready) return; ready = true; appEnumGameFiles(BioReadBulkCatalogFile, "bdc"); if (!bioCatalog.Num()) appPrintf("WARNING: no *.bdc files found\n"); }
bool ScanPackages(TArray<FileInfo>& info, IProgressCallback* progress) { info.Empty(); ScanPackageData data; data.PkgInfo = &info; data.Progress = progress; appEnumGameFiles(ScanPackage, data); info.Sort(InfoCmp); return !data.Cancelled; }
//?? TODO: may be pass "Ext" here void appFindGameFiles(const char *Filename, TArray<const CGameFileInfo*>& Files) { guard(appFindGameFiles); if (!appContainsWildcard(Filename)) { const CGameFileInfo* File = appFindGameFile(Filename); if (File) Files.Add(File); return; } // here we're working with wildcard and should iterate over all files char buf[MAX_PACKAGE_PATH]; appStrncpyz(buf, Filename, ARRAY_COUNT(buf)); // replace backslashes bool containsPath = false; for (char* s = buf; *s; s++) { char c = *s; if (c == '\\') { *s = '/'; containsPath = true; } else if (c == '/') { containsPath = true; } } FindPackageWildcardData findData; findData.WildcardContainsPath = containsPath; findData.Wildcard = buf; appEnumGameFiles(FindPackageWildcardCallback, findData); CopyArray(Files, findData.FoundFiles); unguardf("wildcard=%s", Filename); }