コード例 #1
0
        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();
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        public bool IsInTable(string Name)
        {
            uint Crc32 = Name.EncodeCrc32();

            if (Crc32Tables.ContainsKey(Crc32) || NameTables.ContainsKey(Name))
            {
                return(true);
            }

            return(false);
        }
コード例 #4
0
        //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);
        }
コード例 #5
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);
            }
        }