public bool MovePrevious() { AllocationTableEntry currentEntry = Fat.Entries[PhysicalBlock + 1]; if (currentEntry.IsListStart()) { return(false); } int newBlock = currentEntry.Prev & 0x7FFFFFFF; AllocationTableEntry newEntry = Fat.Entries[newBlock]; if (newEntry.IsSingleBlockSegment()) { CurrentSegmentSize = 1; } else { AllocationTableEntry lengthEntry = Fat.Entries[newBlock + 1]; CurrentSegmentSize = lengthEntry.Next - (newBlock - 1); } VirtualBlock -= CurrentSegmentSize; PhysicalBlock = newBlock - 1; return(true); }
public bool BeginIteration(int initialBlock) { AllocationTableEntry tableEntry = Fat.Entries[initialBlock + 1]; if (!tableEntry.IsListStart()) { return(false); } if (tableEntry.IsSingleBlockSegment()) { CurrentSegmentSize = 1; } else { AllocationTableEntry lengthEntry = Fat.Entries[initialBlock + 2]; CurrentSegmentSize = lengthEntry.Next - initialBlock; } PhysicalBlock = initialBlock; return(true); }