/usr/share/doc/libvideo-capture-v4l-perl/examples/dumpepg is in libvideo-capture-v4l-perl 0.902-3ubuntu3.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | #!/usr/bin/perl
# dumpepg dumps the epg database given as first argument run "getepg" to
# create it.
use Storable;
use POSIX 'strftime';
my $db_name = $ARGV[0];
$db_name .= ".epg" unless -e $db_name;
print "Electronic Program Guide <$db_name>\n\n";
*db = Storable::retrieve($db_name);
sub dump_ai {
my $ai = shift;
printf "EPG STREAM 1 <%d>", $ai->{epg_version};
printf " #ni %d, #oi %d, #mi %d\n", $ai->{no_navigation}, $ai->{no_osd}, $ai->{no_message};
printf "EPG STREAM 2 <%d>", $ai->{epg_version_swo};
printf " #ni %d, #oi %d, #mi %d\n", $ai->{no_navigation_swo}, $ai->{no_osd_swo}, $ai->{no_message_swo};
printf "this network #%d (%s) # updates %d\n", $ai->{this_network_op}, $ai->{service_name}, $ai->{no_updates};
for (@{$ai->{networks}}) {
printf " network #%04x (%s), LTO %d, %d days, range<%d-%d/%d>, @%d, +%03x\n",
@$_{qw/cni netwop_name LTO nodays prog_start_no prog_stop_no prog_stop_swo default_alphabet network_add_info/};
}
print "\n";
}
sub string2text {
local $_ = shift;
y/~{|}[]/ßaöäüÄÜ/;
s/(.{40})/$1\n/g;
s/([\x00-\x07])/sprintf " [%dm", ord($1)+30/ge;
s/([\x00-\x09\x0b-\x1a\x1c-\x1f])/sprintf "·[%02x]",ord $1/ge;
s/^ //g;
$_."[37m";
}
sub date2unix {
my($date,$time,$lto)=@_;
381283200
+ ($date-45000) * 86400
+ ($time >> 12 ) * 10 * 60 * 60
+ ($time >> 8 & 15) * 60 * 60
+ ($time >> 4 & 15) * 10 * 60
+ ($time & 15) * 60
+ $lto * 15;
}
sub date2text {
sprintf "{%04x}", $_[0];
}
sub time2text {
sprintf "%02x:%02x", $_[0] >> 8, $_[0] & 0xff;
}
dump_ai($db{ai});
my @pi = map values %$_, values %{$db{pi}};
printf "Dump of %d program information structures\n\n", 1*@pi;
for (sort { $a->{start_date} <=> $b->{start_date} ||
$a->{start_time} <=> $b->{start_time} ||
$a->{netwop_no} <=> $b->{netwop_no} } @pi) {
my $ti = string2text($_->{title});
my $start = date2unix($_->{start_date}, $_->{start_time}, $db{ai}{networks}[$_->{netwop_no}]{LTO});
my $stop = date2unix($_->{start_date}, $_->{stop_time }, $db{ai}{networks}[$_->{netwop_no}]{LTO});
$stop += 86400 if $stop < $start;
printf "PI #%d (%s) %s - %s \"%s\"\n", $_->{block_no}, $db{ai}{networks}[$_->{netwop_no}]{netwop_name},
strftime("%A %Y-%m-%d %H:%M", localtime $start), strftime("%H:%M", localtime $stop),
$ti;
my $si = string2text($_->{shortinfo}); $si =~ s/^/ /gm; print $si,"\n";
my $si = string2text($_->{longinfo}); $si =~ s/^/ /gm; print " =>",$si,"\n";
print " FLAGS <";
printf " editorial rating %d", $_->{editoral_rating} if $_->{editoral_rating}>0;
printf " parental rating %d", $_->{parental_rating} if $_->{parental_rating}>0;
print " Mono" if $_->{audio_flags}==0;
print " 2 Channel" if $_->{audio_flags}==1;
print " Stereo" if $_->{audio_flags}==2;
print " Surround" if $_->{audio_flags}==3;
print " Widescreen" if $_->{feature_flags}&4;
print " PAL+" if $_->{feature_flags}&8;
print " Digital" if $_->{feature_flags}&16;
print " Encrypted" if $_->{feature_flags}&32;
print " Live" if $_->{feature_flags}&64;
print " Repeated" if $_->{feature_flags}&128;
print " Subtitled" if $_->{feature_flags}&256;
print " >\n";
print "\n";
}
|