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