#!/usr/bin/perl use strict; use warnings; use Digest::MD5; use FileHandle; use Getopt::Std; use Cwd; my @filelist; # prototype sub processdirectory ($); sub processdirectory ($) { my $targetdir = shift; my $startdir = cwd; printf "processing $targetdir\n"; chdir ($targetdir); opendir(DIR, ".") || die "couldn't open directory"; my @direntries = readdir(DIR); foreach my $filename (@direntries) { if (($filename ne "\.") && ($filename ne "\.\.")) { if (-d($filename)) { processdirectory("$filename"); } elsif (not -l($filename)) { my $fullfilename = cwd . "/" . $filename; push (@filelist, $fullfilename); } } } #end foreach closedir(DIR); chdir ($startdir); } # processdirectory # main foreach my $direntry (@ARGV) { processdirectory($direntry); } # run around until we find something we can use while (@filelist) { my $selected = rand(@filelist); if ($filelist[$selected] =~ m/(wmv|mov|rm)$/i) { print "playing " . $filelist[$selected] . "\n"; exec ("mplayer \'$filelist[$selected]\'"); } elsif ($filelist[$selected] =~ m/(jpg|jpeg|gif)$/i) { print "playing " . $filelist[$selected] . "\n"; exec ("qiv \'$filelist[$selected]\'"); } elsif ($filelist[$selected] =~ m/(mp3)$/i) { print "playing " . $filelist[$selected] . "\n"; exec ("mpg123 \'$filelist[$selected]\'"); } else { # no go, take it out of the list splice(@filelist, $selected, 1); } } # endwhile