Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / tools / perl-5.8.0 / lib / 5.8.0 / Net / demos / nntp.mirror
CommitLineData
86530b38
AT
1#!/usr/bin/perl5
2
3### Subject: Re: Fuller example of Net::NNTP?
4### Date: Tue, 4 Feb 1997 10:37:58 -0800
5### From: "Paul E. Hoffman" <phoffman@imc.org>
6### To: Graham Barr <gbarr@ti.com>
7###
8### Thanks for your reply. After looking at the examples, I realized that
9### you're not doing what I want, which is to store the messages on the local
10### hard disk with the same message number as what was on the remote. So, I
11### rolled my own program, although I haven't finished it yet (I have a hook
12### for expiring, but haven't done it yet).
13###
14### You are welcome to use this in the Net:: distribution if you think it is
15### useful.
16###
17### NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
18###
19### This script is included as-is, I give no guarantee that it will
20### work on every system
21###
22
23use Net::NNTP;
24
25$BaseDir = '/usr/usenet';
26chdir($BaseDir) or die "Could not cd to $BaseDir\n";
27
28# Format of grouplist is:
29# groupname<tab>expirationdays
30# expirationdays is the number of days to leave the articles around;
31# set it to 0 if you want the articles to stay forever
32# If the groupname starts with a #, it is skipped
33open(GROUPLIST, 'grouplist.txt') or die "Could not open grouplist.txt\n";
34while(<GROUPLIST>) {
35 $Line = $_; chomp($Line);
36 if($Line eq '') { next }; # Skip blank lines
37 if(substr($Line, 0, 1) eq '#') { next }; # Skip comments
38 push(@Groups, $Line)
39}
40
41$NntpPtr = Net::NNTP->new('news.server.com');
42
43foreach $GroupLine (@Groups) {
44 ($GroupName, $GroupExp) = split(/\s/, $GroupLine, 2);
45 # Process the expiration first (still to be done...)
46
47 # See if this is a new group
48 unless(-e "$BaseDir/$GroupName") {
49 unless(mkdir("$BaseDir/$GroupName", 0755))
50 { die "Could not make $BaseDir/$GroupName\n" }
51 }
52 chdir("$BaseDir/$GroupName") or die "Couldn't chdir to $GroupName\n";
53 # Find the last article in the directory
54 @AllInDir = <*>; @RevSortedAllInDir = reverse(sort(@AllInDir));
55 $LenArr = @RevSortedAllInDir;
56 if($LenArr > 0) { $NumLastInDir = $RevSortedAllInDir[0] }
57 else { $NumLastInDir = 0 }
58 ($NumArt, $NumFirst, $NumLast, $XGroupName) =
59$NntpPtr->group($GroupName);
60
61 if($NumLast == $NumLastInDir) { next } # No new articles
62 if($NumLast < $NumLastInDir)
63 { die "In $GroupName, the last number was $NumLast, but the " .
64 " last number in the directory was $NumLastInDir\n" }
65 # Figure out which article to start from
66 if($NumLastInDir == 0) { $GetArtNum = $NumFirst }
67 else { $GetArtNum = $NumLastInDir + 1 }
68
69 # Now read each of the new articles
70 while(1) { # Loop until "last" is called
71 $ArtRef = $NntpPtr->article($GetArtNum);
72 @ArtArr = @$ArtRef; $ArtArrLen = @ArtArr;
73 if($ArtArrLen > 0 ) { # Skip article numbers that had 0 len
74 open(OUT, ">$GetArtNum") or
75 die "Could not create $GroupName/$GetArtNum\n";
76 print OUT @$ArtRef; close(OUT);
77 }
78
79 # Check if we're at the end
80 if($GetArtNum == $NumLast) { last }
81 $GetArtNum += 1; # Increment the article number to get
82 }
83}
84
85$NntpPtr->quit;
86exit;