add localqsl a la golist thing
[spider.git] / perl / DXDb.pm
index 25e7c0827d3f0d2d0d7fd7f30d32c59ab60640ca..f54d6f14ff02b882fbefdd26cf21bbcab0fa1f4b 100644 (file)
@@ -12,8 +12,7 @@ use DXVars;
 use DXLog;
 use DXUtil;
 use DB_File;
-
-use Carp;
+use DXDebug;
 
 use vars qw($opentime $dbbase %avail %valid $lastprocesstime $nextstream %stream);
 
@@ -49,6 +48,12 @@ $lastprocesstime = time;
 $nextstream = 0;
 %stream = ();
 
+use vars qw($VERSION $BRANCH);
+$VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ );
+$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/  || (0,0));
+$main::build += $VERSION;
+$main::branch += $BRANCH;
+
 # allocate a new stream for this request
 sub newstream
 {
@@ -77,9 +82,10 @@ sub load
 {
        my $s = readfilestr($dbbase, "dbs", "pl");
        if ($s) {
-               my $a = { eval $s } ;
+               my $a;
+               eval "\$a = $s";
                confess $@ if $@;
-               %avail = %{$a} if $a
+               %avail = ( %$a ) if ref $a;
        }
 }
 
@@ -188,6 +194,7 @@ sub new
        $avail{$self->{name}} = $self;
        mkdir $dbbase, 02775 unless -e $dbbase;
        save();
+       return $self;
 }
 
 # delete a database
@@ -256,18 +263,18 @@ sub process
                        my $db = getdesc($f[4]);
                        if ($db) {
                                if ($db->{remote}) {
-                                       sendremote($dxchan, $f[2], $f[3], $dxchan->msg('dx1', $db->{remote}));
+                                       sendremote($dxchan, $f[2], $f[3], $dxchan->msg('db1', $db->{remote}));
                                } else {
                                        my $value = $db->getkey($f[5]);
                                        if ($value) {
                                                my @out = split /\n/, $value;
                                                sendremote($dxchan, $f[2], $f[3], @out);
                                        } else {
-                                               sendremote($dxchan, $f[2], $f[3], $dxchan->msg('dx2', $f[5], $db->{name}));
+                                               sendremote($dxchan, $f[2], $f[3], $dxchan->msg('db2', $f[5], $db->{name}));
                                        }
                                }
                        } else {
-                               sendremote($dxchan, $f[2], $f[3], $dxchan->msg('dx3', $f[4]));
+                               sendremote($dxchan, $f[2], $f[3], $dxchan->msg('db3', $f[4]));
                        }
                        last SWITCH;
                }
@@ -339,16 +346,19 @@ sub field_prompt
        return $valid{$ele};
 }
 
-no strict;
+#no strict;
 sub AUTOLOAD
 {
-       my $self = shift;
+       no strict;
        my $name = $AUTOLOAD;
        return if $name =~ /::DESTROY$/;
-       $name =~ s/.*:://o;
+       $name =~ s/^.*:://o;
   
        confess "Non-existant field '$AUTOLOAD'" if !$valid{$name};
-       @_ ? $self->{$name} = shift : $self->{$name} ;
+       # this clever line of code creates a subroutine which takes over from autoload
+       # from OO Perl - Conway
+       *$AUTOLOAD = sub {@_ > 1 ? $_[0]->{$name} = $_[1] : $_[0]->{$name}};
+        goto &$AUTOLOAD;
 }
 
 1;