From e57ab1025dcd8b9c1a9719afebe260ede68db750 Mon Sep 17 00:00:00 2001
From: Thomas Harte <thomas.harte@gmail.com>
Date: Wed, 3 Aug 2016 22:33:00 -0400
Subject: [PATCH] Fixed location calculation, up to a point.

---
 Storage/Disk/PCMTrack.cpp | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/Storage/Disk/PCMTrack.cpp b/Storage/Disk/PCMTrack.cpp
index fc1d9ebfc..81cdb803c 100644
--- a/Storage/Disk/PCMTrack.cpp
+++ b/Storage/Disk/PCMTrack.cpp
@@ -67,26 +67,26 @@ Time PCMTrack::seek_to(Time time_since_index_hole)
 
 	// pick a common clock rate for counting time on this track and multiply up the time being sought appropriately
 	Time time_so_far;
-	time_so_far.clock_rate = NumberTheory::least_common_multiple(_track_clock_rate, time_since_index_hole.clock_rate);
+	time_so_far.clock_rate = NumberTheory::least_common_multiple(_next_event.length.clock_rate, time_since_index_hole.clock_rate);
 	time_since_index_hole.length *= time_so_far.clock_rate / time_since_index_hole.clock_rate;
 	time_since_index_hole.clock_rate = time_so_far.clock_rate;
 
 	while(_segment_pointer < _segments.size())
 	{
 		// determine how long this segment is in terms of the master clock
-		unsigned int clock_multiplier = time_so_far.clock_rate / _segments[_segment_pointer].length_of_a_bit.clock_rate;
-		unsigned int resolution_in_this_segment = _segments[_segment_pointer].length_of_a_bit.length * clock_multiplier;
-		unsigned int time_in_this_segment = resolution_in_this_segment * _segments[_segment_pointer].number_of_bits;
+		unsigned int clock_multiplier = time_so_far.clock_rate / _next_event.length.clock_rate;
+		unsigned int bit_length = ((clock_multiplier / _track_clock_rate) / _segments[_segment_pointer].length_of_a_bit.clock_rate) * _segments[_segment_pointer].length_of_a_bit.length;
+		unsigned int time_in_this_segment = bit_length * _segments[_segment_pointer].number_of_bits;
 
 		// if this segment goes on longer than the time being sought, end here
 		unsigned int time_remaining = time_since_index_hole.length - time_so_far.length;
 		if(time_in_this_segment >= time_remaining)
 		{
 			// get the amount of time actually to move into this segment
-			unsigned int time_found = time_remaining - (time_remaining % resolution_in_this_segment);
+			unsigned int time_found = time_remaining - (time_remaining % bit_length);
 
 			// resolve that into the stateful bit count
-			_bit_pointer = time_remaining / resolution_in_this_segment;
+			_bit_pointer = time_remaining / bit_length;
 
 			// update and return the time sought to
 			time_so_far.length += time_found;