A.5. random_rotate
UserTag random PosNumber 0
UserTag random Interpolate 1
UserTag random Routine <<EOR
package Vend::Config;
sub parse_random {
my ($var, $value) = @_;
return '' unless (defined $value && $value);
my $c = [];
$var = lc $var;
my @files = grep /\S/, split /\s+/, $value;
local ($Vend::Cfg) = $C;
for (@files) { push @$c, Vend::Util::readin($_) }
return $c;
}
package Vend::Interpolate;
sub {
my $random = int rand(scalar(@{$Vend::Cfg->{'Random'}}));
if (defined $Vend::Cfg->{'Random'}->[$random]) {
return $Vend::Cfg->{'Random'}->[$random];
}
else {
return '';
}
}
EOR
UserTag rotate PosNumber 2
UserTag rotate Order ceiling floor
UserTag rotate Interpolate 1
UserTag rotate Routine <<EOR
sub {
return '' unless $Vend::Cfg->{Rotate};
my $ceiling = $_[0] || @{$Vend::Cfg->{'Rotate'}} || return '';
my $floor = $_[1] || 1;
$ceiling--;
$floor--;
my $marker = "rotate$floor$ceiling";
if($ceiling < 0 or $floor < 0) {
$floor = 0;
$ceiling = scalar @{$Vend::Cfg->{'Rotate'}} - 1;
logError "Bad ceiling or floor for rotate";
}
my $rotate;
$rotate = $Vend::Session->{$marker} || $floor;
if($rotate > $ceiling or $rotate < $floor ) {
$rotate = $floor;
}
$Vend::Session->{$marker} = $rotate + 1;
return $Vend::Cfg->{'Rotate'}->[$rotate];
}
EOR
AddDirective Random random
AddDirective Rotate random