public void TestReadingDummyEntry()
        {
            var entry = new ModuleEntryStruct();

            using (var reader = new BinaryReader(new MemoryStream(DummyEntryBytes)))
                entry.Read(reader);

            Assert.AreEqual(1U, entry.NameOffset);
            Assert.AreEqual(2, entry.ParentFileIndex);
            Assert.AreEqual(3, entry.Unknown8);
            Assert.AreEqual(4, entry.UnknownC);
            Assert.AreEqual(5, entry.CompressedBlockCount);
            Assert.AreEqual(6, entry.FirstCompressedBlockIndex);
            Assert.AreEqual(7U, entry.CompressedOffset);
            Assert.AreEqual(8U, entry.TotalCompressedSize);
            Assert.AreEqual(9U, entry.TotalUncompressedSize);
            Assert.AreEqual(10, entry.Unknown28);
            Assert.AreEqual(11, entry.Unknown29);
            Assert.AreEqual(12, entry.Unknown2A);
            Assert.AreEqual(13, entry.Unknown2B);
            Assert.AreEqual(14, entry.GlobalTagId);
            Assert.AreEqual(15, entry.SourceTagId);
            Assert.AreEqual(16, entry.Unknown38);
            Assert.AreEqual(new MagicNumber("abcd"), entry.GroupTag);
            Assert.AreEqual(17U, entry.UncompressedHeaderSize);
            Assert.AreEqual(18U, entry.UncompressedTagDataSize);
            Assert.AreEqual(19U, entry.UncompressedResourceDataSize);
            Assert.AreEqual(20, entry.Unknown50);
            Assert.AreEqual(21, entry.Unknown52);
            Assert.AreEqual(22, entry.Unknown54);
        }
Exemplo n.º 2
0
 internal void BuildResourceList(ModuleEntryStruct data, List <ModuleEntry> resources)
 {
     for (var i = 0; i < data.ResourceCount; i++)
     {
         _resources.Add(resources[data.FirstResourceIndex + i]);
     }
 }
Exemplo n.º 3
0
        private static List <ModuleDataBlock> GetBlockList(ModuleEntryStruct data, ModuleStruct module)
        {
            var blocks = new List <ModuleDataBlock>(data.BlockCount);

            if (data.TotalCompressedSize == 0)
            {
                return(blocks);
            }
            if ((data.Flags & ModuleEntryFlags.HasBlocks) != 0)
            {
                for (var i = 0; i < data.BlockCount; i++)
                {
                    var block = module.DataBlocks[data.FirstBlockIndex + i];
                    blocks.Add(new ModuleDataBlock(block));
                }
            }
            else
            {
                // If an entry has 0 blocks, then make one
                var blockStruct = new ModuleDataBlockStruct
                {
                    Checksum           = data.AssetChecksum,
                    CompressedOffset   = 0,
                    CompressedSize     = data.TotalCompressedSize,
                    Compression        = (data.Flags & ModuleEntryFlags.Compressed) != 0 ? 1 : 0,
                    UncompressedOffset = 0,
                    UncompressedSize   = data.TotalUncompressedSize,
                };
                blocks.Add(new ModuleDataBlock(blockStruct));
            }
            return(blocks);
        }
Exemplo n.º 4
0
 internal ModuleEntry(int index, ModuleEntryStruct data, ModuleStruct module)
 {
     Index                        = index;
     Name                         = module.StringTable.GetStringAtOffset((int)data.NameOffset);
     ParentIndex                  = data.ParentFileIndex;
     Resources                    = _resources.AsReadOnly();
     Blocks                       = GetBlockList(data, module).AsReadOnly();
     DataOffset                   = data.DataOffset;
     TotalCompressedSize          = data.TotalCompressedSize;
     TotalUncompressedSize        = data.TotalUncompressedSize;
     HeaderAlignment              = data.HeaderAlignment;
     TagDataAlignment             = data.TagDataAlignment;
     ResourceDataAlignment        = data.ResourceDataAlignment;
     IsRawFile                    = (data.Flags & ModuleEntryFlags.RawFile) != 0;
     GlobalId                     = data.GlobalId;
     AssetId                      = data.AssetId;
     AssetChecksum                = data.AssetChecksum;
     GroupTag                     = data.GroupTag;
     UncompressedHeaderSize       = data.UncompressedHeaderSize;
     UncompressedTagDataSize      = data.UncompressedTagDataSize;
     UncompressedResourceDataSize = data.UncompressedResourceDataSize;
     HeaderBlockCount             = data.HeaderBlockCount;
     TagDataBlockCount            = data.TagDataBlockCount;
     ResourceBlockCount           = data.ResourceBlockCount;
 }
Exemplo n.º 5
0
        public void TestReadingDummyEntry()
        {
            var entry = new ModuleEntryStruct();

            using (var serializer = new BinarySerializer(new BinaryReader(new MemoryStream(DummyEntryBytes))))
                entry.Serialize(serializer);

            Assert.AreEqual(1U, entry.NameOffset);
            Assert.AreEqual(2, entry.ParentFileIndex);
            Assert.AreEqual(3, entry.ResourceCount);
            Assert.AreEqual(4, entry.FirstResourceIndex);
            Assert.AreEqual(5, entry.BlockCount);
            Assert.AreEqual(6, entry.FirstBlockIndex);
            Assert.AreEqual(7, entry.DataOffset);
            Assert.AreEqual(8U, entry.TotalCompressedSize);
            Assert.AreEqual(9U, entry.TotalUncompressedSize);
            Assert.AreEqual(10, entry.HeaderAlignment);
            Assert.AreEqual(11, entry.TagDataAlignment);
            Assert.AreEqual(12, entry.ResourceDataAlignment);
            Assert.AreEqual((ModuleEntryFlags)13, entry.Flags);
            Assert.AreEqual(14U, entry.GlobalId);
            Assert.AreEqual(15U, entry.AssetId);
            Assert.AreEqual(16U, entry.AssetChecksum);
            Assert.AreEqual(new MagicNumber("abcd"), entry.GroupTag);
            Assert.AreEqual(17U, entry.UncompressedHeaderSize);
            Assert.AreEqual(18U, entry.UncompressedTagDataSize);
            Assert.AreEqual(19U, entry.UncompressedResourceDataSize);
            Assert.AreEqual(20, entry.HeaderBlockCount);
            Assert.AreEqual(21, entry.TagDataBlockCount);
            Assert.AreEqual(22, entry.ResourceBlockCount);
        }
Exemplo n.º 6
0
 internal ModuleEntry(ModuleEntryStruct data, ModuleStruct module)
 {
     Name                         = module.StringTable.GetStringAtOffset((int)data.NameOffset);
     ParentIndex                  = data.ParentFileIndex;
     Unknown8                     = data.Unknown8;
     UnknownC                     = data.UnknownC;
     Blocks                       = GetBlockList(data, module).AsReadOnly();
     CompressedOffset             = data.CompressedOffset;
     TotalCompressedSize          = data.TotalCompressedSize;
     TotalUncompressedSize        = data.TotalUncompressedSize;
     Unknown28                    = data.Unknown28;
     Unknown29                    = data.Unknown29;
     Unknown2A                    = data.Unknown2A;
     Unknown2B                    = data.Unknown2B;
     GlobalTagId                  = data.GlobalTagId;
     SourceTagId                  = data.SourceTagId;
     Unknown38                    = data.Unknown38;
     GroupTag                     = data.GroupTag;
     UncompressedHeaderSize       = data.UncompressedHeaderSize;
     UncompressedTagDataSize      = data.UncompressedTagDataSize;
     UncompressedResourceDataSize = data.UncompressedResourceDataSize;
     Unknown50                    = data.Unknown50;
     Unknown52                    = data.Unknown52;
     Unknown54                    = data.Unknown54;
 }
Exemplo n.º 7
0
        private static List <ModuleEntryBlock> GetBlockList(ModuleEntryStruct data, ModuleStruct module)
        {
            var blocks = new List <ModuleEntryBlock>(data.CompressedBlockCount);

            for (var i = 0; i < data.CompressedBlockCount; i++)
            {
                var block = module.CompressedBlocks[data.FirstCompressedBlockIndex + i];
                blocks.Add(new ModuleEntryBlock(block));
            }
            return(blocks);
        }
        public void TestWritingDummyEntry()
        {
            var entry = new ModuleEntryStruct
            {
                NameOffset                   = 1,
                ParentFileIndex              = 2,
                Unknown8                     = 3,
                UnknownC                     = 4,
                CompressedBlockCount         = 5,
                FirstCompressedBlockIndex    = 6,
                CompressedOffset             = 7,
                TotalCompressedSize          = 8,
                TotalUncompressedSize        = 9,
                Unknown28                    = 10,
                Unknown29                    = 11,
                Unknown2A                    = 12,
                Unknown2B                    = 13,
                GlobalTagId                  = 14,
                SourceTagId                  = 15,
                Unknown38                    = 16,
                GroupTag                     = new MagicNumber("abcd"),
                UncompressedHeaderSize       = 17,
                UncompressedTagDataSize      = 18,
                UncompressedResourceDataSize = 19,
                Unknown50                    = 20,
                Unknown52                    = 21,
                Unknown54                    = 22
            };

            byte[] writtenBytes;
            using (var stream = new MemoryStream())
            {
                using (var writer = new BinaryWriter(stream))
                {
                    entry.Write(writer);
                    writtenBytes = new byte[stream.Length];
                    Buffer.BlockCopy(stream.GetBuffer(), 0, writtenBytes, 0, writtenBytes.Length);
                }
            }
            CollectionAssert.AreEqual(DummyEntryBytes, writtenBytes);
        }
Exemplo n.º 9
0
        public void TestWritingDummyEntry()
        {
            var entry = new ModuleEntryStruct
            {
                NameOffset            = 1,
                ParentFileIndex       = 2,
                ResourceCount         = 3,
                FirstResourceIndex    = 4,
                BlockCount            = 5,
                FirstBlockIndex       = 6,
                DataOffset            = 7,
                TotalCompressedSize   = 8,
                TotalUncompressedSize = 9,
                HeaderAlignment       = 10,
                TagDataAlignment      = 11,
                ResourceDataAlignment = 12,
                Flags                        = (ModuleEntryFlags)13,
                GlobalId                     = 14,
                AssetId                      = 15,
                AssetChecksum                = 16,
                GroupTag                     = new MagicNumber("abcd"),
                UncompressedHeaderSize       = 17,
                UncompressedTagDataSize      = 18,
                UncompressedResourceDataSize = 19,
                HeaderBlockCount             = 20,
                TagDataBlockCount            = 21,
                ResourceBlockCount           = 22
            };

            byte[] writtenBytes;
            using (var stream = new MemoryStream())
            {
                using (var serializer = new BinarySerializer(new BinaryWriter(stream)))
                {
                    entry.Serialize(serializer);
                    writtenBytes = new byte[stream.Length];
                    Buffer.BlockCopy(stream.GetBuffer(), 0, writtenBytes, 0, writtenBytes.Length);
                }
            }
            CollectionAssert.AreEqual(DummyEntryBytes, writtenBytes);
        }