Reverge Package File (.gfs) parser library for C#
Everything is Big Endian
struct Pascal64String
{
size_t length;
char chars[length];
};
struct Header
{
uint dataOffset;
Pascal64String identifier;
Pascal64String version;
size_t entryCount;
};
struct Entry
{
Pascal64String path;
size_t size;
int alignment;
};
Header header;
Entry entries[header.entryCount];size_t runningOffset = header.dataOffset;
for(size_t i = 0;i < header.entryCount;i++)
{
Entry entry = entries[i];
runningOffset += (entry.alignment - (runningOffset % entry.alignment)) % entry.alignment
// runningOffset is the position of the data from entries[i]
runningOffset += entry.size;
}For reading:
using ThemModdingHerds.GFS;
using ThemModdingHerds.IO;
BinaryReader reader = new BinaryReader(someStreamOrFilePath);
RevergePackage file = reader.ReadRevergePackage(); // extends List<RevergePackageEntry>
RevergePackageHeader header = file.Header; // contains file count, offset, version and file identifier
RevergePackageEntry entry = file[index]; // the entry contains the path to the file and its dataor parsing a folder into one:
using ThemModdingHerds.GFS;
RevergePackage file = RevergePackage.Open(pathToFolder); // now the folder became a .gfs file