#!/usr/bin/perl
# Philip Shuman philip at shuman dot org http://www.shuman.org
# cdList.pl v0.2.1
$address_file = "cd_list";
&writeHeader;
&readEnv;
&readLines;
&writeInfo;
&writeFooter;
sub writeInfo {
print "
\n";
if ($FORM{'sortby'} eq "album") {
print " ";
print " | ";
print "";
print " Sort by: Artist | ";
print " Album | \n";
print " CDDB Genre | \n";
print " CDDB ID | \n";
print "
\n";
%dbk = reverse %ALBUM_UNIQUE;
my $i = 0;
foreach $lkey (sort { lc($a) cmp lc($b) } keys %dbk) {
print " \n";
$i++;
print "| $i | ";
print " $ARTIST{$dbk{$lkey}} | \n";
print " $ALBUM{$dbk{$lkey}} | \n";
print " $GENRE{$dbk{$lkey}} | \n";
print " ";
print "$ID{$dbk{$lkey}} | \n";
print "
\n";
}
}
elsif ($FORM{'sortby'} eq "id") {
print " ";
print " | ";
print "";
print " Sort by: Artist | ";
print " Album | \n";
print " CDDB Genre | \n";
print " CDDB ID | \n";
print "
\n";
%dbk = reverse %ID_UNIQUE;
my $i = 0;
foreach $lkey (sort { lc($a) cmp lc($b) } keys %dbk) {
print " \n";
$i++;
print "| $i | ";
print " $ARTIST{$dbk{$lkey}} | \n";
print " $ALBUM{$dbk{$lkey}} | \n";
print " $GENRE{$dbk{$lkey}} | \n";
print " ";
print "$ID{$dbk{$lkey}} | \n";
print "
\n";
}
}
elsif ($FORM{'sortby'} eq "genre") {
print " ";
print " | ";
print "";
print " Sort by: Artist | ";
print " Album | \n";
print " CDDB Genre | \n";
print " CDDB ID | \n";
print "
\n";
%dbk = reverse %GENRE_UNIQUE;
my $i = 0;
foreach $lkey (sort { lc($a) cmp lc($b) } keys %dbk) {
print " \n";
$i++;
print "| $i | ";
print " $ARTIST{$dbk{$lkey}} | \n";
print " $ALBUM{$dbk{$lkey}} | \n";
print " $GENRE{$dbk{$lkey}} | \n";
print " ";
print "$ID{$dbk{$lkey}} | \n";
print "
\n";
}
}
else {
print " | ";
print " Sort by: Artist | ";
print " Album | \n";
print " CDDB Genre | \n";
print " CDDB ID | \n";
print "
\n";
%dbk = reverse %ARTIST_UNIQUE;
my $i = 0;
foreach $lkey (sort { lc($a) cmp lc($b) } keys %dbk) {
print " \n";
$i++;
print "| $i | ";
print " $ARTIST{$dbk{$lkey}} | \n";
print " $ALBUM{$dbk{$lkey}} | \n";
print " $GENRE{$dbk{$lkey}} | \n";
print " ";
print "$ID{$dbk{$lkey}} | \n";
print "
\n";
}
}
print "
";
}
sub writeHeader {
print ("Content-type: text/html\n\n");
print "Our Compact Discs \n";
}
sub writeFooter {
print "\n";
}
sub readEnv {
@pairs = split(/&/, $ENV{'QUERY_STRING'});
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s///g;
$FORM{$name} = $value;
}
}
sub readLines {
open (FILE,"$address_file") || die "oops, can't open $id_file";
$lineNum = 0;
while () {
$lineNum++;
($id, $artistName, $albumName, $genre) = split(/\|/);
chomp $albumName;
chomp $genre;
$ID{$lineNum} = $id;
$ID_UNIQUE{$lineNum} = $id . $lineNum;
$ARTIST{$lineNum} = $artistName;
$ARTIST_UNIQUE{$lineNum} = $artistName . $lineNum;
$ALBUM{$lineNum} = $albumName;
$ALBUM_UNIQUE{$lineNum} = $albumName . $lineNum;
$GENRE{$lineNum} = $genre;
$GENRE_UNIQUE{$lineNum} = $genre . $lineNum;
}
close(FILE);
}