public void Read(FileReader reader) { IsBigEndian = CheckEndianness(reader); reader.SetByteOrder(IsBigEndian); reader.ReadSignature(4, "RSTB"); uint Crc32TableCount = reader.ReadUInt32(); uint NameTableCount = reader.ReadUInt32(); for (int i = 0; i < Crc32TableCount; i++) { uint Crc32 = reader.ReadUInt32(); uint Size = reader.ReadUInt32(); Crc32Tables.Add(Crc32, Size); } for (int i = 0; i < NameTableCount; i++) { string Name = reader.ReadString(128); uint Size = reader.ReadUInt32(); NameTables.Add(Name, Size); } reader.Close(); reader.Dispose(); }
public void Write(FileWriter writer) { writer.SetByteOrder(IsBigEndian); writer.WriteSignature("RSTB"); writer.Write(Crc32Tables.Count); writer.Write(NameTables.Count); var Crc32Sorted = Crc32Tables.OrderBy(x => x.Key); var NamesSorted = NameTables.OrderBy(x => x.Key); foreach (var table in Crc32Sorted) { writer.Write(table.Key); writer.Write(table.Value); } foreach (var table in NamesSorted) { writer.Write(table.Key.ToByteArray(128)); writer.Write(table.Value); } writer.Close(); writer.Dispose(); }
public bool IsInTable(string Name) { uint Crc32 = Name.EncodeCrc32(); if (Crc32Tables.ContainsKey(Crc32) || NameTables.ContainsKey(Name)) { return(true); } return(false); }
//Gets the size of the resource in the RSTB public uint GetSize(string Name) { uint Crc32 = Name.EncodeCrc32(); if (Crc32Tables.ContainsKey(Crc32)) { return(Crc32Tables[Crc32]); } if (NameTables.ContainsKey(Name)) { return(NameTables[Name]); } return(0); }
public void DeleteEntry(string FileName) { if (!IsInTable(FileName)) { MessageBox.Show("File not in table! Could not remove entry! " + FileName); } uint Crc32 = FileName.EncodeCrc32(); if (Crc32Tables.ContainsKey(Crc32)) { Crc32Tables.Remove(Crc32); } if (NameTables.ContainsKey(FileName)) { NameTables.Remove(FileName); } }