+#
+# set the latitude and longtitude field
+#
+# Copyright (c) 1998 - Dirk Koopman
+#
+# $Id$
+#
+
+my ($self, $line) = @_;
+my $call = $self->call;
+my $user;
+
+# remove leading and trailing spaces
+$line =~ s/^\s+//;
+$line =~ s/\s+$//;
+
+return (1, $self->msg('loce1')) if !$line;
+return (1, $self->msg('loce3', uc $line)) if is_qra($line);
+return (1, $self->msg('loce2', $line)) unless is_latlong($line);
+
+$user = DXUser->get_current($call);
+if ($user) {
+ $line = uc $line;
+ my ($lat, $long) = DXBearing::stoll($line);
+ my $oldlat = $user->lat || 0;
+ my $oldlong = $user->long || 0;
+ if ($oldlat != $lat || $oldlong != $long) {
+ $user->lat($lat);
+ $user->long($long);
+ my $l = DXBearing::lltos($lat, $long);
+ my $s = DXProt::pc41($call, 3, $l);
+ DXProt::eph_dup($s);
+ DXChannel::broadcast_all_nodes($s, $main::me) ;
+ }
+ my $qra = DXBearing::lltoqra($lat, $long);
+ my $oldqra = $user->qra || "";
+ if ($oldqra ne $qra) {
+ $user->qra($qra);
+ my $s = DXProt::pc41($call, 5, $qra);
+ DXProt::eph_dup($s);
+ DXChannel::broadcast_all_nodes($s, $main::me);
+ }
+
+ $user->put();
+ return (1, $self->msg('loc', $line));
+} else {
+ return (1, $self->msg('namee2', $call));
+}