File: mp3key.c

package info (click to toggle)
linux-minidisc 0.9.13-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 2,096 kB
  • ctags: 1,530
  • sloc: ansic: 6,345; cpp: 2,569; python: 2,451; perl: 866; sh: 22; makefile: 8
file content (34 lines) | stat: -rw-r--r-- 883 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>

/* Test vector: 1 CAEF24F1 -> A350796F */

int main(int argc, char ** argv)
{
    unsigned int trknum = 1;
    unsigned int discid;
    char dummy;
    
    if(argc != 3)
    {
        fprintf(stderr, "Please invoke as 'mp3key <tracknum> <discid>'\n"
                        "where tracknum is a decimal track number and discid is the last 8\n"
                        "digits (4 bytes) of the hex disc id\n");
        return 1;
    }
    
    if(sscanf(argv[1],"%d%c",&trknum,&dummy) != 1)
    {
        fprintf(stderr, "Track number is not a decimal integer\n");
        return 1;
    }
    if(sscanf(argv[2],"%x%c",&discid,&dummy) != 1)
    {
        fprintf(stderr, "Disk ID is not an 8 digit hex string\n");
        return 1;
    }
    
    unsigned int foo = ((trknum*0x6953B2ED)+0x6BAAB1) ^ discid;

    printf("%08X\n", foo & 0xFFFFFFFF);
    return 0;
}