protected int GetEndSector2(int track) { if (TocValid && (track >= Toc.FirstTrack) && (track <= Toc.LastTrack)) { Win32Functions.TRACK_DATA td = Toc.TrackData[track]; return((td.Address_1 * 60 * 75 + td.Address_2 * 75) - 151); } else { return(-1); } }
/// <summary> /// Retrieve the data required to perform a CDDB Query /// </summary> /// <returns></returns> public string GetCDDBQuery() { int numTracks = GetNumTracks(); if (numTracks == -1) { throw new Exception("Unable to retrieve the number of tracks, Cannot calculate DiskID."); } string postfix = numTracks.ToString(); int i, t = 0, n = 0; double ofs = 0; int secs = 0; /* For backward compatibility this algorithm must not change */ i = 0; while (i < numTracks) { Console.WriteLine("Track {0}: {1}:{2}", i, GetSeconds(i) / 60, GetSeconds(i) % 60); ofs = (((Toc.TrackData[i].Address_1 * 60) + Toc.TrackData[i].Address_2) * 75) + Toc.TrackData[i].Address_3; n = n + cddb_sum((Toc.TrackData[i].Address_1 * 60) + Toc.TrackData[i].Address_2); secs += GetSeconds(i); postfix += "+" + string.Format("{0}", ofs); i++; } int numSecs = Toc.TrackData[i].Address_1 * 60 + Toc.TrackData[i].Address_2; Console.WriteLine("n = {0}, numSecs = {1}, secs = {2}", n, numSecs, secs); postfix += "+" + numSecs; Win32Functions.TRACK_DATA last = Toc.TrackData[numTracks]; Win32Functions.TRACK_DATA first = Toc.TrackData[0]; t = ((last.Address_1 * 60) + last.Address_2) - ((first.Address_1 * 60) + first.Address_2); ulong lDiscId = (((uint)n % 0xff) << 24 | (uint)t << 8 | (uint)numTracks); string sDiscId = String.Format("{0:x8}", lDiscId); string qs = sDiscId + "+" + postfix; return(qs); }