X-Git-Url: http://www.dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXUser.pm;h=f5f7e0491f561351c0a146c5c98cdbcf3b1993b6;hb=6b6a8002929017b6d4217f68fa492a2d728ee1fe;hp=ac06615d3719f3e0f73a04d6f71b944ad121fc79;hpb=0017002e2dc438d49fcc090dc99b6d22f7037aa7;p=spider.git diff --git a/perl/DXUser.pm b/perl/DXUser.pm index ac06615d..f5f7e049 100644 --- a/perl/DXUser.pm +++ b/perl/DXUser.pm @@ -11,13 +11,42 @@ package DXUser; require Exporter; @ISA = qw(Exporter); -use MLDBM; +use MLDBM qw(DB_File); use Fcntl; %u = undef; $dbm = undef; $filename = undef; +# hash of valid elements and a simple prompt +%valid = ( + call => 'Callsign', + alias => 'Real Callsign', + name => 'Name', + qth => 'Home QTH', + lat => 'Latitude', + long => 'Longtitude', + qra => 'Locator', + email => 'E-mail Address', + priv => 'Privilege Level', + lastin => 'Last Time in', + passwd => 'Password', + addr => 'Full Address', + 'sort' => 'Type of User', # A - ak1a, U - User, S - spider cluster, B - BBS +); + +sub AUTOLOAD +{ + my $self = shift; + my $name = $AUTOLOAD; + + return if $name =~ /::DESTROY$/; + $name =~ s/.*:://o; + + die "Non-existant field '$AUTOLOAD'" if !$valid{$name}; + @_ ? $self->{$name} = shift : $self->{$name} ; +} + # # initialise the system # @@ -25,8 +54,8 @@ sub init { my ($pkg, $fn) = @_; - die "need a filename in User\n" if !$fn; - $dbm = tie %u, MLDBM, $fn, O_CREAT|O_RDWR, 0666 or die "can't open user file: $fn ($!)\n"; + 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 ($!)"; $filename = $fn; } @@ -46,12 +75,12 @@ sub finish sub new { - my ($call) = @_; + my ($pkg, $call) = @_; die "can't create existing call $call in User\n!" if $u{$call}; my $self = {}; $self->{call} = $call; - bless $self; + bless $self, $pkg; $u{call} = $self; } @@ -61,7 +90,7 @@ sub new sub get { - my ($call) = @_; + my ($pkg, $call) = @_; return $u{$call}; } @@ -98,5 +127,64 @@ sub close $self->put(); } +# +# return a list of valid elements +# + +sub fields +{ + return keys(%valid); +} + +# +# return a prompt for a field +# + +sub field_prompt +{ + my ($self, $ele) = @_; + return $valid{$ele}; +} + +# +# enter an element from input, returns 1 for success +# + +sub enter +{ + my ($self, $ele, $value) = @_; + return 0 if (!defined $valid{$ele}); + chomp $value; + return 0 if $value eq ""; + if ($ele eq 'long') { + my ($longd, $longm, $longl) = $value =~ /(\d+) (\d+) ([EWew])/; + return 0 if (!$longl || $longd < 0 || $longd > 180 || $longm < 0 || $longm > 59); + $longd += ($longm/60); + $longd = 0-$longd if (uc $longl) eq 'W'; + $self->{'long'} = $longd; + return 1; + } elsif ($ele eq 'lat') { + my ($latd, $latm, $latl) = $value =~ /(\d+) (\d+) ([NSns])/; + return 0 if (!$latl || $latd < 0 || $latd > 90 || $latm < 0 || $latm > 59); + $latd += ($latm/60); + $latd = 0-$latd if (uc $latl) eq 'S'; + $self->{'lat'} = $latd; + return 1; + } elsif ($ele eq 'qra') { + $self->{'qra'} = UC $value; + return 1; + } else { + $self->{$ele} = $value; # default action + return 1; + } + return 0; +} + +# some variable accessors +sub sort +{ + my $self = shift; + @_ ? $self->{sort} = shift : $self->{sort} ; +} 1; __END__