+ &connect;
+
+ my $art = &getart($mid);
+
+ if ($pager and -t STDOUT) {
+ # Close the NNTP connection before invoking the pager, in case the
+ # user spends so long looking at the article that the server times
+ # us out.
+ &disconnect;
+
+ $pagername = $ENV{"PAGER"};
+ $pagername = "more" unless defined $pagername;
+ open PAGER, "| $pagername";
+ print PAGER $art;
+ close PAGER;
+ } else {
+ print $art;
+ }
+}
+
+sub getart {
+ my $art = shift @_;
+ my $group;
+ my $mid;
+
+ ($group, $mid) = &parsearticle($art);
+ if (!defined $mid) {
+ warn "unable to parse '$art'\n";
+ return undef;
+ } elsif (defined $group) {
+ # This is a (group, article number) pair.
+ &docmd("GROUP $group");
+ $ret = &docmd("ARTICLE $mid");
+ } else {
+ # This is a Message-Id. Some NNTP servers will insist on having
+ # seen a GROUP command before 'ARTICLE <some.random@message.id>',
+ # so ensure we've sent one.
+ &docmd("GROUP misc.misc") unless $in_a_group;
+ $ret = &docmd("ARTICLE <$mid>");
+ }
+
+ return undef if !defined $ret;
+ $in_a_group = 1;
+
+ $art = "";
+ while (1) {
+ &getline;
+ s/[\r\n]//g;
+ last if /^\.$/;
+ s/^\.//;
+ $art .= "$_\n";
+ }
+ return $art;