⛏️ index : haiku.git

/*
 * Copyright 2007, Axel DΓΆrfler, axeld@pinc-software.de.
 * Distributed under the terms of the MIT License.
 */


#include "cddb.h"


static int32
cddb_sum(int32 n)
{
	int32 result = 0;

	while (n > 0) {
		result = result + (n % 10);
		n = n / 10;
	}

	return result;
}


//	#pragma mark - exported functions


/*!
	Computes the CD Disc ID as specified in the FreeDB how-to (code taken from there).
*/
uint32
compute_cddb_disc_id(scsi_toc_toc &toc)
{
	int32 numTracks = toc.last_track + 1 - toc.first_track;
	uint32 n = 0;

	for (int32 i = 0; i < numTracks; i++) {
		n = n + cddb_sum((toc.tracks[i].start.time.minute * 60)
			+ toc.tracks[i].start.time.second);
	}

	int32 t = ((toc.tracks[numTracks].start.time.minute * 60)
			+ toc.tracks[numTracks].start.time.second)
		- ((toc.tracks[0].start.time.minute * 60)
			+ toc.tracks[0].start.time.second);

	return (n % 0xff) << 24 | t << 8 | numTracks;
}