Merge branch 'test' into mojo mojo
authorDirk Koopman <djk@tobit.co.uk>
Sat, 20 Apr 2024 21:15:37 +0000 (22:15 +0100)
committerDirk Koopman <djk@tobit.co.uk>
Sat, 20 Apr 2024 21:15:37 +0000 (22:15 +0100)
Changes
data/bands.pl
perl/DXDupe.pm
perl/Filter.pm
perl/Spot.pm

diff --git a/Changes b/Changes
index bfcad9227b1e479457c1e0df5abb1f26278a7a09..4161d2ac4a6d34e7b39e04abced9ec2ffcb4900f 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,3 +1,6 @@
+20Apr24======================================================================
+1. Try to "fix" Spot deduping (again). This is probably Work In Progress...
+2. A new(er) band.pl gratefully received from Andy G4PIQ.
 13Apr24======================================================================
 1. Fix small issue with perl 5.20 (and possibly earlier) compilation.
 27Mar24======================================================================
index 1bd60f671b6d0bc70268ad20ebcba7874df3038e..dfaef05359a452eda59bff6d6250aace416837e8 100644 (file)
@@ -7,12 +7,20 @@
 # these pairs attach themselves to the labels you provide, they are
 # independant of any other pair, they can overlap, cross etc. 
 #
-# There MUST be at last a 'band' entry
+# There MUST be at least a 'band' entry
 #
 # It is up to YOU to make sure that it makes sense!
 #
 # ALL the labels MUST BE in lower case.
 # 
+# Band names change (or I got them wrong in the first place), DO NOT CHANGE THE BAND NAMES
+# THAT I USED. If you do then expect to get complaints. Instead just alias them to what 
+# you think they should be in the section below %bands.
+#
+# WARNING: if aliasing, the band alias must be declared AFTER the original.
+#
+# See '550khz' and '630m' as an exemplar.
+# 
 
 
 %bands = (
                  '136khz' => bless ( { band => [135, 138],
                                                          }, 'Bands'),
 
-                 '500khz' => bless ( { band => [493, 525],
+                 '500khz' => bless ( { band => [472, 479],
                                                          }, 'Bands'),
 
                  '160m' => bless( { band => [ 1800, 2000 ], 
-                                                        cw => [ 1800, 1838 ], 
+                                                        cw => [ 1800, 1840 ], 
                                                         rtty => [ 1838, 1841 ],
                                                         data => [ 1838, 1843],
                                                         ssb => [ 1831, 2000] 
@@ -34,7 +42,7 @@
 
                  '80m' => bless( { band => [ 3500, 4000 ], 
                                                        cw => [ 3500, 3600 ], 
-                                                       data => [ 3580, 3619 ], 
+                                                       data => [ 3570, 3619 ], 
                                                        rtty => [ 3580, 3619 ], 
                                                        sstv => [ 3730, 3740 ], 
                                                        ssb => [ 3601, 4000 ]  
                                                        ssb => [5300, 5410],
                                }, 'Bands' ),
 
-                 '40m' => bless( { band => [ 7000, 7400 ], 
+                 '40m' => bless( { band => [ 7000, 7300 ], 
                                                        cw => [ 7000, 7040 ],
                                                        data => [ 7040, 7100],
                                                        rtty => [ 7040, 7060],
-                                                       ssb => [ 7050, 7400 ]
+                                                       ssb => [ 7050, 7300 ]
                                                  }, 'Bands'),
 
                  '30m' => bless( { band => [ 10100, 10150 ], 
                                                        ssb => [ 28201, 29299, 29550, 29700] 
                                                  }, 'Bands'),
 
-                 '6m' => bless( { band => [50000, 52000],
+                 '8m' => bless( { band => [40000, 42000],
+                                                }, 'Bands'),
+
+                  '6m' => bless( { band => [50000, 54000],
                                                   cw => [50000, 50100],
-                                                  ssb => [50100, 50500],
+                                                  ssb => [50100, 50400],
+                                                  data => [50300, 50500],
+                                                }, 'Bands'),
+
+                  '5m' => bless( { band => [60000, 62000],
                                                 }, 'Bands'),
+# 5m band General allocation in Ireland only, with Denmark and UK with beacons
 
-                 '4m' => bless( { band => [70000, 70631],
-                                                  cw => [70030, 70250],
-                                                  ssb => [70030, 70250],
+                 '4m' => bless( { band => [69887, 71500],
+                                                  cw => [70000, 70250],
+                                                  ssb => [70100, 70250],
                                                 }, 'Bands'),
+# Denmark down to 69.8875. UK NoV operation up to 71.500
 
                  '2m' => bless( { band => [144000, 148000],
                                                   cw => [144000, 144150],
-                                                  ssb => [144150, 144500]
+                                                  ssb => [144150, 144400]
                                                 }, 'Bands'),
 
-                 '220' => bless( { band => [220000, 222000],
+#Little real CW and SSB differentiation above 2m so remove CW and SSB filters
+
+                 '220' => bless( { band => [220000, 224000],
                                                  }, 'Bands'),
 
-                 '70cm' => bless( { band => [430000, 450000],
-                                                        cw => [432000, 432150],
-                                                        ssb => [432150, 432500],
+                 '70cm' => bless( { band => [420000, 450000],
+                                                  }, 'Bands'),
+
+#70cm starts at 420 MHz and extends to 450 MHz in Region 2
+
+                  '902' => bless( { band => [902000, 928000],
                                                   }, 'Bands'),
 
-                 '23cm' => bless( { band => [ 1240000, 1325000],
-                                                        cw => [1296000, 1296150],
-                                                        ssb => [1296150, 1296800],
+                 '23cm' => bless( { band => [ 1240000, 1300000],
                                                   }, 'Bands'),
 
-                 '13cm' => bless( { band => [2310000, 2450000],
-                                                        cw => [2320100, 2320150],
-                                                        ssb => [2320150, 2320800],
+                 '13cm' => bless( { band => [2300000, 2450000],
                                                   }, 'Bands'),
 
-                 '9cm' => bless( { band => [3400000, 3475000],
-                                                       cw => [3400000, 3402000],
-                                                       ssb => [3400000, 3402000],
+                 '9cm' => bless( { band => [3300000, 3500000],
                                                  }, 'Bands'),
+#9cm extends to 3500 MHz in Region 2 and starts at 3300 MHz in Region 3
 
-                 '6cm' => bless( { band => [5650000, 5850000],
-                                                       cw => [5668000, 5670000, 5760000, 5762000],
-                                                       ssb => [5668000, 5670000, 5760000, 5762000],
+                 '6cm' => bless( { band => [5650000, 5925000],
                                                  }, 'Bands'),
+#6cm extends to 5925 MHz in Region 2 and 3
 
                  '3cm' => bless( { band => [10000000, 10500000],
-                                                       cw => [10368000,10370000, 10450000, 10452000],
-                                                       ssb => [10368000,10370000, 10450000, 10452000],
                                                  }, 'Bands'),
 
+#Bands above 10 GHz normally referred to by Frequency so make 24G, 47G, 76G etc
+
                  '12mm' => bless( { band => [24000000, 24250000],
-                                                        cw => [24048000, 24050000],
-                                                        ssb => [24048000, 24050000],
                                                   }, 'Bands'),
     
                  '6mm' => bless( { band => [47000000, 47200000],
-                                                       cw => [47087000, 47089000],
-                                                       ssb => [47087000, 47089000],
                                                  }, 'Bands'),
-                 '4mm' => bless( { band => [75500000, 81000000], 
+
+                 '4mm' => bless( { band => [75500000, 81500000], 
                                                  }, 'Bands'), 
 
+                 '122g' => bless( { band => [122250000, 123000000], 
+                                                 }, 'Bands'), 
+
+                 '134g' => bless( { band => [134000000, 141000000], 
+                                                 }, 'Bands'), 
+
+                 '248g' => bless( { band => [241000000, 250000000], 
+                                                 }, 'Bands'), 
+
+
+
                  'band1' => bless ( { band => [47000, 49999, 52000, 68000],
                                                         }, 'Bands'),
                      
                   vhf => bless ( { band => [30000, 299999], }, 'Bands'), 
                 );
 
+#
+# fix up some aliases
+#
+
+$bands{'630m'} = $bands{'500khz'};
+$bands{'24g'} = $bands{'12mm'};
+$bands{'47g'} = $bands{'6mm'};
+$bands{'76g'} = $bands{'4mm'};
+
+
 #
 # the list of regions
 #
 #
 
 %regions = (
-                       vlf => [qw( 73khz 136khz 500khz )],
+                       vlf => [qw( 73khz 136khz 630m )],
                        hf => [qw( 160m 80m 60m 40m 30m 20m 17m 15m 12m 10m )],
                        contesthf => [qw( 160m 80m 40m 20m 15m 10m )],
                        vhf => [qw( 6m 4m 2m 220 )],
                        vhfradio => [qw( band1 band2 )],
                        vhftv => [qw( band1 band3 )],
-                       uhf => [qw( 70cm 23cm )],
+                       uhf => [qw( 70cm 902 23cm )],
                        uhftv => [qw( band4 band5 )],
-                       shf => [qw( 23cm 13cm 9cm 6cm 3cm )],
+                       shf => [qw( 23cm 13cm 9cm 6cm 3cm 24g 47g 76g 121g 134g 248g )],
                        pmr => [qw( pmrlow pmrmid pmrhigh pmruhf )],
-                       spe => [qw( 10m 6m 4m 2m )],
+                       spe => [qw( 10m 8m 6m 5m 4m 2m )],
                        warc => [qw( 60m 30m 17m 12m )],
-                       all => [qw( 73khz 136khz 160m 80m 60m 40m 30m 20m 17m 15m 12m 10m 6m 4m 2m 220 70cm 23cm 9cm 6cm 3cm 12mm 6mm )],
+                       all => [qw( 73khz 136khz 630m 160m 80m 60m 40m 30m 20m 17m 15m 12m 10m 8m 6m 5m 4m 2m 220 70cm 902 23cm 9cm 6cm 3cm 24g 47g 76g 121g 134g 248g)],
                   );  
 
index 012039ee6a614eb8035b98fc27d3b6a87dd01a88..795346db5ad89ea1d104e20a61ebffead5aee7f1 100644 (file)
@@ -47,7 +47,7 @@ sub check
 sub find
 {
        return 0 unless $_[0];
-       return $d{$_[0]};
+       return exists $d{$_[0]} ? $d{$_[0]} : 0;
 }
 
 sub add
index f4089fcf9eeda8eefdb1a76838494274de721c4c..1c6b8589f93e803b8b9ca332d146737ce88709b2 100644 (file)
@@ -358,7 +358,8 @@ sub load_dxchan
 {
        my $dxchan = shift;
        my $sort = lc shift;
-       my $in = shift ? 'in' : '';
+       my $in = shift;
+       $in = $in ? 'in' : '';          # to cope with older perls that did not like a ternary expression with 'shift' as a conditional
        my $nossid = $dxchan->call;
        $nossid =~ s/-\d+$//;
        my $n = "$in$sort" . "filter";
index 64db9a722498109f10edcda7a5470ba2f05577b8..316eb4b9be4f78484989480cda8b3a17554f084a 100644 (file)
@@ -33,7 +33,7 @@ $maxspots = 100;                                      # maximum spots to return
 $defaultspots = 10;                            # normal number of spots to return
 $maxdays = 100;                                # normal maximum no of days to go back
 $dirprefix = "spots";
-$duplth = 20;                                  # the length of text to use in the deduping
+$duplth = 15;                                  # the length of text to use in the deduping
 $dupage = 1*3600;               # the length of time to hold spot dups
 $maxcalllth = 12;                               # the max length of call to take into account for dupes
 $filterdef = bless ([
@@ -502,29 +502,57 @@ sub dup
        
        $call = substr($call, 0, $maxcalllth) if length $call > $maxcalllth;
 
+       my $dtext ;
        
+       my $l = length $text;
+       $dtext = qq{original:'$text'($l)} if isdbg('spottext');
+
        chomp $text;
+       
        $text =~ s/\%([0-9A-F][0-9A-F])/chr(hex($1))/eg;
        $text = uc unpad($text);
+
+       $l = length $text;
+       $dtext .= qq{->afterhex: '$text'($l)} if isdbg('spottext');
+       my @dubious;
+       if (isdbg('spottext')) {
+               (@dubious) = $text =~ /([?\x00-\x08\x0a-\x1F\x7B-\xFF]+)+/;
+               $dtext .= sprintf q{DUBIOUS '%s'}, join '', @dubious if @dubious;
+       }
+
        my $otext = $text;
 #      $text = Encode::encode("iso-8859-1", $text) if $main::can_encode && Encode::is_utf8($text, 1);
        $text =~ s/^\+\w+\s*//;                 # remove leading LoTW callsign
-       $text =~ s/\s{2,}[\dA-Z]?[A-Z]\d?$// if length $text > 24;
+       $text =~ s/\s{2,}[\dA-Z]?[A-Z]\d?$//g if length $text > 24;
+       $text =~ s/\x09+//g;
        $text =~ s/[\W\x00-\x2F\x7B-\xFF]//g; # tautology, just to make quite sure!
-       $text = substr($text, 0, $duplth) if length $text > $duplth; 
+       $text = substr($text, 0, $duplth) if length $text > $duplth;
+
+       $l = length $text;
+       $dtext .= qq{->final:'$text'($l)} if isdbg('spottext');
+               
        my $ldupkey = $oldstyle ? "X|$call|$by|$node|$freq|$d|$text" : "X|$call|$by|$node|$qrg|$nd|$text";
 
-       my $t = DXDupe::find($ldupkey);
+       my $t = 0;
+       $t = DXDupe::find($ldupkey);
        dbg("Spot::dup ldupkey $ldupkey t '$t'") if isdbg('spotdup');
-       return 1 if $t > 0;
+       $dtext .= ' DUPE' if $t;
+       dbg("text transforms: $dtext") if length $text && isdbg('spottext');
+       return 1 if $t > 0;     
        
        DXDupe::add($ldupkey, $main::systime+$dupage) unless $just_find;
+
        $otext = substr($otext, 0, $duplth) if length $otext > $duplth; 
        $otext =~ s/\s+$//;
        if (length $otext && $otext ne $text) {
                $ldupkey = $oldstyle ? "X|$freq|$call|$by|$otext" : "X|$qrg|$call|$by|$otext";
                $t = DXDupe::find($ldupkey);
-               dbg("Spot::dup ldupkey $ldupkey t '$t'") if isdbg('spotdup');
+               dbg("Spot::dup (OTEXT) ldupkey $ldupkey t '$t'") if isdbg('spotdup');
+               if (isdbg('spottext')) {
+                       $dtext .= sprintf q{ DUBIOUS '%s'}, join '', @dubious if @dubious;
+                       $dtext .= ' DUPE (OTEXT)' if $t;
+                       dbg("text transforms: $dtext") if length $text;
+               }
                return 1 if $t > 0;
                DXDupe::add($ldupkey, $main::systime+$dupage) unless $just_find;
        }