add DXCIDR, fix version no tracking
[spider.git] / perl / create_prefix.pl
index 9c98a46c81ebdf0bfd617fd686d9bd4382360be0..411b2cb84113b96d573f6c8b832b39215e5c9f45 100755 (executable)
@@ -3,7 +3,7 @@
 #
 # Copyright (c) - Dirk Koopman G1TLH
 #
-# $Id$
+#
 #
 
 require 5.004;
@@ -16,6 +16,7 @@ BEGIN {
        
        unshift @INC, "$root/perl";     # this IS the right way round!
        unshift @INC, "$root/local";
+       $data = "$root/data";
 }
 
 use DXVars;
@@ -90,31 +91,40 @@ close(IN);
 
 #print Data::Dumper->Dump([\%pre, \%locn], [qw(pre locn)]);
 
-# now open the rsgb.cty file and process that again the prefix file we have
-open(IN, "$main::data/rsgb.cty") or die "Can't open $main::data/rsgb.cty ($!)";
+# now open the cty.dat file if it is there
+my @f;
+my @a;
 $line = 0;
-while (<IN>) {
-       $line++;
-       next if /^\s*#/;
-       next if /^\s*$/;
-       my $l = $_;
-       chomp;
-       my @f = split /:\s+|;/;
-       my $p = uc $f[4];
-       my $ref = $pre{$p};
-       if ($ref) {
-               # split up the alias string
-               my @alias = split /=/, $f[5];
-               my $a;
-               foreach $a (@alias) {
-                       next if $a eq $p;       # ignore if we have it already
-                       my $nref = $pre{$a};
-                       $pre{$a} = $ref if !$nref; # copy the original ref if new 
+if (open(IN, "$main::data/cty.dat")) {
+       my $state = 0;
+       while (<IN>) {
+               $line++;
+               s/\r$//;
+               next if /^\s*\#/;
+               next if /^\s*$/;
+               chomp;
+               if ($state == 0) {
+                       s/:$//;
+                       @f = split /:\s+/;
+                       @a = ();
+                       $state = 1;
+               } elsif ($state == 1) {
+                       s/^\s+//;
+                       if (/;$/) {
+                               $state = 0;
+                               s/[,;]$//;
+                               push @a, split /\s*,/;
+                               $f[7] =~ s/^\*\s*//;   # remove any preceeding '*' before a callsign
+                               ct($_, uc $f[7], @a) if @a;
+                       } else {
+                               s/,$//;
+                               push @a, split /\s*,/;
+                       }
                }
-       } else {
-               print "line $line: unknown prefix '$p' on $l in rsgb.cty\n";
        }
 }
+close IN;
+
 
 open(OUT, ">$main::data/prefix_data.pl") or die "Can't open $main::data/prefix_data.pl ($!)";
 
@@ -169,6 +179,34 @@ sub printpre
        return $out;
 }
 
+sub ct
+{
+       my $l = shift;
+       my $p = shift; 
+       my @a = @_;
+       my $ref = $pre{$p};
+       if ($ref) {
+               my $a;
+               foreach $a (@a) {
+                       # for now remove (nn) [nn]
+                       my ($itu) = $a =~ /(\(\d+\))/; $a =~ s/(\(\d+\))//g;
+                       my ($cq) = $a =~ /(\[\d+\])/; $a =~ s/(\[\d+\])//g;
+                       my ($lat, $long) = $a =~ m{(<[-+\d.]+/[-+\d.]+>)}; $a =~ s{(<[-+\d.]+/[-+\d.]+>)}{}g;
+                       my ($cont) = $a =~ /(\{[A-Z]{2}\})/; $a =~ s/(\{[A-Z]{2}\})//g;
+
+                       unless ($a) {
+                               print "line $line: blank prefix on $l in cty.dat\n";
+                               next;
+                       }
+                       next if $a eq $p;       # ignore if we have it already
+                       my $nref = $pre{$a};
+                       $pre{$a} = $ref if !$nref; # copy the original ref if new 
+               }
+       } else {
+               print "line $line: unknown prefix '$p' on $l in cty.dat\n";
+       }
+}
+
 sub addloc
 {
        my $locstr = shift;
@@ -177,3 +215,4 @@ sub addloc
        $locn{$loc} = $locstr;
        return $loc;
 }
+