diff options
Diffstat (limited to 'kscd/workman2cddb.pl')
-rwxr-xr-x | kscd/workman2cddb.pl | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/kscd/workman2cddb.pl b/kscd/workman2cddb.pl new file mode 100755 index 00000000..539ce929 --- /dev/null +++ b/kscd/workman2cddb.pl @@ -0,0 +1,86 @@ +#!/usr/bin/perl +# +# usage: just start it. Then copy the files to the local database. +# +# I have a extra cddb category (x-converted) for them, becauce I'm to +# lazy to sort them all into the right category... +# +# make sure the output directory does *not* exist, the script refuses +# to work if it does (just to make sure that it does not overwrite +# something important) +# +# (c) 1998 Gerd Knorr <kraxel@cs.tu-berlin.de> / Copying: GNU GPL +# + +# config: output directory +$dir="/tmp/cddb"; + +############################################################################# + +$out=0; +open(IN,"$ENV{'HOME'}/.workmandb") ||\ + die "open $ENV{'HOME'}/.workmandb: $!"; +mkdir("$dir",0777) || die "mkdir $dir: $!"; + +while (<IN>) { + if (/^tracks/) { + if ($out) { + print OUT "EXTD=\n"; + for ($i = 2, $n = 0; $i < $t[1]+2; $i++) { + printf OUT "EXTT%d=\n",$i-2; + } + print OUT "PLAYORDER=\n"; + close OUT; + } + @t = split; + for ($i = 2, $n = 0; $i < $t[1]+2; $i++) { + $len = $t[$i]/75; + for ($quer = 0; $len > 0; $quer += $len % 10, $len /= 10) {}; + $n += $quer + ($len % 60); + } + $m = ($t[$t[1]+2] - int($t[2]/75)); + $id = (($n % 0xff) << 24) | ($m << 8) | $t[1]; + $magic = sprintf("%08x",$id); + open(OUT,">$dir/$magic") || die "open $dir/$magic: $!"; + $out=1; + } + + $cdname = $1 if (/^cdname (.*)/); + if (/^artist (.*)/) { + $artist = $1; + + print OUT "# xmcd 2.0 CD database file\n"; + print OUT "#\n"; + print OUT "# Track frame offsets:\n"; + for ($i = 2, $n = 0; $i < $t[1]+2; $i++) { + print OUT "#\t$t[$i]\n"; + } + print OUT "#\n"; + print OUT "# Disc length: $t[$t[1]+2] seconds\n"; + print OUT "#\n"; + print OUT "# Revision: 1\n"; + print OUT "# Submitted via: wdb2cddb 1.0\n"; + print OUT "#\n"; + + print OUT "DISCID=$magic\n"; + print OUT "DTITLE=$artist / $cdname\n"; + print "$magic - $artist / $cdname\n"; + $track=0; + } + if (/^track (.*)/) { + print OUT "TTITLE$track=$1\n"; + $track++; + } +} + +close IN; + +print OUT "EXTD=\n"; +for ($i = 2, $n = 0; $i < $t[1]+2; $i++) { + printf OUT "EXTT%d=\n",$i-2; +} +print OUT "PLAYORDER=\n"; +close OUT; + +print "\n*** The CDDB files are in $dir ***\n\n"; + |