+ next if /^\!/; # ignore comment lines
+ chomp;
+ my @f = split; # get each 'word'
+ next if @f == 0; # ignore blank lines
+
+ if (($f[14] && $f[14] eq '@') || ($f[15] && $f[15] eq '@')) {
+ my $locstr = join ' ', @f[1..13];
+ my $loc = $loc{$locstr};
+ $loc = addloc($locstr) if !$loc;
+ }
+}
+
+#foreach $loc (sort {$a <=> $b;} keys %locn) {
+# print "loc: $loc data: $locn{$loc}\n";
+#}
+
+# go back to the beginning and this time add prefixes (adding new location entries, if required)
+seek(IN, 0, 0);
+
+my $line;
+while (<IN>) {
+ $line++;
+ chomp;
+ next if /^\s*\!/; # ignore comment lines
+ next if /^\s*$/;
+
+ my @f = split; # get each 'word'
+ next if @f == 0; # ignore blank lines
+
+ # location record
+ my $locstr = join ' ', @f[1..13];
+ my $loc = $loc{$locstr};
+ $loc = addloc($locstr) if !$loc;
+
+ my @prefixes = split /,/, $f[0];
+ foreach my $p (@prefixes) {
+ my $ref;
+
+ if ($p =~ /#/) {
+ my $i;
+ for ($i = 0; $i < 9; ++$i) {
+ my $t = $p;
+ $t =~ s/#/$i/;
+ addpre($t, $loc);
+ }
+ } else {
+ addpre($p, $loc);
+ }
+ }
+}
+
+close(IN);
+
+#print Data::Dumper->Dump([\%pre, \%locn], [qw(pre locn)]);
+
+# now open the cty.dat file if it is there
+my $r;
+$ifn = $system ? "$main::data/cty.dat" : "$prefix/cty.dat";
+unless ($r = open (IN, $ifn)) {
+ $ifn = "$main::data/cty.dat";
+ $r = open(IN, $ifn);
+}
+
+my @f;
+my @a;
+$line = 0;
+if ($r) {
+ 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*,/;
+ }
+ }
+ }
+}
+close IN;
+
+
+open(OUT, ">$prefix/prefix_data.pl") or die "Can't open $prefix/prefix_data.pl ($!)";
+
+print OUT "\%pre = (\n";
+foreach my $k (sort keys %pre) {
+ my $ans = printpre($k);
+ print OUT " '$k' => '$ans',\n";
+}
+print OUT ");\n\n";
+
+print OUT "\n\%prefix_loc = (\n";
+foreach my $l (sort {$a <=> $b} keys %locn) {
+ print OUT " $l => bless( {";
+ my ($name, $dxcc, $itu, $cq, $utcoff, $latd, $latm, $lats, $latl, $longd, $longm, $longs, $longl) = split /\s+/, $locn{$l};
+
+ $longd += ($longm/60);
+ $longd = 0-$longd if (uc $longl) eq 'W';
+ $latd += ($latm/60);
+ $latd = 0-$latd if (uc $latl) eq 'S';
+ my $qra = DXBearing::lltoqra($latd, $longd);
+ print OUT " name => '$name',";
+ print OUT " dxcc => $dxcc,";
+ print OUT " itu => $itu,";
+ print OUT " cq => $cq,";
+ print OUT " utcoff => $utcoff,";
+ print OUT " lat => $latd,";
+ print OUT " long => $longd,";
+ print OUT " qra => '$qra'";
+ print OUT " }, 'Prefix'),\n";