sub freshmeatHandler
{

   $html = shift;
   my( @rValue ) = ();
   my ( $name, $url, $date, $poster, $description, $changes, $release, $download, $changelog, $homepage, $subscribe );

   #print "--->$html<---";
   #
   # strip off all the un-interesting bits.
   $html =~ s/^<!-- static\.h -->.*?<\/table//si;
   $html =~ s/<input type="submit" name="type" accesskey="s" value="Subscribe to">.*$//si;
 
   while( $html =~ s/
      .*?<font\s+size="\+1"><a\ href="(.*?)">         # url
      .*?<font\s+color="\#0.*?">(.*?)<\/font>         # name
      .*?<font\ color=\"\#9.*?\">by                   # homepage, download, changelog, subscribe block
      .*?(<a\ href=.*?<\/a>)                          # poster
      .*?\ \-\ (.*?)<\/font>                          # date
      (.*?)<hr\ align="center"\ size="1"\ noshade>
      #.*?<p><b>About:<\/b>(.*?)<p><b>Changes:<\/b>    # description
      #(.*?)<p>.*?<table.*?>.*?<\/table>.*?<table.*?>  # changes
      #.*?<tr.*?>.*?<td.*?\/td>.*?<td.*?>              # noise
      #(.*?)<\/td>.*?<td.*?>                           # release
      #(.*?)<\/td>                                     # license
      //six )
   {
      $url = $1;
      $name = $2;
      $poster = $3;
      $date = $4;
      $block = $5;

      # Christ, freshmeat is such a haven for the l33t w4rz h4x0rz . . .
      if ($block =~ /<b>Changes:<\/b>/)
      {
         #print STDERR "block=($block)\n";
         ($description, $changes, $release, $license) = 
            $block =~ /
                  .*?<p>\s*<b>About:<\/b>(.*?)<p>\s*<b>Changes:<\/b>    # description
                  (.*?)<p>.*?<table.*?>.*?<\/table>.*?<table.*?>  # changes
                  .*?<tr.*?>.*?<td.*?\/td>.*?<td.*?>              # noise
                  (.*?)<\/td>.*?<td.*?>                           # release
                  (.*?)<\/td>                                     # license
                        /six;
                        #print STDERR "desc = $description\n";
                        #print STDERR "chng = $changes\n";
                        #print STDERR "rels = $release\n";
                        #print STDERR "licn = $license\n";
                        #exit();
      }
      else
      {
         # some numb-nut posted an announcement without any changes.  The
         # infamous, Freshmeat: My project's still alive, please come write
         # code for it! announcement.  These guys really piss me off.
         $changes = "Apparently none.  This <i>is</i> Freshmeat, after all.\n";
         ($description, $release, $license) = 
            $block =~ /
                  .*?<p>\s*<b>About:<\/b>(.*?)    # description
                  <p>.*?<table.*?>.*?<\/table>.*?<table.*?>  # changes
                  .*?<tr.*?>.*?<td.*?\/td>.*?<td.*?>              # noise
                  (.*?)<\/td>.*?<td.*?>                           # release
                  (.*?)<\/td>                                     # license
                        /six;
      }

# --       printf "\nurl = $url\n";
# --       printf "name = $name\n";
# --       printf "poster = $poster\n";
# --       printf "date = $date\n";
# --       printf "description = $description\n";
# --       printf "changes = $changes\n";
# --       printf "license = $license\n";
# --       printf "release = $release\n";
# --       printf "homepage = $homepage\n";
# --       printf "download = $download\n";
# --       printf "changelog = $changelog\n";
# --       printf "subscribe = $subscribe\n";

      push @rValue,
      {
         'url' => $url,
         'name' => $name,
         'poster' => $poster,
         'date' => $date,
         'description' => $description,
         'changes' => $changes,
         'license' => $license,
         'release' => $release,
         'homepage' => $homepage,
         'download' => $download,
         'changelog' => $changelog,
         'subscribe' => $subscribe
      };
   }
   return @rValue;
}

return 1;
