starting d2 cd detection (cddb discid) support
authorBradley Bell <btb@icculus.org>
Thu, 20 Mar 2003 04:05:12 +0000 (04:05 +0000)
committerBradley Bell <btb@icculus.org>
Thu, 20 Mar 2003 04:05:12 +0000 (04:05 +0000)
ChangeLog
arch/sdl/rbaudio.c
include/rbaudio.h

index a63ed4d..64f46b4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2003-03-19  Bradley Bell  <btb@icculus.org>
 
+       * arch/sdl/rbaudio.c, include/rbaudio.h: starting d2 cd detection
+       (cddb discid) support
+
        * arch/sdl/digi.c, main/kludge.c: implemented
        digi_link_sound_to_object3 for looping sounds, other looping stuff
 
index a53df1a..33b20cc 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: rbaudio.c,v 1.6 2003-03-19 19:21:34 btb Exp $ */
+/* $Id: rbaudio.c,v 1.7 2003-03-20 04:05:12 btb Exp $ */
 /*
  *
  * SDL CD Audio functions
@@ -161,3 +161,43 @@ int CD_blast_mixer()
 {
        return 0;
 }
+
+
+static int cddb_sum(int n)
+{
+       int ret;
+
+       /* For backward compatibility this algorithm must not change */
+
+       ret = 0;
+
+       while (n > 0) {
+               ret = ret + (n % 10);
+               n = n / 10;
+       }
+
+       return (ret);
+}
+
+
+unsigned long RBAGetDiscID()
+{
+       int i, t = 0, n = 0;
+
+       if (!initialised)
+               return 0;
+
+       /* For backward compatibility this algorithm must not change */
+
+       i = 0;
+
+       while (i < s_cd->numtracks) {
+               n = n + cddb_sum(s_cd->track[i].length / CD_FPS);
+               i++;
+       }
+
+       t = (s_cd->track[s_cd->numtracks].length / CD_FPS) -
+           (s_cd->track[0].length / CD_FPS);
+
+       return ((n % 0xff) << 24 | t << 8 | s_cd->numtracks);
+}
index d0834b1..216a61f 100644 (file)
@@ -54,4 +54,7 @@ extern int    RBAResume();
 //is called.  Returns 0 if no track playing, else track number
 int RBAGetTrackNum();
 
+// get the cddb discid for the current cd.
+unsigned long RBAGetDiscID();
+
 #endif