Ejemplo n.º 1
0
        public void VerifyBlockIndexes()
        {
            Console.WriteLine("Verifying blocks.");
            VolumeStream.Position = TocOffset + 0x12;
            ushort blockCount = VolumeStream.ReadUInt16();


            BlockInfo      block        = GetBlock(0);
            BlockDebugInfo blockDebInfo = new BlockDebugInfo();

            blockDebInfo.ReadFromBlockInfo(block);

            foreach (var entry in blockDebInfo.Entries)
            {
                var            childIndexBlock   = GetBlock(entry.BlockIndex);
                BlockDebugInfo childblockDebInfo = new BlockDebugInfo();
                childblockDebInfo.ReadFromBlockInfo(childIndexBlock);

                for (int i = 0; i < childblockDebInfo.Entries.Count; i++)
                {
                    BlockDebugEntryInfo cutoff = childblockDebInfo.Entries[i];
                    // Get the entries in the middle
                    var            prevEntryBlock        = GetBlock(cutoff.BlockIndex);
                    BlockDebugInfo prevEntryBlockDebInfo = new BlockDebugInfo();
                    prevEntryBlockDebInfo.ReadFromBlockInfo(prevEntryBlock);

                    var            nextEntryBlock        = GetBlock(cutoff.BlockIndex + 1);
                    BlockDebugInfo nextEntryBlockDebInfo = new BlockDebugInfo();
                    nextEntryBlockDebInfo.ReadFromBlockInfo(nextEntryBlock);


                    var lastEntry = prevEntryBlockDebInfo.Entries[^ 1];
Ejemplo n.º 2
0
        public void ReadFromBlockInfo(BlockInfo block)
        {
            SpanReader sr = new SpanReader(block.BlockBuffer);

            BlockType  = sr.ReadInt16();
            EntryCount = sr.ReadInt16();
            NextPage   = sr.ReadInt32();
            PrevPage   = sr.ReadInt32();
            Entries    = new List <BlockDebugEntryInfo>(EntryCount / 2);

            if (BlockType == 1 && NextPage == -1 && PrevPage == -1)
            {
                IsMasterIndexBlock = true;
            }

            for (int i = 0; i < EntryCount / 2; i++)
            {
                sr.Position = block.ParentVolume.BlockSize - (i * 0x08) - 0x08;
                BlockDebugEntryInfo entry = new BlockDebugEntryInfo();
                entry.ReadFromBuffer(ref sr, BlockType == 1);
                Entries.Add(entry);
            }
        }