#!/usr/bin/perl use CGI; use POSIX qw(strftime); sub randomFile { my $extn = $_[0]; my $directory = $_[1]; opendir(PIC_DIR, $directory) or return 'failed'; my @pdlist = readdir(PIC_DIR); my $temppic; my @piclist = (); foreach $temppic (@pdlist) { if(!(-d "$directory/$temppic") && $temppic =~ /$extn/) { push @piclist, $temppic; } } my $plsize = @piclist; my $ind = int(rand($plsize)); return join('/',($directory,$piclist[$ind])); } $bg = `../random_bgpic.cgi`; $bg =~ /\n\n(.*)/; $bg = $1; my $mycgi = new CGI; $already = ''; print $mycgi->header(); $mainColor = '#ffffff'; $subColor = '#ffffff'; $baseDir = '.'; $mainDirectory = "$baseDir/files"; $subDirectory = $mycgi->param('dir'); $thisCGI = 'index.cgi'; $subDirectory =~ s/\.//g; # Comment this out if sub-sub directory hierarchy is allowed $subDirectory =~ s/\///g; # Read in the auto parse file open(AP, "<$baseDir/auto_link_list"); @ap = ; close AP; foreach $i (@ap) { @sp = split('~', $i); $ap{$sp[0]} = $sp[1]; } @k = keys(%ap); open(TEMPLATE, "<$baseDir/template.html"); if($subDirectory) { $the_header=''; } else { $the_header = <<__TO_HEADER__;

The Music


__TO_HEADER__ } print <<__TO_HTML__; Magic Peace Farm: We call it 'Music' $the_header __TO_HTML__ directoryList(); print <<__TO_HTML__; __TO_HTML__ exit; sub directoryList { print '
'; print '
'; print '
'; mainList(); print ' '; subList(); print '
'; print '
'; } sub mainList { opendir(MAINDIR, $mainDirectory); $foo = readdir MAINDIR; $foo = readdir MAINDIR; @list = (); while($foobar = readdir MAINDIR) { push @list, $foobar; } closedir MAINDIR; print '
'; print ''; @list = sort {$b cmp $a} @list; for($i = @list - 1; $i >= 0; $i--) { $item = $list[$i]; if(!($item =~ m/\./g)) { $itemTag = getInfo("$mainDirectory/$item/readme"); if($item eq $subDirectory) { $selected = ">"; } else { $selected = ''; } $itemfixed = join(' ',split('_',$item)); if($itemfixed =~ /^.-(.*)/) { $itemfixed = $1; } print "'; } } print '
$selected"; print "$itemfixed"; if($itemTag) { print '
 '; print "$itemTag"; } print '
'; if($subDirectory && open(infoFile, "$mainDirectory/$subDirectory/readme.long")) { print "
"; print "
"; while() { print $_; } print "
"; } } sub subList { if(!$subDirectory) { print '
'; print '
'; $thepic = randomFile('jpg','pictures'); print ""; print '
'; print '
'; return; } if(opendir(SUBDIR, "$mainDirectory/$subDirectory")) { print ''; print '
'; print ''; $foo = readdir SUBDIR; $foo = readdir SUBDIR; @list = (); while( $foobar = readdir SUBDIR ) { if((!($foobar eq '..') && !($foobar eq '.') && -d "$mainDirectory/$subDirectory/$foobar") || $foobar =~ /\.mp3/) { push @list, $foobar; } } close SUBDIR; @list = sort { (-M "$mainDirectory/$subDirectory/$a") <=> -M ("$mainDirectory/$subDirectory/$b") } @list; $current = 0; my %subhash = (); foreach $item (@list) { if(-d "$mainDirectory/$subDirectory/$item") { my $sublistref = dirListing("$mainDirectory/$subDirectory/$item"); $sublistrefsize = @$sublistref; if($sublistrefsize > 0) { $subhash{$item} = join(',',@$sublistref); } } } my @ks = keys(%subhash); #print join('
',@list); #print '
'; foreach $subdir (@ks) { #print "subdir- $subdir ($subhash{$subdir})
"; my $i = 0; my $j = @list; while($i < $j && !($subdir eq $list[$i])) { # print "compare-fail[$i/$j] [$subdir] [$list[$i]]
"; $i++; } if($i < $j) { #print 'SPLICING
'; # splice(@list, $i, $i, "$subdir.dir", split(',',$subhash{$subdir})); @list = (@list[0..$i-1], "$subdir.dir", split(',',$subhash{$subdir}),@list[$i+1..$j-1]); #print '
    '; #print join('
    ',@list); #print '
'; } } $count = @list; foreach $item (@list) { $cinfo = getInfo("$mainDirectory/$subDirectory/color"); if($cinfo eq ' ') { $startb = 0xFF; $finishb = 0x00; $startr = 0; $finsihr = 0; $startg = 0; $finishg = 0; } else { @c = split(' ',$cinfo); $startr = $c[0]; $finishr = $c[1]; $startg = $c[2]; $finishg = $c[3]; $startb = $c[4]; $finishb = $c[5]; } $myr = gradient($count, $current, $startr, $finishr); $myg = gradient($count, $current, $startg, $finishg); $myb = gradient($count, $current, $startb, $finishb); # print "\n\n"; $bgcolor = hexcolor($myr, $myg, $myb); $t = substr($item, -3, 3); if($t eq 'dir') { $thedirname = substr($item, 0, length($item) - 4); $thedirname = join(' ',split('_',$thedirname)); print ""; } if($t eq 'mp3') { my $itempath = "$mainDirectory/$subDirectory"; if($item =~ /(.*)\/(.*)$/) { $itempath = $1; $item = $2; } $fsize = -s "$itempath/$item"; $fdate = time - int ((-M "$itempath/$item") * 60 * 60 * 24); # $fdate = strftime "%a %b %e %H:%M:%S %Y", $fdate; $fdate = localtime($fdate); $fdate =~ s/^... //; $fdate =~ s/..:..:.. //; $fsize = $fsize / (1024 * 100); # $now_string = strftime "%a %b %e %H:%M:%S %Y", gmtime; $fsize = int($fsize); $fsize = $fsize / 10; print "'; if(length($info) > 7) { print "'; } $current++; } } print '
$thedirnameMBDate
"; $parse_item = join('_',split('_',$item)); $parse_item = substr($parse_item, 0, -4); $parse_item .= '.mp3'; $parse_item = "$parse_item"; print "$parse_item"; print " $fsize $fdate "; @parsed = split('.mp3',$item); $info = getInfo("$itempath/$parsed[0]"); print '
"; print "  $info"; print '  
'; print '
'; print '
'; } } sub getInfo { $dirName = $_[0]; open(DIRINFO,"<$dirName.info") or return ' '; $tag = ; close DIRINFO; # return auto_link($tag); return $tag; } # gradient(Maximum, Current, Start, Finish) sub gradient { $mMax = $_[0]; $mCurrent = $_[1]; $mStart = $_[2]; $mFinish = $_[3]; $mTotal = $mFinish - $mStart; if($mMax != 0) { $mSlope = $mTotal / $mMax; } else { $mSlope = 0; } return int($mStart + $mSlope * $mCurrent); } sub hexcolor { $r = $_[0]; $g = $_[1]; $b = $_[2]; return sprintf('#%02x%02x%02x', $r, $g, $b); } sub auto_link { $theStr = $_[0]; foreach $k(@mk) { # if(! $already =~ /$k/) { $linkstr = "$k"; $theStr =~ s/$k/$linkstr/; # $already = "$already $k"; # } } # $theStr =~ s/Lonnie/Pongi/; return $theStr; } sub dirListing { my $theDir = $_[0]; @theListingArray = (); if(!opendir(THEDIR, $theDir)) { return \@theListingArray; } while($thepotentialmp3 = readdir(THEDIR)) { if($thepotentialmp3 =~ /\.mp3/) { push @theListingArray, "$theDir/$thepotentialmp3"; } } close THEDIR; @theListingArray = sort(@theListingArray); return \@theListingArray; }