예제 #1
0
 public FileEntry(MixedString name, byte[] file, int linkStartIndex, int linkCount)
 {
     Name           = name;
     File           = file;
     LinkStartIndex = linkStartIndex;
     LinkCount      = linkCount;
 }
예제 #2
0
 public Tid(Bitmap bitmap, MixedString filename, CompressionAlgorithm compression = CompressionAlgorithm.None, byte version = 0x90)
 {
     Bitmap      = bitmap;
     Filename    = filename.GetCustomLength(0x20);
     Compression = compression;
     Version     = version;
     Loaded      = true;
 }
예제 #3
0
        public PacEntry(Pac archive, MixedString path, bool compressed, int decompressedSize, Stream fileStream, int fileOffset, int fileSize, bool cacheFromStream, bool keepCompressed)
        {
            Contract.Requires <ArgumentNullException>(archive != null);

            Archive = archive;
            Path    = path;
            SetFile(compressed, decompressedSize, fileStream, fileOffset, fileSize, cacheFromStream, keepCompressed);
        }
예제 #4
0
        public PacEntry(Pac archive, MixedString path, bool compressed, int decompressedSize, byte[] file, bool keepCompressed)
        {
            Contract.Requires <ArgumentNullException>(archive != null);

            Archive = archive;
            Path    = path;
            SetFile(compressed, decompressedSize, file, keepCompressed);
        }
예제 #5
0
        private static Section ReadSection(EndianBinaryReader reader, uint offset)
        {
            reader.BaseStream.Seek(offset, SeekOrigin.Begin);

            MixedString name       = reader.ReadBytes(0x20);
            var         count      = reader.ReadInt32();
            var         dataSize   = reader.ReadInt32();
            var         dataOffset = reader.ReadInt32();

            string realName = name.ZeroTerminatedString;

            if (realName == "FILE_COLLECTION")
            {
                var fileEntries = new List <FileEntry>();
                for (int i = 0; i < count; i++)
                {
                    reader.BaseStream.Seek(dataOffset + i * 0x230, SeekOrigin.Begin);
                    var fileName   = reader.ReadBytes(0x200);
                    var fileId     = reader.ReadInt32();
                    var fileOffset = reader.ReadInt32();
                    var fileSize   = reader.ReadInt32();
                    var linkIndex  = reader.ReadInt32();
                    var linkCount  = reader.ReadInt32();

                    reader.BaseStream.Seek(fileOffset + dataOffset, SeekOrigin.Begin);
                    var file = reader.ReadBytes(fileSize);

                    fileEntries.Add(new FileEntry(fileName, file, linkIndex, linkCount));
                }

                return(new Section <FileEntry>(name, fileEntries));
            }
            if (realName == "FILE_LINK")
            {
                var fileLinks = new List <FileLink>();
                for (int i = 0; i < count; i++)
                {
                    reader.BaseStream.Seek(dataOffset + i * 0x20 + 0x04, SeekOrigin.Begin);
                    fileLinks.Add(new FileLink(reader.ReadUInt32(), reader.ReadUInt32()));
                }
                return(new Section <FileLink>(name, fileLinks));
            }

            reader.BaseStream.Seek(dataOffset, SeekOrigin.Begin);
            return(new UnknownSection(name, reader.ReadBytes(dataSize), count));
        }
 public UnknownSection(MixedString name, byte[] data, int count)
 {
     Name  = name;
     Data  = data;
     Count = count;
 }
예제 #7
0
 public Section(MixedString name, List <T> entries)
 {
     Name    = name;
     Entries = entries;
 }