our $recurse = 1;
our $unit = 86400;
our $slop;
+our $debug;
our @intervals;
sub badusage ($) {
$_->{A} = ($newest_t - $_->{T}) / $unit foreach @files;
$slop /= $unit;
-# print DEBUG Dumper(\@files, \@intervals);
+ print DEBUG Dumper(\@files, \@intervals) if $debug >= 2;
}
sub flag ($) {
my ($int) = @_;
- my $n = $int->{Number};
- my $d = $int->{Interval};
+ my $n = $int->{N};
+ my $d = $int->{D};
+ my $dmax = $d + $slop;
my $spec = $int->{Spec};
my $start_age = ($n+1) * $d;
my $i = 0;
- print DEBUG "FLAG $spec\n";
+ print DEBUG "FLAG $spec sa=$start_age dmax=$dmax\n";
# find $i, the youngest which is at least $number x $interval
for (;;) {
print DEBUG "i #$i $files[$i]{A}\n";
- last if $files[$i]{A} > $start_age;
+ last if $files[$i]{A} >= $start_age;
if ($i == $#files) {
print STDERR "insufficient for $spec\n";
}
for (;;) {
push @{ $files[$i]{U} }, $spec;
- # find $j, the closest to $i which is at least $d-slop younger
+ # find $j, the closest to $i which is no more than $dmax younger
my $j = $i;
for (;;) {
$j--;
- last if $j < 0;
- last if $files[$j];
- my $dt = $files[$i]{A} - $files[$j]{A};
- print DEBUG "j #$j $files[$j]{A} dt=$dt\n";
- last if $dt >= $d - $slop;
+ last if $j <= 0;
+ my $ndt = $files[$i]{A} - $files[$j-1]{A};
+ print DEBUG "j #$j $files[$j]{A} ndt=$ndt\n";
+ last if $ndt > $dmax;
}
last if $j < 0;
while (m/^-./) {
if (s/^-n/-/) { $rm=0; }
elsif (s/-r/-/) { $recurse=1; }
- elsif (s/-D/-/) { open DEBUG, ">&STDERR" or die $!; }
+ elsif (s/-D/-/) { $debug++; }
elsif (s/-u(\d+)$//) { $unit=$1; }
elsif (s/-s(\d+)$//) { $slop=$1; }
else { badusage "unknown short option $_" }
badusage "too few arguments" unless @ARGV;
+if ($debug) {
+ open DEBUG, ">&STDERR" or die $!;
+ DEBUG->autoflush(1);
+}
+
$slop //= $unit * 0.1;
foreach (@ARGV) {
m/^(\d+)x(\d+)$/ or badusage "bad <number>x<interval> $_";
- push @intervals, { Spec => $&, N => $1, I => $2 };
+ push @intervals, { Spec => $&, N => $1, D => $2 };
}
scan();