| Video-Capture-V4l documentation | Contained in the Video-Capture-V4l distribution. |
Video::XawTV - read, create and edit .xawtvrc's.
use Video::XawTV;
$rc = new Video::XawTV;
# - or -
$rc = new Video::XawTV "$HOME{ENV}/.xawtv";
$rc->load("otherrcfile");
$rc->save;
$rc->save("filename");
$source = $rc->opt('source');
$rc->opt('source') = "Television";
@channels = $rc->channels;
$rc->channels(@channels);
print $channels[0]{name}; # Arte
print $channels[0]{channel}; # E4
Pardon? Ha! Haa! Hahahahahaha!!!
| Video-Capture-V4l documentation | Contained in the Video-Capture-V4l distribution. |
package Video::XawTV;
$VESRSION = 0.1; use Carp; sub new { my $self = bless {}, shift; $self->load(shift) if @_; $self; } my %std_global = ( norm => 1, capture => 1, source => 1, color => 1, bright => 1, hue => 1, contrast => 1, fullscreen => 1, wm-off-by => 1, freqtab => 1, pixsize => 1, 'jpeg-quality'=> 1, mixer => 1, lauch => 1, ); my %std_channel = ( channel => 1, fine => 1, norm => 1, key => 1, capture => 1, source => 1, color => 1, bright => 1, hue => 1, contrast => 1, ); sub load { my $self = shift; my $fn = shift; local $_; open FN, "<$fn" or croak "unable to open '$fn': $!"; $self->{fn} = $fn; $self->{channels} = []; my $channel = $self->{global} = {}; my $std = \%std_global; while (<FN>) { if (/^#Video::XawTV=#\s*(\S+)\s*=\s*(.*)\s*$/) { $channel->{lc $1} = $2; } elsif (/^\s*#(.*)$/) { # comments are being reordered, but.. my! $channel->{"#$1"} = 1; } elsif (/^\s*(\S+)\s*=\s*(.*)\s*$/) { $channel->{lc $1} = $2; $std->{lc $1}++; } elsif (/\s*\[(.*)\]\s*$/) { push @{$self->{channels}}, $channel = { name => $1 }; $std = \%std_channel; } elsif (/\S/) { chomp; croak "unparsable statement in '$fn': '$_'"; } } close FN; } sub save_hash { my ($fh, $hash, $std) = @_; while (my ($k,$v) = each %$hash) { next if $k eq 'name'; if ($k =~ /^#/) { print $fh $k, "\n"; } else { print $fh "#Video::XawTV=#" unless $std->{lc $k}; print $fh "$k = $v\n"; } } print $fh "\n"; } sub save { my $self = shift; my $fn = shift || $self->{fn}; open FN,">$fn~" or croak "unable to open '$fn~' for writing: $!"; save_hash(*FN, $self->{global}, \%std_global); for (@{$self->{channels}}) { print FN "[", $_->{name}, "]\n"; save_hash(*FN, $_, \%std_channel); } close FN; rename "$fn~", $fn or croak "unable to replace '$fn': $!"; } sub opt { my $self = shift; my $opt = shift; $self->{global}{$opt} = shift if @_; $self->{global}{$opt}; } sub channels { my $self = shift; if (@_) { $self->{channels} = ref $_[0] eq "ARRAY" ? $_[0] : [@_]; } wantarray ? @{$self->{channels}} : $self->{channels}; } 1;