Windows-Server-2003/sdktools/cddump/cddb.c

76 lines
1.2 KiB
C

/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
cddb.c
Abstract:
cddb support
Environment:
User mode only
Revision History:
05-26-98 : Created
--*/
#include "common.h"
ULONG
CDDB_ID(
PCDROM_TOC toc
)
{
ULONG i,n,j;
ULONG cddbSum;
ULONG totalLength;
ULONG totalTracks;
ULONG finalDiscId;
i = 0;
n = 0;
totalTracks = toc->LastTrack - toc->FirstTrack;
totalTracks++; // MCI difference
while (i < totalTracks) {
// cddb_sum
cddbSum = 0;
j = (toc->TrackData[i].Address[1] * 60) +
(toc->TrackData[i].Address[2]);
while (j > 0) {
cddbSum += j % 10;
j /= 10;
}
n += cddbSum;
i++;
}
// compute total cd length in seconds
totalLength =
((toc->TrackData[totalTracks].Address[1] * 60) +
(toc->TrackData[totalTracks].Address[2])
) -
((toc->TrackData[0].Address[1] * 60) +
(toc->TrackData[0].Address[2])
);
finalDiscId = (((n % 0xff) << 24) |
(totalLength << 8) |
(totalTracks)
);
return finalDiscId;
}