+$lastoperinterval = 60*24*60*60;
+$lasttime = 0;
+$lrusize = 2000;
+$tooold = 86400 * 365; # this marks an old user who hasn't given enough info to be useful
+$v3 = 0;
+
+# hash of valid elements and a simple prompt
+%valid = (
+ call => '0,Callsign',
+ alias => '0,Real Callsign',
+ name => '0,Name',
+ qth => '0,Home QTH',
+ lat => '0,Latitude,slat',
+ long => '0,Longitude,slong',
+ qra => '0,Locator',
+ email => '0,E-mail Address,parray',
+ priv => '9,Privilege Level',
+ lastin => '0,Last Time in,cldatetime',
+ passwd => '9,Password,yesno',
+ passphrase => '9,Pass Phrase,yesno',
+ addr => '0,Full Address',
+ 'sort' => '0,Type of User', # A - ak1a, U - User, S - spider cluster, B - BBS
+ xpert => '0,Expert Status,yesno',
+ bbs => '0,Home BBS',
+ node => '0,Last Node',
+ homenode => '0,Home Node',
+ lockout => '9,Locked out?,yesno', # won't let them in at all
+ dxok => '9,Accept DX Spots?,yesno', # accept his dx spots?
+ annok => '9,Accept Announces?,yesno', # accept his announces?
+ lang => '0,Language',
+ hmsgno => '0,Highest Msgno',
+ group => '0,Chat Group,parray', # used to create a group of users/nodes for some purpose or other
+ isolate => '9,Isolate network,yesno',
+ wantbeep => '0,Req Beep,yesno',
+ wantann => '0,Req Announce,yesno',
+ wantwwv => '0,Req WWV,yesno',
+ wantwcy => '0,Req WCY,yesno',
+ wantecho => '0,Req Echo,yesno',
+ wanttalk => '0,Req Talk,yesno',
+ wantwx => '0,Req WX,yesno',
+ wantdx => '0,Req DX Spots,yesno',
+ wantemail => '0,Req Msgs as Email,yesno',
+ pagelth => '0,Current Pagelth',
+ pingint => '9,Node Ping interval',
+ nopings => '9,Ping Obs Count',
+ wantlogininfo => '9,Login info req,yesno',
+ wantgrid => '0,Show DX Grid,yesno',
+ wantann_talk => '0,Talklike Anns,yesno',
+ wantpc90 => '1,Req PC90,yesno',
+ wantnp => '1,Req New Proto,yesno',
+ wantpc16 => '9,Want Users from node,yesno',
+ wantsendpc16 => '9,Send PC16,yesno',
+ wantroutepc19 => '9,Route PC19,yesno',
+ wantusstate => '0,Show US State,yesno',
+ wantdxcq => '0,Show CQ Zone,yesno',
+ wantdxitu => '0,Show ITU Zone,yesno',
+ lastoper => '9,Last for/oper,cldatetime',
+ nothere => '0,Not Here Text',
+ registered => '9,Registered?,yesno',
+ prompt => '0,Required Prompt',
+ version => '1,Version',
+ build => '1,Build',
+ believe => '1,Believable nodes,parray',
+ lastping => '1,Last Ping at,ptimelist',
+ );
+
+#no strict;
+sub AUTOLOAD
+{
+ no strict;
+ my $name = $AUTOLOAD;
+
+ return if $name =~ /::DESTROY$/;
+ $name =~ s/^.*:://o;
+
+ confess "Non-existant field '$AUTOLOAD'" if !$valid{$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;
+}
+
+#use strict;