chiark / gitweb /
chiark-utils (4.2.0) unstable; urgency=low
[chiark-utils.git] / scripts / nntpid
1 #!/usr/bin/perl
2
3 # Originally by Simon Tatham
4 # Modified by Richard Kettlewell, Colin Watson, Ian Jackson
5
6 use ChiarkNNTP;
7
8 our $verbose;
9 ($verbose='STDERR', shift @ARGV) if $ARGV[0] eq "-v";
10
11 my $c = cnntp_connect($verbose);
12 $c->banner_reader();
13
14 our $code;
15
16 # some servers require a GROUP before an ARTICLE command
17 $c->docmd("GROUP misc.misc");
18
19 if(@ARGV == 0) {
20   while(<>) {
21     s/(^\s+|\s+$)//gs;
22     lookup($_);
23   }
24 } else {
25   while (@ARGV) {
26     my $item = shift @ARGV;
27     if($item !~ /[\@:]/ and not defined $group) {
28       # maybe a bare group followed by an article number
29       die unless @ARGV;
30       my $number = shift @ARGV;
31       $item = "$item $number";
32     }
33     lookup($item);
34   }
35 }
36
37 $c->docmd("QUIT");
38 close S;
39
40 sub lookup {
41   my $mid = shift;
42
43   if($mid !~ /\@/ and $mid =~ /^(.*)[: ](\d+)$/) {
44       my ($g, $n) = ($1, $2);
45       $c->docmd("GROUP $g");
46       $c->docmd("ARTICLE $n");
47   } else {
48       $mid =~ s/.*\<//;
49       $mid =~ s/\>.*//;
50       $c->docmd("ARTICLE <$mid>");
51   }
52
53   my $fh= 'STDOUT';
54   if (-t $fh) {
55     my $lesscmd= $ENV{'NNTPID_PAGER'};
56     $lesscmd= 'less' unless defined $lesscmd;
57     open LESS, "|-", 'sh','-c',$lesscmd or die $!;
58     $fh= 'LESS';
59   }
60   
61   while (1) {
62     ($code,$_) = $c->getline();
63     s/[\r\n]//g;
64     last if /^\.$/;
65     s/^\.//;
66     print $fh "$_\n";
67   }
68
69   if ($fh ne 'STDOUT') {
70     close $fh or die "$? $!";
71   }
72 }