#!/usr/local/bin/perl

if ($domain = shift @ARGV)
{
    $server = "news.$domain";
    $newsrc = "$ENV{'HOME'}/.$server";
}
else
{
    $server = "news";
    $newsrc = "$ENV{'HOME'}/.newsrc";
}

if ($port = shift @ARGV)
{
    $server = "localhost";
}
else
{
    $port=119;
}

$others="$ENV{'HOME'}/.suck/suckothermsgs";
$quit="QUIT\n";

open(F, $others); while (<F>)
{
    s/^/ARTICLE /;
    $articles .= $_;
}
    
open(F, $newsrc) || die "$newsrc: $!\n";
while(<F>)
{
    if (($group, $seen) = /^([a-z]\S+[^:!]):?\s+(-?\d+)/)
    {
	$seen{$group}=$seen; $groups.="GROUP $group\n";
    }
    else
    {
	$comments.=$_;
    }
}


$groups || die "No groups subscribed at $server\n";

open(F,"echo '$groups$quit' | socket -c $server $port |") || die;
while(<F>)
{
    /^2/ || die $_;

    ($first, $last, $group) = /^211\s+\d+\s+(\d+)\s+(\d+)\s+(\S+)/;

    next unless $seen = $seen{$group};

    $seen = $last + $seen if $seen < 0;

    # next if $seen < $first || $seen > $last;

    next if $seen == $last;

    $articles .= "GROUP $group\n";

    while ($seen < $last)
    {
	$articles .= "ARTICLE " . ++$seen . "\n";
    }

    $seen{$group} = $last;
}

$articles || die "No new articles at $server\n";

open (F, "echo '$articles$quit' | socket -c $server $port |") || die;
while (<F>)
{
    if (/^220/)
    {
	open (STDOUT, "|procmail") || die;
	print "From news ".localtime(time)."\n";
	while (<F>)
	{
	    last if /^[.]$/;
	    s/^[.][.]/./;
	    print || die;
	}
	close STDOUT || die;
    }
}
close F || die;

rename ($newsrc, "$newsrc~");
rename ($others, "$others~");

open (STDOUT, ">$newsrc") || die;
foreach (sort keys %seen)
{
    print "$_ $seen{$_}\n";
}
print "$comments";
