From: djk Date: Wed, 4 Nov 1998 00:07:46 +0000 (+0000) Subject: loads of changes and added things X-Git-Tag: SPIDER_1_5~24 X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=6a0068ec3df1dca0c6ae2714af3c0a4a62998dcf;p=spider.git loads of changes and added things made 1.2 --- diff --git a/INSTALL b/INSTALL index 96c47d88..260aad36 100644 --- a/INSTALL +++ b/INSTALL @@ -86,10 +86,10 @@ the following modules:- [ether] NOCALL * * * * * * L - default * * * * * * - djk /spider/perl/client.pl client.pl %u ax25 + default * * * * * * - jim /spider/perl/client.pl client.pl %u ax25 NOCALL * * * * * * L - default * * * * * * - djk /spider/perl/client.pl client.pl %u ax25 + default * * * * * * - jim /spider/perl/client.pl client.pl %u ax25 where ether and bbs are appropriate KNOWN WORKING axport and nrport names respectively. diff --git a/cmd/Aliases b/cmd/Aliases new file mode 100644 index 00000000..f83d2641 --- /dev/null +++ b/cmd/Aliases @@ -0,0 +1,96 @@ +#!/usr/bin/perl +# +# provide some standard aliases for commands for terminally +# helpless ak1a user (helpless in the sense that they never +# read nor understand help files) +# +# This file is automagically reloaded if its modification time is +# later than the one stored in CmdAlias.pm +# +# PLEASE make this file consistant with reality! (the patterns MUST +# match the filenames!) +# +# Don't alter this file, copy it into the local_cmd tree and modify it. +# This file will be replaced everytime I issue a new release. +# +# You only need to put aliases in here for commands that don't work as +# you desire naturally, e.g sh/dx on its own just works as you expect +# so you need not add it as an alias. +# + + +package CmdAlias; + +%alias = ( + a => [ + '^ann.*/full', 'announce full', 'announce', + '^ann.*/sysop', 'announce sysop', 'announce', + '^ann.*/(.*)$', 'announce $1', 'announce', + ], + b => [ + ], + c => [ + ], + d => [ + '^del', 'kill', 'kill', + '^di.*/all', 'directory all', 'directory', + '^di.*/b.*', 'directory bulletins', 'directory', + '^di.*/n.*', 'directory new', 'directory', + '^di.*/o.*', 'directory own', 'directory', + '^di.*/s.*', 'directory subject', 'directory', + '^di.*/(\d+)-(\d+)', 'directory $1-$2', 'directory', + '^di.*/(\d+)', 'directory $1', 'directory', + ], + e => [ + ], + f => [ + ], + g => [ + ], + h => [ + ], + i => [ + ], + j => [ + ], + k => [ + ], + l => [ + ], + m => [ + ], + n => [ + ], + o => [ + ], + p => [ + ], + q => [ + '^q', 'bye', 'bye', + ], + r => [ + ], + s => [ + '^sh/dx/(\d+)-(\d+)', 'show/dx $1-$2', 'show/dx', + '^sh/dx/(\d+)', 'show/dx $1', 'show/dx', + '^sh/dx/d(\d+)', 'show/dx from $1', 'show/dx', + '^sp$', 'send', 'send', + '^sb$', 'send noprivate', 'send', + ], + t => [ + ], + u => [ + ], + v => [ + ], + w => [ + '^wx/full', 'wx full', 'wx', + '^wx/sysop', 'wx sysop', 'wx', + ], + x => [ + ], + y => [ + ], + z => [ + ], +) diff --git a/cmd/directory.pl b/cmd/directory.pl index d1b91ffa..ab817985 100644 --- a/cmd/directory.pl +++ b/cmd/directory.pl @@ -8,15 +8,37 @@ my ($self, $line) = @_; my @f = split /\s+/, $line; -my @ref = DXMsg::get_all(); +my @ref; my $ref; my @out; +$f[0] = uc $f[0]; +if ($f[0] eq 'ALL') { + foreach $ref (DXMsg::get_all()) { + next if $self->priv < 5 && $ref->private && $ref->to ne $self->call && $ref->from ne $self->call; + push @ref, $ref; + } +} elsif ($f[0] =~ /^O/o) { # dir/own + foreach $ref (DXMsg::get_all()) { + push @ref, $ref if $ref->private && ($ref->to eq $self->call || $ref->from eq $self->call); + } +} elsif ($f[0] =~ /^N/o) { # dir/new + foreach $ref (DXMsg::get_all()) { + push @ref, $ref if $ref->private && !$ref->read && $ref->to eq $self->call; + } +} else { + my @all = (DXMsg::get_all()); + my ($i, $count); + for ($i = $#all; $i > 0; $i--) { + $ref = $all[$i]; + next if $self->priv < 5 && $ref->private && $ref->to ne $self->call && $ref->from ne $self->call; + unshift @ref, $ref; + last if ++$count > 10; + } +} + foreach $ref (@ref) { - next if $self->priv < 5 && $ref->private && $ref->to ne $self->call; - push @out, sprintf "%6d %s%s%5d %8.8s %8.8s %-6.6s %5.5s %-30.30s", - $ref->msgno, $ref->private ? 'p' : ' ', $ref->read ? '-' : ' ', $ref->size, - $ref->to, $ref->from, cldate($ref->t), ztime($ref->t), $ref->subject; + push @out, $ref->dir; } return (1, @out); diff --git a/cmd/disconnect.pl b/cmd/disconnect.pl index 32cb543f..51ddc696 100644 --- a/cmd/disconnect.pl +++ b/cmd/disconnect.pl @@ -16,7 +16,7 @@ foreach $call (@calls) { my $dxchan = DXChannel->get($call); if ($dxchan) { if ($dxchan->is_ak1a) { - $dxchan->send_now("D", DXProt::pc39($dxchan->call, 'Disconnected')); + $dxchan->send_now("D", DXProt::pc39($main::mycall, 'Disconnected')); } else { $dxchan->disconnect; } diff --git a/cmd/kill.pl b/cmd/kill.pl index b410bc14..d3de0beb 100644 --- a/cmd/kill.pl +++ b/cmd/kill.pl @@ -21,10 +21,12 @@ for $msgno (@f) { push @out, "Msg $msgno not found"; next; } - if ($ref->private && $self->priv < 9 && $ref->to ne $ref->call) { + if ($self->priv < 5 && + (($ref->private && $ref->to ne $self->call && $ref->from ne $self->call) || + ($ref->private == 0 && $ref->from ne $self->call))) { push @out, "Msg $msgno not available"; next; - } + } $ref->del_msg; push @out, "Message $msgno deleted"; } diff --git a/cmd/read.pl b/cmd/read.pl index 9df5edad..a1352724 100644 --- a/cmd/read.pl +++ b/cmd/read.pl @@ -13,13 +13,26 @@ my @out; my @body; my $ref; +# if there are no specified message numbers, try and find a private one +# that I haven't read yet +if (@f == 0) { + foreach $ref (DXMsg::get_all()) { + if ($ref->to eq $self->call && $ref->private && !$ref->read) { + push @f, $ref->msgno; + last; + } + } +} + +return (1, "Sorry, no new messages for you") if @f == 0; + for $msgno (@f) { $ref = DXMsg::get($msgno); if (!$ref) { push @out, "Msg $msgno not found"; next; } - if ($ref->private && $self->priv < 9 && $ref->to ne $ref->call) { + if ($self->priv < 5 && $ref->private && $ref->to ne $self->call && $ref->from ne $self->call ) { push @out, "Msg $msgno not available"; next; } @@ -33,6 +46,9 @@ for $msgno (@f) { $ref->read(1); $ref->store(\@body); # note call by reference! } + + # remember this one as the last one read + $self->lastread($msgno); } return (1, @out); diff --git a/cmd/reply.pl b/cmd/reply.pl index a05e3cbe..c655b505 100644 --- a/cmd/reply.pl +++ b/cmd/reply.pl @@ -1,7 +1,82 @@ # -# reply to a message +# send a message # +# this should handle +# +# send [ .. ] +# send private [ .. ] +# send private rr [ .. ] +# send rr [ .. ] +# send noprivate [ .. ] +# send b [ .. ] +# send copy [ .. ] +# send copy rr [ .. ] +# # Copyright (c) Dirk Koopman G1TLH # # $Id$ # +my ($self, $line) = @_; +my @out; +my $loc; + +#$DB::single = 1; + +if ($self->state eq "prompt") { + + my @f = split /\s+/, $line; + + # now deal with real message inputs + # parse out send line for various possibilities + $loc = $self->{loc} = {}; + + my $i = 0; + $f[0] = uc $f[0]; + $loc->{private} = '1'; + if ($f[0] eq 'B' || $f[0] =~ /^NOP/oi) { + $loc->{private} = '0'; + $i += 1; + } elsif ($f[0] eq 'P' || $f[0] =~ /^PRI/oi) { + $i += 1; + } + + $loc->{rrreq} = '0'; + if (uc $f[$i] eq 'RR') { + $loc->{rrreq} = '1'; + $i++; + } + + my $oref; + + # check we have a reply number + if ($i > @f) { + if (!($oref = DXMsg::get($self->lastread))) { + delete $self->{loc}; + #return (0, $self->msg('esend2')); + return (0, "need a message number"); + } + } else { + $oref = DXMsg::get($f[$i]); + if (!$oref) { + delete $self->{loc}; + return (0, "can't access message $i"); + } + } + + # now save all the 'to' callsigns for later + my $to = $oref->from; + $loc->{to} = [ $to ]; # to is an array + $loc->{subject} = $oref->subject; + $loc->{subject} = "Re: " . $loc->{subject} if !($loc->{subject} =~ /^Re/io); + + # find me and set the state and the function on my state variable to + # keep calling me for every line until I relinquish control + $self->func("DXMsg::do_send_stuff"); + $self->state('sendbody'); + #push @out, $self->msg('sendsubj'); + push @out, "Reply to: $to"; + push @out, "Subject : $loc->{subject}"; + push @out, "Enter Message /EX (^Z) to send or /ABORT (^Y) to exit"; +} + +return (1, @out); diff --git a/cmd/show/bands.pl b/cmd/show/bands.pl new file mode 100644 index 00000000..158238f3 --- /dev/null +++ b/cmd/show/bands.pl @@ -0,0 +1,31 @@ +# +# display the band data +# + +#$DB::single = 1; + +my ($self, $line) = @_; +my @f = split /\s+/, $line; +my @bands; +my $band; +my @out; + +if (!$line) { + @bands = sort { Bands::get($a)->band->[0] <=> Bands::get($b)->band->[0] } Bands::get_keys(); + push @out, "Bands Available:-"; + foreach $band (@bands) { + my $ref = Bands::get($band)->band; + my $from = $ref->[0]; + my $to = $ref->[1]; + push @out, sprintf "%10s: %d -> %d", $band, $from, $to; + } + push @out, "Regions Available:-"; + @bands = Bands::get_region_keys(); + foreach $band (@bands) { + my $ref = Bands::get_region($band); + my $s = sprintf("%10s: ", $band ) . join(' ', @{$ref}); + push @out, $s; + } +} + +return (1, @out); diff --git a/cmd/talk.pl b/cmd/talk.pl index 21adc556..23efabfc 100644 --- a/cmd/talk.pl +++ b/cmd/talk.pl @@ -19,6 +19,10 @@ if ($argv[1] eq '>') { $line =~ s/^$argv[0]\s*//; } +my $call = $via ? $via : $to; +my $ref = DXCluster->get($call); +return (1, "$call not visible on the cluster") if !$ref; + my $dxchan = DXCommandmode->get($to); # is it for us? if ($dxchan && $dxchan->is_user) { $dxchan->send("$to de $from $line"); diff --git a/data/bands.pl b/data/bands.pl index 71d1fe9d..ad7c17f7 100644 --- a/data/bands.pl +++ b/data/bands.pl @@ -7,7 +7,7 @@ # these pairs attach themselves to the labels you provide, they are # independant of any other pair, they can overlap, cross etc. # -# There MUST be at last a 'band' entry +# There MUST be at least a 'band' entry # # It is up to YOU to make sure that it makes sense! # @@ -55,13 +55,15 @@ '15m' => bless( { band => [ 21000, 21450 ], cw => [ 21000, 21150 ], data => [ 21100, 21120 ], + beacon => [ 21149, 21151 ], ssb => [ 21151, 21450] }, 'Bands'), - '12m' => bless( { band => [ 21000, 21450 ], - cw => [ 21000, 21150 ], - data => [ 21100, 21120 ], - ssb => [ 21151, 21450] + '12m' => bless( { band => [ 24890, 24990 ], + cw => [ 24890, 24820 ], + data => [ 24920, 24929 ], + beacon => [ 24929, 24931 ], + ssb => [ 24931, 24990] }, 'Bands'), @@ -143,3 +145,23 @@ uhf => [ '70cm', '23cm' ], shf => [ '23cm', '13cm', '9cm', '6cm', '3cm' ], ); + +%aliases = ( + topband => '160m', + 160 => '160m', + 80 => '80m', + 40 => '40m', + 30 => '30m', + 20 => '20m', + 18 => '18m', + 15 => '15m', + 12 => '12m', + 10 => '10m', + 6 => '6m', + 4 => '4m', + 2 => '2m', + 70 => '70cm', + 23 => '23cm', + 13 => '13cm', + 3 => '3cm', +) diff --git a/html/cpan.html b/html/cpan.html new file mode 100644 index 00000000..87379f52 --- /dev/null +++ b/html/cpan.html @@ -0,0 +1,785 @@ + + +CPAN and perl installation + + +

CPAN and perl installation

+ +
+[root@rufus djk]# perl -MCPAN -e shell
+
+We have to reconfigure CPAN.pm due to following uninitialized parameters:
+
+cpan_home, keep_source_where, build_dir, build_cache, index_expire, gzip, tar, unzip, make, pager, makepl_arg, make_arg, make_install_arg, urllist, inhibit_startup_message, ftp_proxy, http_proxy, no_proxy
+
+/usr/lib/perl5/CPAN/Config.pm initialized.
+
+The CPAN module needs a directory of its own to cache important
+index files and maybe keep a temporary mirror of CPAN files. This may
+be a site-wide directory or a personal directory.
+
+
+First of all, I'd like to create this directory. Where?
+
+CPAN build and cache directory? [/root/.cpan] 
+
+
+If you want, I can keep the source files after a build in the cpan
+home directory. If you choose so then future builds will take the
+files from there. If you don't want to keep them, answer 0 to the
+next question.
+
+
+
+How big should the disk cache be for keeping the build directories
+with all the intermediate files?
+
+Cache size for build directory (in MB)? [10] 
+
+
+The CPAN module will need a few external programs to work
+properly. Please correct me, if I guess the wrong path for a program.
+Don't panic if you do not have some of them, just press ENTER for
+those.
+
+Where is your gzip program? [/bin/gzip] 
+Where is your tar program? [/bin/tar] 
+Warning: unzip not found in PATH
+Where is your unzip program? [] 
+Where is your make program? [/usr/bin/make] 
+Warning: lynx not found in PATH
+Where is your lynx program? [] 
+Where is your ncftp program? [/usr/bin/ncftp] 
+Where is your ftp program? [/usr/bin/ftp] 
+What is your favorite pager program? [/usr/bin/less] 
+What is your favorite shell? [/bin/bash] 
+
+
+Every Makefile.PL is run by perl in a separate process. Likewise we
+run 'make' and 'make install' in processes. If you have any parameters
+(e.g. PREFIX, INSTALLPRIVLIB, UNINST or the like) you want to pass to
+the calls, please specify them here.
+
+If you don't understand this question, just press ENTER.
+
+Parameters for the 'perl Makefile.PL' command? [] 
+Parameters for the 'make' command? [] 
+Parameters for the 'make install' command? [] 
+
+
+Sometimes you may wish to leave the processes run by CPAN alone
+without caring about them. As sometimes the Makefile.PL contains
+question you're expected to answer, you can set a timer that will
+kill a 'perl Makefile.PL' process after the specified time in seconds.
+
+If you set this value to 0, these processes will wait forever. This is
+the default and recommended setting.
+
+Timeout for inacivity during Makefile.PL? [0] 
+
+We need to know the URL of your favorite CPAN site.
+Please enter it here:  ftp://sunsite.doc.ic.ac.uk/packages/CPAN
+
+Testing "ftp://sunsite.doc.ic.ac.uk/packages/CPAN" ...
+
+  Please, install Net::FTP as soon as possible. CPAN.pm installs it for you
+  if you just type
+      install Bundle::libnet
+
+
+Trying with "/usr/bin/ncftp -c" to get
+    ftp://sunsite.doc.ic.ac.uk/packages/CPAN/MIRRORED.BY
+Issuing "/usr/bin/ftp -n"
+Local directory now /root/.cpan/sources
+GOT /root/.cpan/sources/MIRRORED.BY
+
+"ftp://sunsite.doc.ic.ac.uk/packages/CPAN" seems to work
+
+
+WAIT support is available as a Plugin. You need the CPAN::WAIT module
+to actually use it.  But we need to know your favorite WAIT server. If
+you don't know a WAIT server near you, just press ENTER.
+
+Your favorite WAIT server?
+   [wait://ls6.informatik.uni-dortmund.de:1404] 
+
+
+If you're accessing the net via proxies, you can specify them in the
+CPAN configuration or via environment variables. The variable in
+the $CPAN::Config takes precedence.
+
+Your ftp_proxy?  
+Your http_proxy?  
+Your no_proxy?  
+
+
+commit: wrote /usr/lib/perl5/CPAN/Config.pm
+
+cpan shell -- CPAN exploration and modules installation (v1.3102)
+ReadLine support suppressed
+
+cpan> 
+cpan> install Bundle::CPAN
+Issuing "/usr/bin/ftp -n"
+Local directory now /root/.cpan/sources/authors
+GOT /root/.cpan/sources/authors/01mailrc.txt.gz
+Going to read /root/.cpan/sources/authors/01mailrc.txt.gz
+Issuing "/usr/bin/ftp -n"
+Local directory now /root/.cpan/sources/modules
+GOT /root/.cpan/sources/modules/02packages.details.txt.gz
+Going to read /root/.cpan/sources/modules/02packages.details.txt.gz
+
+  There's a new CPAN.pm version (v1.40) available!
+  You might want to try
+    install CPAN
+    reload cpan
+  without quitting the current session. It should be a seamless upgrade
+  while we are running...
+
+Issuing "/usr/bin/ftp -n"
+Local directory now /root/.cpan/sources/modules
+GOT /root/.cpan/sources/modules/03modlist.data.gz
+Going to read /root/.cpan/sources/modules/03modlist.data.gz
+Running make for NWINT/MD5-1.7.tar.gz
+Issuing "/usr/bin/ftp -n"
+Local directory now /root/.cpan/sources/authors/id/NWINT
+GOT /root/.cpan/sources/authors/id/NWINT/MD5-1.7.tar.gz
+MD5-1.7/
+MD5-1.7/Changes
+MD5-1.7/MANIFEST
+MD5-1.7/MD5.pm
+MD5-1.7/MD5.xs
+MD5-1.7/Makefile.PL
+MD5-1.7/README
+MD5-1.7/global.h
+MD5-1.7/md5.h
+MD5-1.7/md5c.c
+MD5-1.7/test.pl
+MD5-1.7/typemap
+MD5-1.7/examples/
+MD5-1.7/examples/mddriver.pl
+MD5-1.7/examples/twdigest.pl
+
+  CPAN.pm: Going to build NWINT/MD5-1.7.tar.gz
+
+Checking if your kit is complete...
+Looks good
+Writing Makefile for MD5
+mkdir ./blib
+mkdir ./blib/lib
+mkdir ./blib/arch
+mkdir ./blib/arch/auto
+mkdir ./blib/arch/auto/MD5
+mkdir ./blib/lib/auto
+mkdir ./blib/lib/auto/MD5
+mkdir ./blib/man3
+cp MD5.pm ./blib/lib/MD5.pm
+AutoSplitting MD5 (./blib/lib/auto/MD5)
+/usr/bin/perl -I/usr/lib/perl5/i386-linux/5.00404 -I/usr/lib/perl5 /usr/lib/perl5/ExtUtils/xsubpp  -typemap /usr/lib/perl5/ExtUtils/typemap -typemap typemap MD5.xs >MD5.tc && mv MD5.tc MD5.c
+cc -c  -Dbool=char -DHAS_BOOL -I/usr/local/include -O2    -DVERSION=\"1.7\" -DXS_VERSION=\"1.7\" -fpic -I/usr/lib/perl5/i386-linux/5.00404/CORE -DPERL_BYTEORDER=1234 MD5.c
+cc -c  -Dbool=char -DHAS_BOOL -I/usr/local/include -O2    -DVERSION=\"1.7\" -DXS_VERSION=\"1.7\" -fpic -I/usr/lib/perl5/i386-linux/5.00404/CORE -DPERL_BYTEORDER=1234 md5c.c
+Running Mkbootstrap for MD5 ()
+chmod 644 MD5.bs
+LD_RUN_PATH="" cc -o blib/arch/auto/MD5/MD5.so  -shared -L/usr/local/lib MD5.o md5c.o     
+chmod 755 blib/arch/auto/MD5/MD5.so
+cp MD5.bs ./blib/arch/auto/MD5/MD5.bs
+chmod 644 blib/arch/auto/MD5/MD5.bs
+Manifying ./blib/man3/MD5.3
+  /usr/bin/make  -- OK
+Running make test
+PERL_DL_NONLAZY=1 /usr/bin/perl -I./blib/arch -I./blib/lib -I/usr/lib/perl5/i386-linux/5.00404 -I/usr/lib/perl5 test.pl
+1..14
+ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+ok 6
+ok 7
+ok 8
+ok 9
+ok 10
+ok 11
+ok 12
+ok 13
+ok 14
+  /usr/bin/make test -- OK
+Running make install
+Installing /usr/lib/perl5/site_perl/i386-linux/./auto/MD5/MD5.so
+Installing /usr/lib/perl5/site_perl/i386-linux/./auto/MD5/MD5.bs
+Installing /usr/lib/perl5/site_perl/./auto/MD5/autosplit.ix
+Installing /usr/lib/perl5/site_perl/./MD5.pm
+Installing /usr/lib/perl5/man/man3/./MD5.3
+Writing /usr/lib/perl5/site_perl/i386-linux/auto/MD5/.packlist
+Appending installation info to /usr/lib/perl5/i386-linux/5.00404/perllocal.pod
+  /usr/bin/make install  -- OK
+Running make for GSAR/Data-Dumper-2.09.tar.gz
+Issuing "/usr/bin/ftp -n"
+Local directory now /root/.cpan/sources/authors/id/GSAR
+GOT /root/.cpan/sources/authors/id/GSAR/Data-Dumper-2.09.tar.gz
+Data-Dumper-2.09/
+Data-Dumper-2.09/Dumper.html
+Data-Dumper-2.09/t/
+Data-Dumper-2.09/t/overload.t
+Data-Dumper-2.09/t/dumper.t
+Data-Dumper-2.09/MANIFEST.NOXSUB
+Data-Dumper-2.09/Dumper.pm.NOXSUB
+Data-Dumper-2.09/Dumper.xs
+Data-Dumper-2.09/Todo
+Data-Dumper-2.09/MANIFEST
+Data-Dumper-2.09/Makefile.PL
+Data-Dumper-2.09/Dumper.pm
+Data-Dumper-2.09/Changes
+Data-Dumper-2.09/README
+
+  CPAN.pm: Going to build GSAR/Data-Dumper-2.09.tar.gz
+
+Checking if your kit is complete...
+Looks good
+Writing Makefile for Data::Dumper
+mkdir ./blib
+mkdir ./blib/lib
+mkdir ./blib/lib/Data
+mkdir ./blib/arch
+mkdir ./blib/arch/auto
+mkdir ./blib/arch/auto/Data
+mkdir ./blib/arch/auto/Data/Dumper
+mkdir ./blib/lib/auto
+mkdir ./blib/lib/auto/Data
+mkdir ./blib/lib/auto/Data/Dumper
+cp Dumper.pm ./blib/lib/Data/Dumper.pm
+/usr/bin/perl -I/usr/lib/perl5/i386-linux/5.00404 -I/usr/lib/perl5 /usr/lib/perl5/ExtUtils/xsubpp  -typemap /usr/lib/perl5/ExtUtils/typemap Dumper.xs >Dumper.tc && mv Dumper.tc Dumper.c
+cc -c  -Dbool=char -DHAS_BOOL -I/usr/local/include -O2    -DVERSION=\"2.09\" -DXS_VERSION=\"2.09\" -fpic -I/usr/lib/perl5/i386-linux/5.00404/CORE  Dumper.c
+Running Mkbootstrap for Data::Dumper ()
+chmod 644 Dumper.bs
+LD_RUN_PATH="" cc -o blib/arch/auto/Data/Dumper/Dumper.so  -shared -L/usr/local/lib Dumper.o     
+chmod 755 blib/arch/auto/Data/Dumper/Dumper.so
+cp Dumper.bs ./blib/arch/auto/Data/Dumper/Dumper.bs
+chmod 644 blib/arch/auto/Data/Dumper/Dumper.bs
+  /usr/bin/make  -- OK
+Running make test
+PERL_DL_NONLAZY=1 /usr/bin/perl -I./blib/arch -I./blib/lib -I/usr/lib/perl5/i386-linux/5.00404 -I/usr/lib/perl5 -e 'use Test::Harness qw(&runtests $verbose); $verbose=0; runtests @ARGV;' t/*.t
+t/dumper............ok
+t/overload..........ok
+All tests successful.
+Files=2,  Tests=139,  0 secs ( 0.55 cusr  0.05 csys =  0.60 cpu)
+  /usr/bin/make test -- OK
+Running make install
+Installing /usr/lib/perl5/site_perl/i386-linux/./auto/Data/Dumper/Dumper.so
+Installing /usr/lib/perl5/site_perl/i386-linux/./auto/Data/Dumper/Dumper.bs
+Installing /usr/lib/perl5/site_perl/./Data/Dumper.pm
+Writing /usr/lib/perl5/site_perl/i386-linux/auto/Data/Dumper/.packlist
+Appending installation info to /usr/lib/perl5/i386-linux/5.00404/perllocal.pod
+  /usr/bin/make install  -- OK
+Issuing "/usr/bin/ftp -n"
+Local directory now /root/.cpan/sources/authors/id/GBARR
+GOT /root/.cpan/sources/authors/id/GBARR/Bundle-libnet-1.00.tar.gz
+Bundle-libnet-1.00/
+Bundle-libnet-1.00/Makefile.PL
+Bundle-libnet-1.00/libnet.pm
+Bundle-libnet-1.00/README
+Bundle-libnet-1.00/MANIFEST
+Data::Dumper is up to date.
+Running make for JROGERS/Net-Telnet-3.01.tar.gz
+Issuing "/usr/bin/ftp -n"
+Local directory now /root/.cpan/sources/authors/id/JROGERS
+GOT /root/.cpan/sources/authors/id/JROGERS/Net-Telnet-3.01.tar.gz
+Net-Telnet-3.01/
+Net-Telnet-3.01/Makefile.PL
+Net-Telnet-3.01/ChangeLog
+Net-Telnet-3.01/lib/
+Net-Telnet-3.01/lib/Net/
+Net-Telnet-3.01/lib/Net/Telnet.pm
+Net-Telnet-3.01/t/
+Net-Telnet-3.01/t/select.t
+Net-Telnet-3.01/README
+Net-Telnet-3.01/MANIFEST
+
+  CPAN.pm: Going to build JROGERS/Net-Telnet-3.01.tar.gz
+
+Checking if your kit is complete...
+Looks good
+Writing Makefile for Net::Telnet
+mkdir ./blib
+mkdir ./blib/lib
+mkdir ./blib/lib/Net
+mkdir ./blib/arch
+mkdir ./blib/arch/auto
+mkdir ./blib/arch/auto/Net
+mkdir ./blib/arch/auto/Net/Telnet
+mkdir ./blib/lib/auto
+mkdir ./blib/lib/auto/Net
+mkdir ./blib/lib/auto/Net/Telnet
+mkdir ./blib/man3
+cp lib/Net/Telnet.pm ./blib/lib/Net/Telnet.pm
+Manifying ./blib/man3/Net::Telnet.3
+  /usr/bin/make  -- OK
+Running make test
+PERL_DL_NONLAZY=1 /usr/bin/perl -I./blib/arch -I./blib/lib -I/usr/lib/perl5/i386-linux/5.00404 -I/usr/lib/perl5 -e 'use Test::Harness qw(&runtests $verbose); $verbose=0; runtests @ARGV;' t/*.t
+t/select............ok
+All tests successful.
+Files=1,  Tests=1,  0 secs ( 0.38 cusr  0.02 csys =  0.40 cpu)
+  /usr/bin/make test -- OK
+Running make install
+Installing /usr/lib/perl5/site_perl/./Net/Telnet.pm
+Installing /usr/lib/perl5/man/man3/./Net::Telnet.3
+Writing /usr/lib/perl5/site_perl/i386-linux/auto/Net/Telnet/.packlist
+Appending installation info to /usr/lib/perl5/i386-linux/5.00404/perllocal.pod
+  /usr/bin/make install  -- OK
+Running make for GBARR/libnet-1.0605.tar.gz
+Issuing "/usr/bin/ftp -n"
+Local directory now /root/.cpan/sources/authors/id/GBARR
+GOT /root/.cpan/sources/authors/id/GBARR/libnet-1.0605.tar.gz
+libnet-1.0605/
+libnet-1.0605/Net/
+libnet-1.0605/Net/FTP/
+libnet-1.0605/Net/FTP/dataconn.pm
+libnet-1.0605/Net/FTP/L.pm
+libnet-1.0605/Net/FTP/A.pm
+libnet-1.0605/Net/FTP/E.pm
+libnet-1.0605/Net/FTP/I.pm
+libnet-1.0605/Net/POP3.pm
+libnet-1.0605/Net/SMTP.pm
+libnet-1.0605/Net/FTP.pm
+libnet-1.0605/Net/Cmd.pm
+libnet-1.0605/Net/DummyInetd.pm
+libnet-1.0605/Net/NNTP.pm
+libnet-1.0605/Net/SNPP.pm
+libnet-1.0605/Net/Time.pm
+libnet-1.0605/Net/Domain.pm
+libnet-1.0605/Net/PH.pm
+libnet-1.0605/Net/Netrc.pm
+libnet-1.0605/demos/
+libnet-1.0605/demos/smtp.self
+libnet-1.0605/demos/nntp
+libnet-1.0605/demos/pop3
+libnet-1.0605/demos/time
+libnet-1.0605/demos/snpp
+libnet-1.0605/demos/nntp.mirror
+libnet-1.0605/demos/ftp
+libnet-1.0605/demos/inetd
+libnet-1.0605/Hostname.pm.eg
+libnet-1.0605/t/
+libnet-1.0605/t/nntp.t
+libnet-1.0605/t/ph.t
+libnet-1.0605/t/require.t
+libnet-1.0605/t/hostname.t
+libnet-1.0605/t/smtp.t
+libnet-1.0605/t/ftp.t
+libnet-1.0605/FAQ.pod
+libnet-1.0605/README.config
+libnet-1.0605/MANIFEST
+libnet-1.0605/Configure
+libnet-1.0605/Makefile.PL
+libnet-1.0605/ChangeLog
+libnet-1.0605/README
+
+  CPAN.pm: Going to build GBARR/libnet-1.0605.tar.gz
+
+Checking for Socket...ok
+Checking for IO::Socket...ok
+Checking for Data::Dumper...ok
+Checking if your kit is complete...
+Looks good
+
+This script will prompt you to enter hostnames that can be used as
+defaults for some of the modules in the libnet distribution.
+
+To ensure that you do not enter an invalid hostname, I can perform a
+lookup on each hostname you enter. If your internet connection is via
+a dialup line then you may not want me to perform these lookups, as
+it will require you to be on-line.
+
+Do you want me to perform hostname lookups (y|n) ? [yes] no
+
+*** WARNING *** WARNING *** WARNING *** WARNING *** WARNING ***
+
+OK I will not check if the hostnames you give are valid
+so be very cafeful
+
+*** WARNING *** WARNING *** WARNING *** WARNING *** WARNING ***
+
+The following questions all require a list of host names, separated
+with spaces. If you do not have a host available for any of the
+services, then enter a single space, followed by . To accept the
+default, hit 
+
+Enter a list of available NNTP hosts : [news]  
+Enter a list of available SMTP hosts : [mailhost]  
+Enter a list of available POP3 hosts : []  
+Enter a list of available SNPP hosts : []  
+Enter a list of available PH Hosts   : [dirserv]  
+Enter a list of available TIME Hosts   : []  
+Enter a list of available DAYTIME Hosts   : []  
+
+Some companies access the internet via a firewall machine, and all
+FTP access must be dove via this machine.
+
+If to gain FTP access to a machine beyond a firewall, you have to use
+a FTP proxy machine and login as username@remote.host then enter
+the name of that gateway here.
+
+FTP proxy hostname : [] 
+
+Normally when FTP needs a data connection the client tells the server
+a port to connect to, and the server initiates a connection to the client.
+
+Some setups, in particular firewall setups, can/do not work using this
+protocol. In these situations the client must make the connection to the
+server, this is called a passive transfer.
+
+Should all FTP connections via a firewall/proxy be passive (y|n) ? [no] 
+
+Should all other FTP connections be passive (y|n) ? [no] 
+
+What is your local internet domain name : [] tubby.org
+
+If you specified some default hosts above, it is possible for me to
+do some basic tests when you run `make test'
+
+This will cause `make test' to be quite a bit slower and, if your
+internet connection is via dialup, will require you to be on-line
+unless the hosts are local.
+
+Do you want me to run these tests (y|n) ? [yes] 
+
+To allow Net::FTP to be tested I will need a hostname. This host
+should allow anonymous access and have a /pub directory
+
+What host can I use : [] localhost
+
+Writing libnet.cfg
+Writing Makefile for Net
+mkdir ./blib
+mkdir ./blib/lib
+mkdir ./blib/arch
+mkdir ./blib/arch/auto
+mkdir ./blib/arch/auto/Net
+mkdir ./blib/lib/auto
+mkdir ./blib/lib/auto/Net
+mkdir ./blib/man3
+cp Net/DummyInetd.pm ./blib/lib/Net/DummyInetd.pm
+cp Net/NNTP.pm ./blib/lib/Net/NNTP.pm
+cp Net/FTP/dataconn.pm ./blib/lib/Net/FTP/dataconn.pm
+cp Net/SNPP.pm ./blib/lib/Net/SNPP.pm
+cp Net/FTP/I.pm ./blib/lib/Net/FTP/I.pm
+cp Net/POP3.pm ./blib/lib/Net/POP3.pm
+cp Net/SMTP.pm ./blib/lib/Net/SMTP.pm
+cp Net/FTP/L.pm ./blib/lib/Net/FTP/L.pm
+cp FAQ.pod ./blib/lib/FAQ.pod
+cp Net/FTP.pm ./blib/lib/Net/FTP.pm
+cp Net/Time.pm ./blib/lib/Net/Time.pm
+cp Net/Cmd.pm ./blib/lib/Net/Cmd.pm
+cp Net/Domain.pm ./blib/lib/Net/Domain.pm
+cp Net/PH.pm ./blib/lib/Net/PH.pm
+cp Net/FTP/A.pm ./blib/lib/Net/FTP/A.pm
+cp libnet.cfg ./blib/arch/Net/Config.pm
+cp Net/Netrc.pm ./blib/lib/Net/Netrc.pm
+cp Net/FTP/E.pm ./blib/lib/Net/FTP/E.pm
+Manifying ./blib/man3/Net::Time.3
+Manifying ./blib/man3/FAQ.3
+/usr/bin/pod2man: FAQ.pod is missing required section: DESCRIPTION
+Manifying ./blib/man3/Net::Domain.3
+Manifying ./blib/man3/Net::PH.3
+Manifying ./blib/man3/Net::NNTP.3
+Manifying ./blib/man3/Net::DummyInetd.3
+Manifying ./blib/man3/Net::SNPP.3
+Manifying ./blib/man3/Net::FTP.3
+Manifying ./blib/man3/Net::POP3.3
+Manifying ./blib/man3/Net::Netrc.3
+Manifying ./blib/man3/Net::SMTP.3
+Manifying ./blib/man3/Net::Cmd.3
+  /usr/bin/make  -- OK
+Running make test
+PERL_DL_NONLAZY=1 /usr/bin/perl -I./blib/arch -I./blib/lib -I/usr/lib/perl5/i386-linux/5.00404 -I/usr/lib/perl5 -e 'use Test::Harness qw(&runtests $verbose); $verbose=0; runtests @ARGV;' t/*.t
+t/ftp...............ok
+t/hostname..........ok
+t/nntp..............skipping test on this platform
+t/ph................skipping test on this platform
+t/require...........ok
+t/smtp..............skipping test on this platform
+All tests successful.
+Files=6,  Tests=16,  3 secs ( 2.12 cusr  0.23 csys =  2.35 cpu)
+  /usr/bin/make test -- OK
+Running make install
+Installing /usr/lib/perl5/site_perl/i386-linux/./Net/Config.pm
+Installing /usr/lib/perl5/site_perl/./Net/DummyInetd.pm
+Installing /usr/lib/perl5/site_perl/./Net/NNTP.pm
+Installing /usr/lib/perl5/site_perl/./Net/FTP/dataconn.pm
+Installing /usr/lib/perl5/site_perl/./Net/FTP/I.pm
+Installing /usr/lib/perl5/site_perl/./Net/FTP/L.pm
+Installing /usr/lib/perl5/site_perl/./Net/FTP/A.pm
+Installing /usr/lib/perl5/site_perl/./Net/FTP/E.pm
+Installing /usr/lib/perl5/site_perl/./Net/SNPP.pm
+Installing /usr/lib/perl5/site_perl/./Net/POP3.pm
+Installing /usr/lib/perl5/site_perl/./Net/SMTP.pm
+Installing /usr/lib/perl5/site_perl/./Net/FTP.pm
+Installing /usr/lib/perl5/site_perl/./Net/Time.pm
+Installing /usr/lib/perl5/site_perl/./Net/Cmd.pm
+Installing /usr/lib/perl5/site_perl/./Net/Domain.pm
+Installing /usr/lib/perl5/site_perl/./Net/PH.pm
+Installing /usr/lib/perl5/site_perl/./Net/Netrc.pm
+Installing /usr/lib/perl5/site_perl/./FAQ.pod
+Installing /usr/lib/perl5/man/man3/./Net::Time.3
+Installing /usr/lib/perl5/man/man3/./FAQ.3
+Installing /usr/lib/perl5/man/man3/./Net::Domain.3
+Installing /usr/lib/perl5/man/man3/./Net::PH.3
+Installing /usr/lib/perl5/man/man3/./Net::NNTP.3
+Installing /usr/lib/perl5/man/man3/./Net::DummyInetd.3
+Installing /usr/lib/perl5/man/man3/./Net::SNPP.3
+Installing /usr/lib/perl5/man/man3/./Net::FTP.3
+Installing /usr/lib/perl5/man/man3/./Net::POP3.3
+Installing /usr/lib/perl5/man/man3/./Net::Netrc.3
+Installing /usr/lib/perl5/man/man3/./Net::SMTP.3
+Installing /usr/lib/perl5/man/man3/./Net::Cmd.3
+Writing /usr/lib/perl5/site_perl/i386-linux/auto/Net/.packlist
+Appending installation info to /usr/lib/perl5/i386-linux/5.00404/perllocal.pod
+  /usr/bin/make install  -- OK
+Running make for KJALB/TermReadKey-2.12.tar.gz
+Issuing "/usr/bin/ftp -n"
+Local directory now /root/.cpan/sources/authors/id/KJALB
+GOT /root/.cpan/sources/authors/id/KJALB/TermReadKey-2.12.tar.gz
+TermReadKey-2.12/
+TermReadKey-2.12/Makefile.PL
+TermReadKey-2.12/ReadKey.pm
+TermReadKey-2.12/test.pl
+TermReadKey-2.12/Configure.pm
+TermReadKey-2.12/genchars.pl
+TermReadKey-2.12/README
+TermReadKey-2.12/ReadKey.xs
+TermReadKey-2.12/MANIFEST
+
+  CPAN.pm: Going to build KJALB/TermReadKey-2.12.tar.gz
+
+Checking if your kit is complete...
+Looks good
+Writing Makefile for Term::ReadKey
+mkdir ./blib
+mkdir ./blib/lib
+mkdir ./blib/lib/Term
+mkdir ./blib/arch
+mkdir ./blib/arch/auto
+mkdir ./blib/arch/auto/Term
+mkdir ./blib/arch/auto/Term/ReadKey
+mkdir ./blib/lib/auto
+mkdir ./blib/lib/auto/Term
+mkdir ./blib/lib/auto/Term/ReadKey
+mkdir ./blib/man3
+cp ReadKey.pm ./blib/lib/Term/ReadKey.pm
+AutoSplitting Term::ReadKey (./blib/lib/auto/Term/ReadKey)
+/usr/bin/perl -I/usr/lib/perl5 genchars.pl
+
+Writing termio/termios section of cchars.h... Done.
+Checking for sgtty...
+        Sgtty NOT found.
+Writing sgtty section of cchars.h... Done.
+/usr/bin/perl -I/usr/lib/perl5/i386-linux/5.00404 -I/usr/lib/perl5 /usr/lib/perl5/ExtUtils/xsubpp  -typemap /usr/lib/perl5/ExtUtils/typemap ReadKey.xs >ReadKey.tc && mv ReadKey.tc ReadKey.c
+Please specify prototyping behavior for ReadKey.xs (see perlxs manual)
+cc -c  -Dbool=char -DHAS_BOOL -I/usr/local/include -O2    -DVERSION=\"2.12\" -DXS_VERSION=\"2.12\" -fpic -I/usr/lib/perl5/i386-linux/5.00404/CORE  ReadKey.c
+In file included from /usr/include/sys/select.h:31,
+                 from ReadKey.xs:240:
+/usr/include/selectbits.h:30: warning: `__FD_ZERO' redefined
+/usr/include/asm/posix_types.h:65: warning: this is the location of the previous definition
+/usr/include/selectbits.h:35: warning: `__FD_SET' redefined
+/usr/include/asm/posix_types.h:45: warning: this is the location of the previous definition
+/usr/include/selectbits.h:40: warning: `__FD_CLR' redefined
+/usr/include/asm/posix_types.h:50: warning: this is the location of the previous definition
+/usr/include/selectbits.h:49: warning: `__FD_ISSET' redefined
+/usr/include/asm/posix_types.h:58: warning: this is the location of the previous definition
+In file included from ReadKey.xs:240:
+/usr/include/sys/select.h:60: warning: `FD_SET' redefined
+/usr/include/linux/time.h:59: warning: this is the location of the previous definition
+/usr/include/sys/select.h:61: warning: `FD_CLR' redefined
+/usr/include/linux/time.h:60: warning: this is the location of the previous definition
+/usr/include/sys/select.h:62: warning: `FD_ISSET' redefined
+/usr/include/linux/time.h:61: warning: this is the location of the previous definition
+/usr/include/sys/select.h:63: warning: `FD_ZERO' redefined
+/usr/include/linux/time.h:62: warning: this is the location of the previous definition
+In file included from ReadKey.xs:240:
+/usr/include/sys/select.h:45: syntax error before `fd_mask'
+/usr/include/sys/select.h:45: warning: empty declaration
+/usr/include/sys/select.h:48: conflicting types for `fd_set'
+/usr/include/linux/types.h:9: previous declaration of `fd_set'
+/usr/include/sys/select.h:73: conflicting types for `__select'
+/usr/include/sys/time.h:55: previous declaration of `__select'
+/usr/include/sys/select.h:76: conflicting types for `select'
+/usr/include/sys/time.h:58: previous declaration of `select'
+ReadKey.xs: In function `selectfile':
+ReadKey.xs:1441: `__fd_mask' undeclared (first use this function)
+ReadKey.xs:1441: (Each undeclared identifier is reported only once
+ReadKey.xs:1441: for each function it appears in.)
+make: *** [ReadKey.o] Error 1
+  /usr/bin/make  -- NOT OK
+Running make test
+  Oops, make had returned bad status
+Running make install
+  Oops, make had returned bad status
+Running make for ILYAZ/modules/Term-ReadLine-Perl-0.9904.tar.gz
+Issuing "/usr/bin/ftp -n"
+Local directory now /root/.cpan/sources/authors/id/ILYAZ/modules
+GOT /root/.cpan/sources/authors/id/ILYAZ/modules/Term-ReadLine-Perl-0.9904.tar.gz
+Term-ReadLine-Perl-0.9904/
+Term-ReadLine-Perl-0.9904/CHANGES
+Term-ReadLine-Perl-0.9904/Makefile.PL
+Term-ReadLine-Perl-0.9904/MANIFEST
+Term-ReadLine-Perl-0.9904/ReadLine/
+Term-ReadLine-Perl-0.9904/ReadLine/Perl.pm
+Term-ReadLine-Perl-0.9904/ReadLine/readline.pm
+Term-ReadLine-Perl-0.9904/README
+Term-ReadLine-Perl-0.9904/test.pl
+
+  CPAN.pm: Going to build ILYAZ/modules/Term-ReadLine-Perl-0.9904.tar.gz
+
+Checking if your kit is complete...
+Looks good
+Writing Makefile for Term::ReadLine
+mkdir ./blib
+mkdir ./blib/lib
+mkdir ./blib/lib/Term
+mkdir ./blib/arch
+mkdir ./blib/arch/auto
+mkdir ./blib/arch/auto/Term
+mkdir ./blib/arch/auto/Term/ReadLine
+mkdir ./blib/lib/auto
+mkdir ./blib/lib/auto/Term
+mkdir ./blib/lib/auto/Term/ReadLine
+cp ReadLine/Perl.pm ./blib/lib/Term/ReadLine/Perl.pm
+cp ReadLine/readline.pm ./blib/lib/Term/ReadLine/readline.pm
+  /usr/bin/make  -- OK
+Running make test
+PERL_DL_NONLAZY=1 /usr/bin/perl -I./blib/arch -I./blib/lib -I/usr/lib/perl5/i386-linux/5.00404 -I/usr/lib/perl5 test.pl
+Features present: preput 1 tkRunning 1 appname 1 getHistory 1 ornaments 1 attribs 1 newTTY 1 autohistory 1 addHistory 1 minline 1 setHistory 1
+Can't ioctl TIOCGETP: Invalid argument
+Consider installing Term::ReadKey from CPAN site nearby
+        at http://www.perl.com/CPAN
+Or use
+        perl -MCPAN -e shell
+to reach CPAN. Falling back to 'stty'.
+        If you do not want to see this warning, set PERL_READLINE_NOWARN
+in your environment.
+Enter arithmetic or Perl expression: exit
+  /usr/bin/make test -- OK
+Running make install
+Installing /usr/lib/perl5/site_perl/./Term/ReadLine/Perl.pm
+Installing /usr/lib/perl5/site_perl/./Term/ReadLine/readline.pm
+Writing /usr/lib/perl5/site_perl/i386-linux/auto/Term/ReadLine/.packlist
+Appending installation info to /usr/lib/perl5/i386-linux/5.00404/perllocal.pod
+  /usr/bin/make install  -- OK
+Running make for ULPFR/CPAN-WAIT-0.24.tar.gz
+Issuing "/usr/bin/ftp -n"
+Local directory now /root/.cpan/sources/authors/id/ULPFR
+GOT /root/.cpan/sources/authors/id/ULPFR/CPAN-WAIT-0.24.tar.gz
+CPAN-WAIT-0.24/
+CPAN-WAIT-0.24/ChangeLog
+CPAN-WAIT-0.24/Makefile.PL
+CPAN-WAIT-0.24/lib/
+CPAN-WAIT-0.24/lib/WAIT/
+CPAN-WAIT-0.24/lib/WAIT/Client.pm
+CPAN-WAIT-0.24/lib/CPAN/
+CPAN-WAIT-0.24/lib/CPAN/WAIT.pm
+CPAN-WAIT-0.24/README
+CPAN-WAIT-0.24/t/
+CPAN-WAIT-0.24/t/basic.t
+CPAN-WAIT-0.24/MANIFEST
+
+  CPAN.pm: Going to build ULPFR/CPAN-WAIT-0.24.tar.gz
+
+Checking if your kit is complete...
+Looks good
+Writing Makefile for CPAN::WAIT
+mkdir ./blib
+mkdir ./blib/lib
+mkdir ./blib/lib/CPAN
+mkdir ./blib/arch
+mkdir ./blib/arch/auto
+mkdir ./blib/arch/auto/CPAN
+mkdir ./blib/arch/auto/CPAN/WAIT
+mkdir ./blib/lib/auto
+mkdir ./blib/lib/auto/CPAN
+mkdir ./blib/lib/auto/CPAN/WAIT
+mkdir ./blib/man3
+cp lib/WAIT/Client.pm ./blib/lib/WAIT/Client.pm
+cp lib/CPAN/WAIT.pm ./blib/lib/CPAN/WAIT.pm
+Manifying ./blib/man3/CPAN::WAIT.3
+  /usr/bin/make  -- OK
+Running make test
+PERL_DL_NONLAZY=1 /usr/bin/perl -I./blib/arch -I./blib/lib -I/usr/lib/perl5/i386-linux/5.00404 -I/usr/lib/perl5 -e 'use Test::Harness qw(&runtests $verbose); $verbose=0; runtests @ARGV;' t/*.t
+t/basic.............ok
+All tests successful.
+Files=1,  Tests=5,  3 secs ( 0.90 cusr  0.08 csys =  0.98 cpu)
+  /usr/bin/make test -- OK
+Running make install
+Installing /usr/lib/perl5/site_perl/./CPAN/WAIT.pm
+Installing /usr/lib/perl5/site_perl/./WAIT/Client.pm
+Installing /usr/lib/perl5/man/man3/./CPAN::WAIT.3
+Writing /usr/lib/perl5/site_perl/i386-linux/auto/CPAN/WAIT/.packlist
+Appending installation info to /usr/lib/perl5/i386-linux/5.00404/perllocal.pod
+  /usr/bin/make install  -- OK
+Running make for ANDK/CPAN-1.40.tar.gz
+Issuing "/usr/bin/ftp -n"
+Local directory now /root/.cpan/sources/authors/id/ANDK
+GOT /root/.cpan/sources/authors/id/ANDK/CPAN-1.40.tar.gz
+CPAN-1.40/
+CPAN-1.40/lib/
+CPAN-1.40/lib/CPAN.pm
+CPAN-1.40/lib/CPAN/
+CPAN-1.40/lib/CPAN/Nox.pm
+CPAN-1.40/lib/CPAN/FirstTime.pm
+CPAN-1.40/lib/Bundle/
+CPAN-1.40/lib/Bundle/CPAN.pm
+CPAN-1.40/Todo
+CPAN-1.40/t/
+CPAN-1.40/t/loadme.t
+CPAN-1.40/MANIFEST
+CPAN-1.40/Makefile.PL
+CPAN-1.40/Changes
+CPAN-1.40/README
+
+  CPAN.pm: Going to build ANDK/CPAN-1.40.tar.gz
+
+Checking if your kit is complete...
+Looks good
+Writing Makefile for CPAN
+mkdir ./blib
+mkdir ./blib/lib
+mkdir ./blib/arch
+mkdir ./blib/arch/auto
+mkdir ./blib/arch/auto/CPAN
+mkdir ./blib/lib/auto
+mkdir ./blib/lib/auto/CPAN
+mkdir ./blib/man3
+cp lib/CPAN/FirstTime.pm ./blib/lib/CPAN/FirstTime.pm
+cp lib/CPAN.pm ./blib/lib/./CPAN.pm
+cp lib/Bundle/CPAN.pm ./blib/lib/Bundle/CPAN.pm
+cp lib/CPAN/Nox.pm ./blib/lib/CPAN/Nox.pm
+Manifying ./blib/man3/CPAN::FirstTime.3
+Manifying ./blib/man3/CPAN.3
+Manifying ./blib/man3/Bundle::CPAN.3
+Manifying ./blib/man3/CPAN::Nox.3
+  /usr/bin/make  -- OK
+Running make test
+PERL_DL_NONLAZY=1 /usr/bin/perl -I./blib/arch -I./blib/lib -I/usr/lib/perl5/i386-linux/5.00404 -I/usr/lib/perl5 -e 'use Test::Harness qw(&runtests $verbose); $verbose=0; runtests @ARGV;' t/*.t
+t/loadme............ok
+All tests successful.
+Files=1,  Tests=1,  0 secs ( 0.69 cusr  0.06 csys =  0.75 cpu)
+  /usr/bin/make test -- OK
+Running make install
+Installing /usr/lib/perl5/./CPAN/FirstTime.pm
+Installing /usr/lib/perl5/./CPAN/Nox.pm
+Installing /usr/lib/perl5/./CPAN.pm
+Installing /usr/lib/perl5/./Bundle/CPAN.pm
+Installing /usr/lib/perl5/man/man3/./CPAN::FirstTime.3
+Installing /usr/lib/perl5/man/man3/./CPAN.3
+Installing /usr/lib/perl5/man/man3/./Bundle::CPAN.3
+Installing /usr/lib/perl5/man/man3/./CPAN::Nox.3
+Writing /usr/lib/perl5/i386-linux/5.00404/auto/CPAN/.packlist
+Appending installation info to /usr/lib/perl5/i386-linux/5.00404/perllocal.pod
+  /usr/bin/make install  -- OK
+
+cpan> q
+Lockfile removed.
+
+
+
Version: $Id$
+ + diff --git a/html/index.html b/html/index.html new file mode 100644 index 00000000..e69de29b diff --git a/html/install.html b/html/install.html new file mode 100644 index 00000000..e69de29b diff --git a/html/perl.html b/html/perl.html new file mode 100644 index 00000000..e69de29b diff --git a/perl/Bands.pm b/perl/Bands.pm index 3f3c9984..55ac154c 100644 --- a/perl/Bands.pm +++ b/perl/Bands.pm @@ -14,10 +14,11 @@ use DXVars; use Carp; use strict; -use vars qw(%bands %regions $bandsfn %valid); +use vars qw(%bands %regions %aliases $bandsfn %valid); %bands = (); # the 'raw' band data %regions = (); # list of regions for shortcuts eg vhf ssb +%aliases = (); # list of aliases $bandsfn = "$main::data/bands.pl"; %valid = ( @@ -47,6 +48,8 @@ sub load sub get { my $call = shift; + my $ncall = $aliases{$call}; + $call = $ncall if $ncall; return $bands{$call}; } @@ -62,6 +65,25 @@ sub get_keys return keys(%bands); } +# get all the region keys +sub get_region_keys +{ + return keys(%regions); +} + +# get all the alias keys +sub get_alias_keys +{ + return keys(%aliases); +} + +# get a region +sub get_region +{ + my $reg = shift; + return $regions{$reg}; +} + # get all the frequency pairs associated with the band and sub-band offered # the band can be a region, sub-band can be missing # diff --git a/perl/CmdAlias.pm b/perl/CmdAlias.pm new file mode 100644 index 00000000..e5f6686a --- /dev/null +++ b/perl/CmdAlias.pm @@ -0,0 +1,128 @@ +# +# This package simply takes a string, looks it up in a +# hash and returns the value. +# +# The hash is produced by reading the Alias file in both command directories +# which contain entries for the %cmd hash. This file is in different forms in +# the two directories:- +# +# in the main cmd directory it has entries like:- +# +# package CmdAlias; +# +# %alias = ( +# sp => 'send private', +# s/p => 'send private', +# sb => 'send bulletin', +# ); +# +# for the local cmd directory you should do it like this:- +# +# package CmdAlias; +# +# $alias{'s/p'} = 'send private'; +# $alias{'s/b'} = 'send bulletin'; +# +# This will allow you to override as well as add to the basic set of commands +# +# This system works in same way as the commands, if the modification times of +# the two files have changed then they are re-read. +# +# Copyright (c) 1998 Dirk Koopman G1TLH +# +# $Id$ +# + +package CmdAlias; + +use DXVars; +use DXDebug; +use Carp; + +use strict; + +use vars qw(%alias $cmd_mtime $localcmd_mtime $fn $localfn); + +%alias = (); + +$cmd_mtime = 1; +$localcmd_mtime = 1; + +$fn = "$main::cmd/Aliases"; +$localfn = "$main::localcmd/Aliases"; + +sub checkfiles +{ + my $m = -M $fn; +# print "m: $m oldmtime: $cmd_mtime\n"; + if ($m < $cmd_mtime) { + do $fn; + confess $@ if $@; + $cmd_mtime = $m; + $localcmd_mtime = 0; + } + if (-e $localfn) { + $m = -M $localfn; + if ($m < $localcmd_mtime) { + do $localfn; + confess $@ if $@; + $localcmd_mtime = $m; + } + } +} + +# +# called as CmdAlias::get_cmd("string"); +# +sub get_cmd +{ + my $s = shift; + my ($let) = unpack "A1", $s; + my ($i, $n, $ref); + + $let = lc $let; + + checkfiles(); + + $ref = $alias{$let}; + return undef if !$ref; + + $n = @{$ref}; + for ($i = 0; $i < $n; $i += 3) { + if ($s =~ /$ref->[$i]/i) { + my $ri = qq{\$ro = "$ref->[$i+1]"}; + my $ro; + eval $ri; + return $ro; + } + } + return undef; +} + +# +# called as CmdAlias::get_hlp("string"); +# +sub get_hlp +{ + my $s = shift; + my ($let) = unpack "A1", $s; + my ($i, $n, $ref); + + $let = lc $let; + + checkfiles(); + + $ref = $alias{$let}; + return undef if !$ref; + + $n = @{$ref}; + for ($i = 0; $i < $n; $i += 3) { + if ($s =~ /$ref->[$i]/i) { + my $ri = qq{$ref->[$i+2]}; + return $ri; + } + } + return undef; +} + + diff --git a/perl/DXChannel.pm b/perl/DXChannel.pm index 6ca2fc2c..9f0db819 100644 --- a/perl/DXChannel.pm +++ b/perl/DXChannel.pm @@ -59,7 +59,8 @@ use vars qw(%channels %valid); redirect => '0,Redirect messages to', lang => '0,Language', func => '9,Function', - loc => '9,Local Vars', # used by func to store local variables in + loc => '9,Local Vars', # used by func to store local variables in + lastread => '9,Last Msg Read', ); # create a new channel object [$obj = DXChannel->new($call, $msg_conn_obj, $user_obj)] diff --git a/perl/DXCommandmode.pm b/perl/DXCommandmode.pm index 024ccb0e..5348212d 100644 --- a/perl/DXCommandmode.pm +++ b/perl/DXCommandmode.pm @@ -17,15 +17,18 @@ use DXUser; use DXVars; use DXDebug; use DXM; +use CmdAlias; use FileHandle; use Carp; use strict; -use vars qw(%Cache %cmd_cache $errstr); +use vars qw(%Cache %cmd_cache $errstr %aliases); %Cache = (); # cache of dynamically loaded routine's mod times %cmd_cache = (); # cache of short names $errstr = (); # error string from eval +%aliases = (); # aliases for (parts of) commands + # # obtain a new connection this is derived from dxchannel # @@ -109,6 +112,12 @@ sub normal if ($cmd) { my ($path, $fcmd); + + # alias it if possible + my $acmd = CmdAlias::get_cmd($cmd); + if ($acmd) { + ($cmd, $args) = "$acmd $args" =~ /^([\w\/]+)\s*(.*)/o; + } # first expand out the entry to a command ($path, $fcmd) = search($main::localcmd, $cmd, "pl"); @@ -386,9 +395,8 @@ sub find_cmd_name { if (!open $fh, $filename) { $errstr = "Syserr: can't open '$filename' $!"; }; - my $old = $fh->input_record_separator(undef); + local $/ = undef; my $sub = <$fh>; - $fh->input_record_separator($old); close $fh; #wrap the code into a subroutine inside our unique package diff --git a/perl/DXLog.pm b/perl/DXLog.pm new file mode 100644 index 00000000..6c2eeee9 --- /dev/null +++ b/perl/DXLog.pm @@ -0,0 +1,35 @@ +# +# the general purpose logging machine +# +# This module is designed to allow you to log stuff in specific places +# and will rotate logs on a monthly, weekly or daily basis. +# +# The idea is that you give it a prefix which is a directory and then +# the system will log stuff to a directory structure which looks like:- +# +# daily:- +# spots/1998/[.] +# +# weekly :- +# log/1998/[.] +# +# monthly +# wwv/1998/[.] +# +# Routines are provided to read these files in and to append to them +# +# Copyright (c) - 1998 Dirk Koopman G1TLH +# +# $Id$ +# + +package DXLog; + +use FileHandle; +use DXVars; +use DXDebug; +use DXUtil; +use Julian; +use Carp; + +use strict; diff --git a/perl/DXMsg.pm b/perl/DXMsg.pm index e9097d9c..9316c374 100644 --- a/perl/DXMsg.pm +++ b/perl/DXMsg.pm @@ -167,6 +167,8 @@ sub process push @{$ref->{gotit}}, $f[2]; # mark this up as being received $ref->store($ref->{lines}); add_dir($ref); + my $dxchan = DXChannel->get($ref->{to}); + $dxchan->send("New mail has arrived for you") if $dxchan; } $ref->stop_msg($self); queue_msg(); @@ -633,6 +635,8 @@ sub do_send_stuff $ref->add_dir(); #push @out, $self->msg('sendsent', $to); push @out, "msgno $ref->{msgno} sent to $to"; + my $dxchan = DXChannel->get(uc $to); + $dxchan->send("New mail has arrived for you") if $dxchan; } } delete $loc->{lines}; @@ -658,6 +662,15 @@ sub do_send_stuff return (1, @out); } +# return the standard directory line for this ref +sub dir +{ + my $ref = shift; + return sprintf "%6d%s%s%5d %8.8s %8.8s %-6.6s %5.5s %-30.30s", + $ref->msgno, $ref->read ? '-' : ' ', $ref->private ? 'p' : ' ', $ref->size, + $ref->to, $ref->from, cldate($ref->t), ztime($ref->t), $ref->subject; +} + no strict; sub AUTOLOAD { diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 62735682..8985e8ab 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -262,6 +262,7 @@ sub normal if ($pcno == 22) {last SWITCH;} if ($pcno == 23 || $pcno == 27) { # WWV info + Geomag::update(@field[1..$#field]); last SWITCH; } @@ -301,6 +302,7 @@ sub normal if ($pcno == 41) { # user info # add this station to the user database, if required + $field[1] =~ s/-\d+$//o; my $user = DXUser->get_current($field[1]); $user = DXUser->new($field[1]) if !$user; diff --git a/perl/DXProtout.pm b/perl/DXProtout.pm index ad431481..af833183 100644 --- a/perl/DXProtout.pm +++ b/perl/DXProtout.pm @@ -216,9 +216,9 @@ sub pc38 sub pc39 { my ($call, $reason) = @_; - my $hops = get_hops(21); + my $hops = get_hops(39); $reason = "Gone." if !$reason; - return "PC39^$call^$reason^"; + return "PC39^$call^$reason^$hops^"; } # cue up bulletin or file for transfer diff --git a/perl/DXUser.pm b/perl/DXUser.pm index 9d636561..bc55775f 100644 --- a/perl/DXUser.pm +++ b/perl/DXUser.pm @@ -45,6 +45,7 @@ $filename = undef; annok => '9,Announces?,yesno', # accept his announces? reg => '0,Registered?,yesno', # is this user registered? lang => '0,Language', + hmsgno => '0,Highest Msgno', ); no strict; @@ -71,8 +72,8 @@ sub init { my ($pkg, $fn) = @_; - die "need a filename in User" if !$fn; - $dbm = tie (%u, MLDBM, $fn, O_CREAT|O_RDWR, 0666) or die "can't open user file: $fn ($!)"; + confess "need a filename in User" if !$fn; + $dbm = tie (%u, MLDBM, $fn, O_CREAT|O_RDWR, 0666) or confess "can't open user file: $fn ($!)"; $filename = $fn; } @@ -94,8 +95,11 @@ sub finish sub new { - my ($pkg, $call) = @_; - die "can't create existing call $call in User\n!" if $u{$call}; + my $pkg = shift; + my $call = uc shift; + $call =~ s/-\d+//o; + + confess "can't create existing call $call in User\n!" if $u{$call}; my $self = {}; $self->{call} = $call; @@ -115,7 +119,7 @@ sub get { my $pkg = shift; my $call = uc shift; - $call =~ s/-\d+//o; # strip ssid + $call =~ s/-\d+$//o; # strip ssid return $u{$call}; } @@ -140,7 +144,7 @@ sub get_current { my $pkg = shift; my $call = uc shift; - $call =~ s/-\d+//o; # strip ssid + $call =~ s/-\d+$//o; # strip ssid my $dxchan = DXChannel->get($call); return $dxchan->user if $dxchan; diff --git a/perl/Geomag.pm b/perl/Geomag.pm new file mode 100644 index 00000000..1f77f567 --- /dev/null +++ b/perl/Geomag.pm @@ -0,0 +1,124 @@ +#!/usr/bin/perl +# +# The geomagnetic information and calculation module +# +# Copyright (c) 1998 - Dirk Koopman G1TLH +# +# $Id$ +# + +package Geomag; + +use DXVars; +use DXUtil; +use FileHandle; +use Carp; + +use strict; +use vars qw($date $sfi $k $a $forecast @allowed @denied); + +$date = 0; # the unix time of the WWV (notional) +$sfi = 0; # the current SFI value +$k = 0; # the current K value +$a = 0; # the current A value +$forecast = ""; # the current geomagnetic forecast +@allowed = (); # if present only these callsigns are regarded as valid WWV updators +@denied = (); # if present ignore any wwv from these callsigns +my $dirprefix = "$main::data/wwv"; +my $param = "$dirprefix/param"; + +sub init +{ + mkdir $dirprefix, 0777 if !-e $dirprefix; + do "$param" if -e "$param"; + confess $@ if $@; +} + +# write the current data away +sub store +{ + my $fh = new FileHandle; + open $fh, "> $param" or confess "can't open $param $!"; + print $fh "# Geomagnetic data parameter file last mod:", scalar gmtime, "\n"; + print $fh "\$date = $date;\n"; + print $fh "\$sfi = $sfi;\n"; + print $fh "\$a = $a;\n"; + print $fh "\$k = $k;\n"; + print $fh "\$forecast = '$forecast';\n"; + print $fh "\@denied = qw(", join(' ', @denied), ");\n" if @denied > 0; + print $fh "\@allowed = qw(", join(' ', @allowed), ");\n" if @allowed > 0; + close $fh; +} + +# update WWV info in one go (usually from a PC23) +sub update +{ + my ($mydate, $mytime, $mysfi, $mya, $myk, $myforecast, $from, $node) = @_; + if ((@allowed && grep {$_ eq $from} @allowed) || + (@denied && !grep {$_ eq $from} @denied) || + (@allowed == 0 && @denied == 0)) { + + my $trydate = cltounix($mydate, sprintf("%02d18Z", $mytime)); + if ($trydate >= $date) { + $sfi = 0 + $mysfi; + $k = 0 + $myk; + $a = 0 + $mya; + $forecast = $myforecast; + store(); + } + } +} + +# add or substract an allowed callsign +sub allowed +{ + my $flag = shift; + if ($flag eq '+') { + push @allowed, map {uc $_} @_; + } else { + my $c; + foreach $c (@_) { + @allowed = map {$_ ne uc $c} @allowed; + } + } + store(); +} + +# add or substract a denied callsign +sub denied +{ + my $flag = shift; + if ($flag eq '+') { + push @denied, map {uc $_} @_; + } else { + my $c; + foreach $c (@_) { + @denied = map {$_ ne uc $c} @denied; + } + } + store(); +} + +# accessor routines (when I work how symbolic refs work I might use one of those!) +sub sfi +{ + @_ ? $sfi = shift : $sfi ; +} + +sub k +{ + @_ ? $k = shift : $k ; +} + +sub a +{ + @_ ? $a = shift : $a ; +} + +sub forecast +{ + @_ ? $forecast = shift : $forecast ; +} + +1; +__END__; diff --git a/perl/Prefix.pm b/perl/Prefix.pm index dbaa1c84..441cd80a 100644 --- a/perl/Prefix.pm +++ b/perl/Prefix.pm @@ -146,9 +146,9 @@ sub extract # remove any /0-9 /P /A /M /MM /AM suffixes etc if (@parts > 1) { $p = $parts[$#parts]; - pop @parts if $p =~ /^(\d+|[PABM]|AM|MM|BCN|SIX)$/o; + pop @parts if $p =~ /^(\d+|[PABM]|AM|MM|BCN|SIX|Q\w+)$/o; $p = $parts[$#parts]; - pop @parts if $p =~ /^(\d+|[PABM]|AM|MM|BCN|SIX)$/o; + pop @parts if $p =~ /^(\d+|[PABM]|AM|MM|BCN|SIX|Q\w+)$/o; # can we resolve them by direct lookup foreach $p (@parts) { diff --git a/perl/Spot.pm b/perl/Spot.pm index d5b5adf9..00b03d84 100644 --- a/perl/Spot.pm +++ b/perl/Spot.pm @@ -27,6 +27,11 @@ $defaultspots = 10; # normal number of spots to return $maxdays = 35; # normal maximum no of days to go back $dirprefix = "$main::data/spots"; +sub init +{ + mkdir "$dirprefix", 0777 if !-e "$dirprefix"; +} + sub prefix { return $dirprefix; diff --git a/perl/client.pl b/perl/client.pl index 834aaf37..b8129cbb 100755 --- a/perl/client.pl +++ b/perl/client.pl @@ -59,6 +59,8 @@ sub cease if (defined $conn && $sendz) { $conn->send_now("Z$call|bye...\n"); } + STDOUT->flush; + sleep(2); exit(0); } @@ -201,6 +203,20 @@ $SIG{'HUP'} = \&sig_term; $SIG{'CHLD'} = \&sig_chld; $conn = Msg->connect("$clusteraddr", $clusterport, \&rec_socket); +if (! $conn) { + if (-r "$data/offline") { + open IN, "$data/offline" or die; + while () { + s/\n/\r/og if $mode == 1; + print; + } + close IN; + } else { + print "Sorry, the cluster $mycall is currently off-line", $mynl; + } + cease(0); +} + $conn->send_now("A$call|$connsort"); Msg->set_event_handler(\*STDIN, "read" => \&rec_stdin); diff --git a/perl/cluster.pl b/perl/cluster.pl index 5b3f6466..7db7ae3c 100755 --- a/perl/cluster.pl +++ b/perl/cluster.pl @@ -35,13 +35,14 @@ use DXCron; use DXConnect; use Prefix; use Bands; +use Geomag; use Carp; package main; @inqueue = (); # the main input queue, an array of hashes $systime = 0; # the time now (in seconds) -$version = 1.1; # the version no of the software +$version = 1.2; # the version no of the software # handle disconnections sub disconnect @@ -195,6 +196,12 @@ $SIG{'HUP'} = 'IGNORE'; # initialise the protocol engine DXProt->init(); +# initialise the Geomagnetic data engine +Geomag->init(); + +# initial the Spot stuff +Spot->init(); + # put in a DXCluster node for us here so we can add users and take them away DXNode->new(0, $mycall, 0, 1, $DXProt::myprot_version); diff --git a/perl/talias.pl b/perl/talias.pl new file mode 100755 index 00000000..049c024d --- /dev/null +++ b/perl/talias.pl @@ -0,0 +1,28 @@ +#!/usr/bin/perl +# +# alias testing tool +# + +# search local then perl directories +BEGIN { + # root of directory tree for this system + $root = "/spider"; + $root = $ENV{'DXSPIDER_ROOT'} if $ENV{'DXSPIDER_ROOT'}; + + unshift @INC, "$root/perl"; # this IS the right way round! + unshift @INC, "$root/local"; +} + +use DXVars; +use CmdAlias; + +use Carp; + +while (<>) { + chomp; + last if /^q$/; + + $o1 = CmdAlias::get_cmd($_); + $o2 = CmdAlias::get_hlp($_); + print "in: $_ cmd: $o1 hlp: $o2\n"; +}