added a forward/latlong command
[spider.git] / cmd / forward / latlong.pl
diff --git a/cmd/forward/latlong.pl b/cmd/forward/latlong.pl
new file mode 100644 (file)
index 0000000..15712f0
--- /dev/null
@@ -0,0 +1,49 @@
+#
+# merge_qra <node>
+#
+# send out PC41s toward a node for every user that has a lat/long 
+#
+# Copyright (c) 2000 Dirk Koopman G1TLH
+#
+# $Id$
+#
+
+my ($self, $line) = @_;
+return (1, $self->msg('e5')) unless $self->priv >= 6;
+
+my @dxchan;
+my @out;
+my $dxchan;
+
+for ( map {uc $_ } split /\s+/, $line ) {
+       if (($dxchan = DXChannel->get($_)) && $dxchan->is_node) {
+               push @dxchan, $dxchan;
+       } else {
+               push @out, $self->msg('e10', $_);
+       }
+}
+return (1, @out) if @out;
+
+use DB_File;
+       
+my ($action, $count, $key, $data);
+for ($action = R_FIRST, $count = 0; !$DXUser::dbm->seq($key, $data, $action); $action = R_NEXT) {
+       if ($data =~ m{(?:lat|long) =>}) {
+               my $u = DXUser->get_current($key);
+               if ($u) {
+                       my $lat = $u->lat;
+                       my $long = $u->long;
+                       my $latlong = DXBearing::lltos($lat, $long) if $lat && $long;
+                       if ($latlong) {
+                               #push @out, $key;
+                               for (@dxchan) {
+                                       my $s = DXProt::pc41($key, 3, $latlong);
+                                       $s =~ s{H\d+\^~$}{H1^~};
+                                       $dxchan->send($s);
+                               }
+                               ++$count;
+                       }
+               }
+       }
+}
+return(1, @out, "$count records sent");