55
55
return $val =~ /^(1|y|yes)$/i;
58
# Generate channel range strings from span objects
58
sub range_string($$) {
59
my ($start, $end) = @_;
64
sprintf "%d-%d", $start, $end;
68
# Generate channel range strings from arrays of chan numbers
59
69
# E.g: "63-77,79-93"
61
my $span = shift || die;
62
my $first_chan = ($span->chans())[0];
63
my $first_num = $first_chan->num();
71
my @channos = sort { $a <=> $b } @_;
72
my $first_num = $channos[0];
64
73
my $range_start = $first_num;
68
die unless $span->is_digital();
69
foreach my $c (@{$span->bchan_list()}) {
70
my $curr = $c + $first_num;
77
foreach my $c (@channos) {
71
79
if(!defined($prev)) {
73
82
} elsif($curr != $prev + 1) {
74
push(@range, sprintf("%d-%d", $range_start, $prev));
84
push(@range, range_string($range_start, $prev));
75
85
$range_start = $curr;
79
89
if($prev >= $first_num) {
80
push(@range, sprintf("%d-%d", $range_start, $prev));
91
push(@range, range_string($range_start, $prev));
82
93
return join(',', @range);
96
# Generate channel range strings from chan objects
99
my @chans = sort { $a->num <=> $b->num } @_;
100
my @channos = map { $_->num } @chans;
101
channo_range(@channos);
104
# Generate channel range strings from digital span objects
107
my $span = shift || die;
108
die unless $span->is_digital();
109
my $first_chan = ($span->chans())[0];
110
my $first_num = $first_chan->num();
111
my $bchan_ref = $span->bchan_list();
112
my @channos = map { $_ + $first_num } @{$bchan_ref};
113
channo_range(@channos);
116
# Returns a channel numbers array from a channel range string
117
sub parse_chan_range($) {
118
my $rangestr = shift;
119
$rangestr =~ s/\s*//g; # Squeeze
120
die "Bad characters in '$rangestr'" if $rangestr =~ /[^\d\s,-]/;
121
my @ranges = split(/,/, $rangestr);
125
foreach my $range (@ranges) {
126
my ($start, $end) = split(/-/, $range, 2);
127
$end = $start unless defined $end;
128
die "Bad characters in '$start'" if $start =~ /\D/;
129
die "Bad characters in '$end'" if $end =~ /\D/;
130
die "Reversed range $end < $start" if $end < $start;
131
die "Channel number < 1" if $start < 1;
132
die "New range begins below previous $start <= $last_end" if defined($last_end) && $last_end >= $start;
133
for(my $i = $start + 0; $i <= $end; $i++) {
138
return sort { $a <=> $b } @channos;
86
142
my $pack = shift || die "$0: Missing package argument";
87
143
my $p = shift || die "$0: Missing parameters argument";