Пример #1
0
        public DDTDirectoryEntry(BinaryReader reader, DDTEntry parent, int nameOffset, uint dataOffset, int numChildren)
        {
            _parent = parent;
            _nameOffset = nameOffset;
            _dataOffset = dataOffset;
            _name = reader.ReadCStringAtOffset(_nameOffset);
            _numChildren = numChildren;
            _childEntries = new DDTEntry[numChildren];

            reader.Seek(dataOffset, SeekOrigin.Begin);
            for (int i = 0; i < numChildren; i++)
            {
                _childEntries[i] = DDTEntryFactory.GetEntry(this, reader);
            }
        }
Пример #2
0
        public static DDTEntry GetEntry(DDTEntry parent, BinaryReader reader)
        {
            int nameOffset = reader.ReadInt32();
            uint dataOffset = reader.ReadUInt32();
            int numData = reader.ReadInt32();

            long posNextEntry = reader.GetPosition();

            DDTEntry entry;

            if (numData < 0)
            {
                int numChildren = ~numData + 1;
                entry = new DDTDirectoryEntry(reader, parent, nameOffset, dataOffset, numChildren);
            }
            else
            {
                entry = new DDTFileEntry(reader, parent, nameOffset, dataOffset, numData);
            }

            reader.Seek(posNextEntry, SeekOrigin.Begin);

            return entry;
        }
Пример #3
0
 public DDTFileEntry(BinaryReader reader, DDTEntry parent, int nameOffset, uint dataOffset, int size)
 {
     _parent = parent;
     _nameOffset = nameOffset;
     _name = reader.ReadCStringAtOffset(_nameOffset);
     _dataOffset = dataOffset * DDTFile.IMG_BLOCKSIZE;
     _size = size;
 }