xmltv/grab/uk_rt tv_grab_uk_rt.in,1.383,1.384
Nick Morrott <[email protected]>
| Newsgroups | gmane.comp.tv.xmltv.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/xmltv/xmltv/grab/uk_rt
In directory vz-cvs-3.sog:/tmp/cvs-serv30255/grab/uk_rt
Modified Files:
tv_grab_uk_rt.in
Log Message:
Whitespace
Index: tv_grab_uk_rt.in
===================================================================
RCS file: /cvsroot/xmltv/xmltv/grab/uk_rt/tv_grab_uk_rt.in,v
retrieving revision 1.383
retrieving revision 1.384
diff -C2 -d -r1.383 -r1.384
*** tv_grab_uk_rt.in 8 Jun 2012 04:40:14 -0000 1.383
--- tv_grab_uk_rt.in 8 Jun 2012 05:04:52 -0000 1.384
***************
*** 344,348 ****
$winhome = $ENV{HOMEDRIVE} . $ENV{HOMEPATH};
}
!
my $home = $ENV{HOME} || $winhome || ".";
my $dir = "$home/.xmltv/cache";
--- 344,348 ----
$winhome = $ENV{HOMEDRIVE} . $ENV{HOMEPATH};
}
!
my $home = $ENV{HOME} || $winhome || ".";
my $dir = "$home/.xmltv/cache";
***************
*** 353,357 ****
sub load_old_config {
my ( $config_file ) = @_;
!
if (! $opt->{quiet}) {
say("Using old-style config file");
--- 353,357 ----
sub load_old_config {
my ( $config_file ) = @_;
!
if (! $opt->{quiet}) {
say("Using old-style config file");
***************
*** 478,482 ****
# Times and XMLTV channel IDs. These will deal sensibly with a new RT
# channel that isn't yet mentioned in the channel_ids file.
!
# Provide statistics for the number of usable, unusable, timeshifted,
# part-time, and part-time timeshifted channels listed in channel_ids.
--- 478,482 ----
# Times and XMLTV channel IDs. These will deal sensibly with a new RT
# channel that isn't yet mentioned in the channel_ids file.
!
# Provide statistics for the number of usable, unusable, timeshifted,
# part-time, and part-time timeshifted channels listed in channel_ids.
***************
*** 548,552 ****
next XMLTV_CHANID_ENTRY;
}
!
# Check for duplicate RT IDs having same associated XMLTV ID. As part of
# timeshifted/part-time channel support, we associate the same RT ID
--- 548,552 ----
next XMLTV_CHANID_ENTRY;
}
!
# Check for duplicate RT IDs having same associated XMLTV ID. As part of
# timeshifted/part-time channel support, we associate the same RT ID
***************
*** 578,582 ****
}
}
!
# Check for channel icon
if (defined $icon_url) {
--- 578,582 ----
}
}
!
# Check for channel icon
if (defined $icon_url) {
***************
*** 591,595 ****
}
}
!
# Check for valid timeshift offset
if (defined $channel_offset) {
--- 591,595 ----
}
}
!
# Check for valid timeshift offset
if (defined $channel_offset) {
***************
*** 605,609 ****
}
}
!
# Check for correct broadcast hours format (HHMM-HHMM)
if (defined $broadcast_hours) {
--- 605,609 ----
}
}
!
# Check for correct broadcast hours format (HHMM-HHMM)
if (defined $broadcast_hours) {
***************
*** 672,676 ****
. "Please check $rt_channels_uri"
if (! defined $rt_channels_dat || $rt_channels_dat eq '');
!
# Decode source UTF-8 octets, process for HTML entities, and encode
# into configured output encoding
--- 672,676 ----
. "Please check $rt_channels_uri"
if (! defined $rt_channels_dat || $rt_channels_dat eq '');
!
# Decode source UTF-8 octets, process for HTML entities, and encode
# into configured output encoding
***************
*** 722,726 ****
next RT_CHANDAT_ENTRY;
}
!
# Check whether there is at least one XMLTV ID associated with the RT ID
#
--- 722,726 ----
next RT_CHANDAT_ENTRY;
}
!
# Check whether there is at least one XMLTV ID associated with the RT ID
#
***************
*** 900,904 ****
sub write_channel_list {
my $wanted_chs = shift;
!
t("Started writing <channel> elements...");
foreach my $chan_href (@{ $wanted_chs }) {
--- 900,904 ----
sub write_channel_list {
my $wanted_chs = shift;
!
t("Started writing <channel> elements...");
foreach my $chan_href (@{ $wanted_chs }) {
***************
*** 913,917 ****
sub write_listings_data {
my ( $conf, $opt, $wanted_chs ) = @_;
!
# Update encoding if seen in new-style config file
if (defined( $conf->{encoding} )) {
--- 913,917 ----
sub write_listings_data {
my ( $conf, $opt, $wanted_chs ) = @_;
!
# Update encoding if seen in new-style config file
if (defined( $conf->{encoding} )) {
***************
*** 1050,1054 ****
undef $field if !length $field;
}
!
# Description of Radio Times data fields (23 in total):
#
--- 1050,1054 ----
undef $field if !length $field;
}
!
# Description of Radio Times data fields (23 in total):
#
***************
*** 1197,1201 ****
$prog{title} = [ [ encode($xml_encoding, $prog{'_title'}) ] ];
!
if (defined $prog{'_episode'} && $prog{'_episode'} !~ m/^\s*$/) {
$prog{'sub-title'} = [ [ encode($xml_encoding, $prog{'_episode'}) ] ];
--- 1197,1201 ----
$prog{title} = [ [ encode($xml_encoding, $prog{'_title'}) ] ];
!
if (defined $prog{'_episode'} && $prog{'_episode'} !~ m/^\s*$/) {
$prog{'sub-title'} = [ [ encode($xml_encoding, $prog{'_episode'}) ] ];
***************
*** 1290,1297 ****
t(" Writing $num_titles <programme> elements for '$rt_name'");
}
!
t("Finished processing listings for '$rt_name' ($xmltv_id)\n");
t("----");
!
# Update the progres bar by one increment
if (defined $listings_bar) {
--- 1290,1297 ----
t(" Writing $num_titles <programme> elements for '$rt_name'");
}
!
t("Finished processing listings for '$rt_name' ($xmltv_id)\n");
t("----");
!
# Update the progres bar by one increment
if (defined $listings_bar) {
***************
*** 1418,1422 ****
my $idx_char = lc(substr ($process_text, 0, 1));
!
# processing codes are documented in prog_titles_to_process file
if ($code eq '1') {
--- 1418,1422 ----
my $idx_char = lc(substr ($process_text, 0, 1));
!
# processing codes are documented in prog_titles_to_process file
if ($code eq '1') {
***************
*** 1497,1501 ****
# programmes that may also need to be handled via this fixup
$flagged_title_eps{$old_title} = $old_title;
!
my $key = ("" . $old_title . "|" . $old_ep);
$replacement_title_eps{$key} = [$new_title, $new_ep];
--- 1497,1501 ----
# programmes that may also need to be handled via this fixup
$flagged_title_eps{$old_title} = $old_title;
!
my $key = ("" . $old_title . "|" . $old_ep);
$replacement_title_eps{$key} = [$new_title, $new_ep];
***************
*** 1514,1518 ****
$dotdotdot_titles{$1} = $new_title;
}
!
$have_title_data = 1;
next PROG_TITLE_ENTRY;
--- 1514,1518 ----
$dotdotdot_titles{$1} = $new_title;
}
!
$have_title_data = 1;
next PROG_TITLE_ENTRY;
***************
*** 1545,1549 ****
next PROG_TITLE_ENTRY;
}
!
my $key = ("" . $old_title . "|" . $old_ep . "|" . $desc);
$replacement_title_desc{$key} = [$new_title, $new_ep];
--- 1545,1549 ----
next PROG_TITLE_ENTRY;
}
!
my $key = ("" . $old_title . "|" . $old_ep . "|" . $desc);
$replacement_title_desc{$key} = [$new_title, $new_ep];
***************
*** 1556,1560 ****
$dotdotdot_titles{$1} = $new_title;
}
!
$have_title_data = 1;
next PROG_TITLE_ENTRY;
--- 1556,1560 ----
$dotdotdot_titles{$1} = $new_title;
}
!
$have_title_data = 1;
next PROG_TITLE_ENTRY;
***************
*** 1616,1620 ****
next UTF8_FIXUP_ENTRY;
}
!
# The utf8_fixups fields are:
# 1) bad utf-8 characters to find and replace (as hex)
--- 1616,1620 ----
next UTF8_FIXUP_ENTRY;
}
!
# The utf8_fixups fields are:
# 1) bad utf-8 characters to find and replace (as hex)
***************
*** 2306,2310 ****
$prog->{'_titles_processed'} = 0;
$prog->{'_subtitles_processed'} = 0;
!
# Next, process titles to make them consistent
#
--- 2306,2310 ----
$prog->{'_titles_processed'} = 0;
$prog->{'_subtitles_processed'} = 0;
!
# Next, process titles to make them consistent
#
***************
*** 2416,2420 ****
$case_insens_titles{$title_nopunc}{ $prog->{'_title'} }{$tmp_genre}{ $prog->{'_rt_name'} }++;
$case_insens_titles{$title_nopunc}{ $prog->{'_title'} }{'count'}++;
!
# Check for title text still present in episode details
if (defined $prog->{'_episode'} && $prog->{'_episode'} =~ m/^\Q$prog->{'_title'}\E.*$/) {
--- 2416,2420 ----
$case_insens_titles{$title_nopunc}{ $prog->{'_title'} }{$tmp_genre}{ $prog->{'_rt_name'} }++;
$case_insens_titles{$title_nopunc}{ $prog->{'_title'} }{'count'}++;
!
# Check for title text still present in episode details
if (defined $prog->{'_episode'} && $prog->{'_episode'} =~ m/^\Q$prog->{'_title'}\E.*$/) {
***************
*** 2490,2499 ****
$prog->{'_repeat'} = 1;
}
!
# Check if desc starts with "New series..."
elsif ($prog->{'_desc'} =~ m/^New series/) {
t(" Setting premiere flag based on description (New series...)");
$prog->{'_premiere'} = 1;
!
# Now check if desc starts with "New series [(x/y)]. "
# Remove text and preserve numbering for processing below
--- 2490,2499 ----
$prog->{'_repeat'} = 1;
}
!
# Check if desc starts with "New series..."
elsif ($prog->{'_desc'} =~ m/^New series/) {
t(" Setting premiere flag based on description (New series...)");
$prog->{'_premiere'} = 1;
!
# Now check if desc starts with "New series [(x/y)]. "
# Remove text and preserve numbering for processing below
***************
*** 2513,2517 ****
sub extract_numbering_from_desc {
my $prog = shift;
!
if (defined $prog->{'_desc'}) {
# Extract episode and series info from start of description
--- 2513,2517 ----
sub extract_numbering_from_desc {
my $prog = shift;
!
if (defined $prog->{'_desc'}) {
# Extract episode and series info from start of description
***************
*** 2548,2552 ****
if ( defined $3 ) {
my $series_digits = word_to_digit($3);
!
if ( ! defined $prog->{'_series_num'} ) {
if (defined $series_digits and $series_digits > 0) {
--- 2548,2552 ----
if ( defined $3 ) {
my $series_digits = word_to_digit($3);
!
if ( ! defined $prog->{'_series_num'} ) {
if (defined $series_digits and $series_digits > 0) {
***************
*** 2613,2617 ****
$prog->{'_cast'} =~ s/\|\|/\|/g; # remove empty pipe-separated fields
$prog->{'_cast'} =~ s/,,/,/g; # remove empty comma-separated fields
!
# First we check for 'character*actor' entries
if ($prog->{'_cast'} =~ tr/*//) {
--- 2613,2617 ----
$prog->{'_cast'} =~ s/\|\|/\|/g; # remove empty pipe-separated fields
$prog->{'_cast'} =~ s/,,/,/g; # remove empty comma-separated fields
!
# First we check for 'character*actor' entries
if ($prog->{'_cast'} =~ tr/*//) {
***************
*** 2624,2628 ****
push @cast, $prog->{'_cast'};
}
!
# Now process the list of cast entries
foreach my $cast (@cast) {
--- 2624,2628 ----
push @cast, $prog->{'_cast'};
}
!
# Now process the list of cast entries
foreach my $cast (@cast) {
***************
*** 2865,2869 ****
sub process_non_title_info {
my $prog = shift;
!
if ($have_title_data && %non_title_info && $prog->{'_title'} =~ m/:/) {
my $idx_char = lc(substr $prog->{'_title'}, 0, 1);
--- 2865,2869 ----
sub process_non_title_info {
my $prog = shift;
!
if ($have_title_data && %non_title_info && $prog->{'_title'} =~ m/:/) {
my $idx_char = lc(substr $prog->{'_title'}, 0, 1);
***************
*** 2893,2897 ****
my $prog = shift;
my $brand = $prog->{'_title'};
!
if ($have_title_data && %demoted_title && defined $prog->{'_episode'}
&& defined $demoted_title{ $brand }) {
--- 2893,2897 ----
my $prog = shift;
my $brand = $prog->{'_title'};
!
if ($have_title_data && %demoted_title && defined $prog->{'_episode'}
&& defined $demoted_title{ $brand }) {
***************
*** 3056,3060 ****
sub process_mixed_title_subtitle {
my $prog = shift;
!
if ($have_title_data && %mixed_title_subtitle && $prog->{'_title'} =~ m/:|-/) {
my $idx_char = lc(substr $prog->{'_title'}, 0, 1);
--- 3056,3060 ----
sub process_mixed_title_subtitle {
my $prog = shift;
!
if ($have_title_data && %mixed_title_subtitle && $prog->{'_title'} =~ m/:|-/) {
my $idx_char = lc(substr $prog->{'_title'}, 0, 1);
***************
*** 3109,3113 ****
sub process_mixed_subtitle_title {
my $prog = shift;
!
if ($have_title_data && @mixed_subtitle_title && $prog->{'_title'} =~ m/:|-/) {
MIXED_SUBTITLE_TITLE:
--- 3109,3113 ----
sub process_mixed_subtitle_title {
my $prog = shift;
!
if ($have_title_data && @mixed_subtitle_title && $prog->{'_title'} =~ m/:|-/) {
MIXED_SUBTITLE_TITLE:
***************
*** 3161,3165 ****
sub process_reversed_title_subtitle {
my $prog = shift;
!
if ($have_title_data && %reversed_title_subtitle && defined $prog->{'_episode'}) {
my $idx_char = lc(substr $prog->{'_title'}, 0, 1);
--- 3161,3165 ----
sub process_reversed_title_subtitle {
my $prog = shift;
!
if ($have_title_data && %reversed_title_subtitle && defined $prog->{'_episode'}) {
my $idx_char = lc(substr $prog->{'_title'}, 0, 1);
***************
*** 3200,3204 ****
sub process_replacement_episodes {
my $prog = shift;
!
if ($have_title_data && %replacement_episodes && defined $prog->{'_episode'}) {
my $bad_episode_title = $prog->{'_title'};
--- 3200,3204 ----
sub process_replacement_episodes {
my $prog = shift;
!
if ($have_title_data && %replacement_episodes && defined $prog->{'_episode'}) {
my $bad_episode_title = $prog->{'_title'};
***************
*** 3222,3226 ****
sub process_replacement_ep_from_desc {
my $prog = shift;
!
if ($have_title_data && %replacement_ep_from_desc && defined $prog->{'_desc'}) {
my $bad_episode_title = $prog->{'_title'};
--- 3222,3226 ----
sub process_replacement_ep_from_desc {
my $prog = shift;
!
if ($have_title_data && %replacement_ep_from_desc && defined $prog->{'_desc'}) {
my $bad_episode_title = $prog->{'_title'};
***************
*** 3353,3357 ****
if ($prog->{'_title'} =~ m/Series|Season/i) {
!
# this regex looks for season numbering in title with
# in parentheses
--- 3353,3357 ----
if ($prog->{'_title'} =~ m/Series|Season/i) {
!
# this regex looks for season numbering in title with
# in parentheses
***************
*** 3390,3394 ****
$prog->{'_processed'} = 1;
}
!
# this regex looks for season numbering in title without
# parentheses
--- 3390,3394 ----
$prog->{'_processed'} = 1;
}
!
# this regex looks for season numbering in title without
# parentheses
***************
*** 3436,3443 ****
sub extract_part_numbering_from_episode {
my $prog = shift;
!
if (defined $prog->{'_episode'}
&& $prog->{'_episode'} =~ m/Part|Pt|\d\s*$/i) {
!
# this regex looks for part numbering in parentheses
#
--- 3436,3443 ----
sub extract_part_numbering_from_episode {
my $prog = shift;
!
if (defined $prog->{'_episode'}
&& $prog->{'_episode'} =~ m/Part|Pt|\d\s*$/i) {
!
# this regex looks for part numbering in parentheses
#
***************
*** 3470,3474 ****
$prog->{'_processed'} = 1;
}
!
# this regex looks for part numbering with no other episode information
#
--- 3470,3474 ----
$prog->{'_processed'} = 1;
}
!
# this regex looks for part numbering with no other episode information
#
***************
*** 3494,3498 ****
$prog->{'_processed'} = 1;
}
!
# this regex looks for bare part numbering after a comma, semicolon,
# colon or hyphen
--- 3494,3498 ----
$prog->{'_processed'} = 1;
}
!
# this regex looks for bare part numbering after a comma, semicolon,
# colon or hyphen
***************
*** 3522,3526 ****
$prog->{'_processed'} = 1;
}
!
# this regex looks for part numbering immediately following episode info
#
--- 3522,3526 ----
$prog->{'_processed'} = 1;
}
!
# this regex looks for part numbering immediately following episode info
#
***************
*** 3547,3551 ****
$prog->{'_processed'} = 1;
}
!
# this regex looks for a digit (conservatively between 1 and 6) following
# the episode details, a colon and at least one space
--- 3547,3551 ----
$prog->{'_processed'} = 1;
}
!
# this regex looks for a digit (conservatively between 1 and 6) following
# the episode details, a colon and at least one space
***************
*** 3570,3574 ****
}
}
!
# this regex looks for worded part numbering with no other episode information
#
--- 3570,3574 ----
}
}
!
# this regex looks for worded part numbering with no other episode information
#
***************
*** 3593,3597 ****
}
}
!
# this regex looks for bare part numbering after a comma, semicolon,
# colon or hyphen, where the numbering is given in words
--- 3593,3597 ----
}
}
!
# this regex looks for bare part numbering after a comma, semicolon,
# colon or hyphen, where the numbering is given in words
***************
*** 3622,3626 ****
}
}
!
# this regex looks for worded part numbering immediately following episode info
#
--- 3622,3626 ----
}
}
!
# this regex looks for worded part numbering immediately following episode info
#
***************
*** 3647,3651 ****
}
}
!
# this regex looks for worded part numbering in parentheses
#
--- 3647,3651 ----
}
}
!
# this regex looks for worded part numbering in parentheses
#
***************
*** 3678,3682 ****
}
}
!
# check for potential part numbering left unprocessed
#
--- 3678,3682 ----
}
}
!
# check for potential part numbering left unprocessed
#
***************
*** 3700,3704 ****
if (defined $prog->{'_sub_title'}
&& $prog->{'_sub_title'} =~ m/\d+|series|episode/i) {
!
# ) check for most common "x/y, series z" format first
#
--- 3700,3704 ----
if (defined $prog->{'_sub_title'}
&& $prog->{'_sub_title'} =~ m/\d+|series|episode/i) {
!
# ) check for most common "x/y, series z" format first
#
***************
*** 3732,3736 ****
$prog->{'_processed'} = 1;
}
!
# ) check for "x/y" formats covering other formats
#
--- 3732,3736 ----
$prog->{'_processed'} = 1;
}
!
# ) check for "x/y" formats covering other formats
#
***************
*** 3788,3792 ****
$prog->{'_processed'} = 1;
}
!
# ) check for special case of "x/y/z, series n" format where two parts of a series have
# been edited into a single programme for transmission. Only the first episode number
--- 3788,3792 ----
$prog->{'_processed'} = 1;
}
!
# ) check for special case of "x/y/z, series n" format where two parts of a series have
# been edited into a single programme for transmission. Only the first episode number
***************
*** 3834,3838 ****
$prog->{'_processed'} = 1;
}
!
# ) check for "Series x" format covering following formats:
#
--- 3834,3838 ----
$prog->{'_processed'} = 1;
}
!
# ) check for "Series x" format covering following formats:
#
***************
*** 3854,3858 ****
$prog->{'_processed'} = 1;
}
!
# ) check for "Series " format where series number is missing. Here
# we remove the text from the sub_title field
--- 3854,3858 ----
$prog->{'_processed'} = 1;
}
!
# ) check for "Series " format where series number is missing. Here
# we remove the text from the sub_title field
***************
*** 3906,3910 ****
$writer->start( { grabber => "$grabber_name" } );
!
if ($stage eq 'start') {
--- 3906,3910 ----
$writer->start( { grabber => "$grabber_name" } );
!
if ($stage eq 'start') {
***************
*** 4238,4242 ****
die "Unknown stage $stage";
}
!
return $result;
}
--- 4238,4242 ----
die "Unknown stage $stage";
}
!
return $result;
}
***************
*** 4730,4734 ****
say("\nStart of list of titles containing colons");
say(" " . $_) foreach @titles_colons;
!
# now store the possible fixups if we see more than 1 title having
# common pre/post colon text.
--- 4730,4734 ----
say("\nStart of list of titles containing colons");
say(" " . $_) foreach @titles_colons;
!
# now store the possible fixups if we see more than 1 title having
# common pre/post colon text.
***************
*** 4782,4786 ****
say("\nStart of list of titles containing hyphens");
say(" " . $_) foreach @titles_hyphens;
!
if (@fixups) {
say("\nPossible fixups for hyphenated titles:\n");
--- 4782,4786 ----
say("\nStart of list of titles containing hyphens");
say(" " . $_) foreach @titles_hyphens;
!
if (@fixups) {
say("\nPossible fixups for hyphenated titles:\n");
***************
*** 4804,4808 ****
say("End of list of titles containing \"Special\"");
}
!
my @titles_new;
my @titles_premiere;
--- 4804,4808 ----
say("End of list of titles containing \"Special\"");
}
!
my @titles_new;
my @titles_premiere;
***************
*** 4836,4840 ****
say("End of list of titles containing \"New/Premiere/Finale/etc...\"");
}
!
my @titles_day;
my @titles_night;
--- 4836,4840 ----
say("End of list of titles containing \"New/Premiere/Finale/etc...\"");
}
!
my @titles_day;
my @titles_night;
***************
*** 4861,4865 ****
say("End of list of titles containing \"Day/Night/Week\"");
}
!
my @titles_christmas;
my @titles_newyear;
--- 4861,4865 ----
say("End of list of titles containing \"Day/Night/Week\"");
}
!
my @titles_christmas;
my @titles_newyear;
***************
*** 4880,4884 ****
say("End of list of titles containing \"Christmas/New Year\"");
}
!
my @titles_bestof;
my @titles_highlights;
--- 4880,4884 ----
say("End of list of titles containing \"Christmas/New Year\"");
}
!
my @titles_bestof;
my @titles_highlights;
***************
*** 4949,4953 ****
if (scalar keys %{$case_insens_titles{$unique_title}} > 1) {
my %variants;
!
# iterate over each actual title seen in listings
foreach my $title (sort keys %{$case_insens_titles{$unique_title}}) {
--- 4949,4953 ----
if (scalar keys %{$case_insens_titles{$unique_title}} > 1) {
my %variants;
!
# iterate over each actual title seen in listings
foreach my $title (sort keys %{$case_insens_titles{$unique_title}}) {
***************
*** 4957,4961 ****
# hash lists of title variants keyed on frequency
push @{$variants{$title_cnt}}, $title;
!
my $line = " $title (";
# iterate over each title's genres
--- 4957,4961 ----
# hash lists of title variants keyed on frequency
push @{$variants{$title_cnt}}, $title;
!
my $line = " $title (";
# iterate over each title's genres
***************
*** 5066,5070 ****
# ignore title having ellipses already
next PROG_TITLE if $title =~ m/.*\.\.\.$/;
!
if ($title =~ m/\b\Q$dotdotdot_title\E\b/i) {
$titles_to_output{$title} = $dotdotdot_titles{$dotdotdot_title};
--- 5066,5070 ----
# ignore title having ellipses already
next PROG_TITLE if $title =~ m/.*\.\.\.$/;
!
if ($title =~ m/\b\Q$dotdotdot_title\E\b/i) {
$titles_to_output{$title} = $dotdotdot_titles{$dotdotdot_title};
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/