#!/usr/bin/perl

$news = "nnrp.news.uk.psi.net";
require 'open2.pl';

open(ACTIVE,"</usr/lib/news/active");
@active = <ACTIVE>;
close(ACTIVE);
@active = sort @active;
open(ACTIVE2,"</usr/lib/news/active2");
@active2 = <ACTIVE2>;
close(ACTIVE2);
@active2 = sort @active2;

$pid = &open2(TELNETR,TELNETW,"telnet $news 119 2>/dev/null");
select((select(STDOUT),$| = 1)[0]);
select((select(TELNETW),$| = 1)[0]);

while(<TELNETR>)
{
   last if /^20/;
}
print ;

for($i=0; $i<=$#active; $i++) {
   if(($name)=($active[$i] =~ /^(\S+)$/)) {
      $active[$i] = "$name 0000000000 0000000001 y\n";
      ($xname)=($active2[$i] =~ /^(\S+)/);
      print TELNETW "group $name\n";
      chop($ok = <TELNETR>);
      if($ok !~ /^211/) { print "Couldn't enter $name ($ok)\n"; } else {
         @dirs=split(/\./,$name);
         $path="/var/spool/news";
         foreach (@dirs) {
            $path="$path/$_";
            (! -d $path) && mkdir($path,0755);
         }
         ($newfirst,$newlast,$newname) =
           ($ok =~ /^... \d+ (\d+) (\d+) ([A-Za-z0-9.-]+)/);
         if($newfirst==0) { $newfirst++; }
         print "$name";
         if($name ne $newname) { print " - (thinks it's $newname)"; }
         print " - $newfirst $newlast\n";
         $tmp = &fiddle($name,$newfirst-1,$newfirst-1);
				     # so 'last' is also first
				     # -1 to avoid fake articles in /v/s/n,
				     # true first is set when fetched
         if($name ne $xname) {
            splice(@active2,$i,0,$tmp);
         }
         else {
            $active2[$i] = $tmp;
         }
      }
   }
}

print TELNETW "QUIT\n";
$ok = <TELNETR>;

close(TELNETR); close(TELNETW);

open(ACTIVE,">/usr/lib/news/active");
print ACTIVE @active;
close(ACTIVE);
open(ACTIVE2,">/usr/lib/news/active2");
print ACTIVE2 @active2;
close(ACTIVE2);

sub fiddle {
  ($nm,$nl,$nf) = @_;
  $blah = "0000000000".$nl;
  $nl = substr($blah,length($blah)-10,10);
  $blah = "0000000000".$nf;
  $nf = substr($blah,length($blah)-10,10);
  return sprintf("%s %s %s y\n",$nm,$nl,$nf);
}
