#!/usr/pkg/bin/perl
my $root = $ENV{'DOCUMENT_ROOT'};
my $branch = $ENV{'QUERY_STRING'};
my $image_base;
if ($branch && -d "$root/$branch") {
$image_base = "$root/$branch";
} else {
$image_base = "$root/pictures";
}
my $file = get_image_in ($image_base);
$file =~ s|$ENV{'DOCUMENT_ROOT'}|http://$ENV{'SERVER_NAME'}|;
print <<_done;
Location: $file
Page Moved
The file has moved here
_done
## utility routines ####
sub YES { 1 }
sub NO { 0 }
sub error {
print STDERR shift, "\n";
exit;
}
sub get_image_in {
my $dir = shift;
clear();
while (need_image()) {
descend_into ($dir);
}
return (latest_image());
}
sub descend_into {
my $dir = shift;
my $dx = 1; # directory counter
my $found_dir = NO; # status flag
opendir (DIR, $dir)
or error (qq(I can't read '$dir': $!))
;
my @files = grep {!/^\./} sort readdir DIR;
for my $fx (0..$#files) {
my $file = $files[$fx];
if ( (-f "$dir/$files[$fx]")
&& (substr ($files[$fx], -4) =~ /\.jpg/i)
) {
if (rand() < (1/(1+$fx))) {
save_image ($dir .'/'. $files[$fx]);
save_count ($dir .'/'. ($fx + 1));
}
}
if ( (-d "$dir/$files[$fx]")
&& ($files[$fx] !~ /thumb/i)
) {
if (rand() < (1/(1+$dx))) {
$found_dir = YES;
save_directory ("$dir/$files[$fx]");
}
$dx++;
}
}
closedir DIR;
if (
($found_dir)
&& ((need_image()) || (.5 < rand()))
) {
descend_into (latest_directory());
}
return;
}
sub clear {
undef $IMAGE;
undef $COUNT;
undef $WEIGHT;
undef $DIRECTORY;
}
sub save_image {
$IMAGE = shift;
}
sub latest_image {
return ($IMAGE);
}
sub save_count {
$COUNT = shift;
}
sub latest_count {
return $COUNT;
}
sub need_image {
$result = ($IMAGE) ? 0 : 1;
}
sub save_directory {
$DIRECTORY = shift;
}
sub latest_directory {
return ($DIRECTORY);
}