#!/usr/bin/perl
use warnings;
use strict;
# given skew factor and sectors/track,
# return a list of skewed sector numbers.
# skew: skew factor
# sectors: number of sectors (per track)
sub skewlist {
my ($skew, $sectors) = @_;
my @a = 1;
my %seen = (1 => 1);
for (2..$sectors) {
my $s = $a[-1] + $skew;
$s = $skew - ($sectors - $a[-1]) if $s > $sectors;
$s++ while $seen{$s};
$seen{$s}++;
push @a, $s;
}
return @a;
}
sub main {
unless (2 == @ARGV) {
die "usage: skewgen <skew factor> <number of sectors>";
}
my @a = skewlist(@ARGV);
print "skewlist: @a\n";
}
exit(main());
__END__
$ ./skewgen 4 15
skewlist: 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12
$ ./skewgen 6 26
skewlist: 1 7 13 19 25 5 11 17 23 3 9 15 21 2 8 14 20 26 6 12 18 24 4
+10 16 22