#include "mapviewer.h" using namespace std; void CDirectory::AppendFromDir(FILE *Dir, const char *ContFile) { int i, j; int Size, numEntries; DirEntry Entry; char fourcc[45]; if (fread(fourcc, 1, 4, Dir) != 4) exiterror("Error in file", ContFile); fourcc[4] = '\0'; if (strcmp(fourcc, "VER2") == 0) { if (fread(&numEntries, 4, 1, Dir) != 1) exiterror("Error in file", ContFile); } else { fseek(Dir, 0, SEEK_END); Size = ftell(Dir); numEntries = Size / 32; fseek(Dir, 0, SEEK_SET); } for (i = 0; i < numEntries; i++) { if (fread(&Entry.Start, 4, 1, Dir) != 1) exiterror("Error in file", ContFile); if (fread(&Entry.Size, 4, 1, Dir) != 1) exiterror("Error in file", ContFile); Entry.Start *= 2048; Entry.Size *= 2048; if (fread(Entry.FileName, 1, 24, Dir) != 24) exiterror("Error in file", ContFile); strcpy(Entry.ContFile, ContFile); for (j = 0; j < strlen(Entry.FileName); j++) { if (islower(Entry.FileName[j])) Entry.FileName[j] = toupper(Entry.FileName[j]); } Entry.Data = NULL; Entry.Parent = NULL; Entry.Unloadable = false; Entry.RefCount = 0; // cout << Entry.FileName << endl; Append(Entry); } } void CDirectory::Append(DirEntry &d) { DirEntry *Entry; Entry = GetEntry(d.FileName); if (Entry == NULL) FileList.push_back(d); else { strcpy(Entry->FileName, d.FileName); Entry->Start = d.Start; Entry->Size = d.Size; strcpy(Entry->ContFile, d.ContFile); } } void CDirectory::Append(const char *FileName, uint Start, uint Size, const char *ContFile, void *Data) { DirEntry d; strcpy(d.FileName, FileName); d.Start = Start; d.Size = Size; strcpy(d.ContFile, ContFile); d.Data = Data; d.RefCount = 0; d.Parent = NULL; Append(d); } DirEntry *CDirectory::GetEntry(const char *Name, const char *Ext) { char FileName[48]; strcpy(FileName, Name); strcat(FileName, Ext); return GetEntry(FileName); } DirEntry *CDirectory::GetEntry(const char *Name) { uint i; for (i = 0; i < FileList.size(); i++) if (strcmp(FileList[i].FileName, Name) == 0) return &FileList[i]; return NULL; } void CDirectory::Dump() { uint i; for (i = 0; i < FileList.size(); i++) { if (strcmp(FileList[i].FileName, "GENERIC.TXD") == 0) cout << FileList[i].FileName << endl; } }