+
+ if ($fromdxcc) {
+ @ans = Prefix::extract($spotter); # is it a callsign/prefix?
+
+ if (@ans) {
+
+ # first deal with the prefix
+ my $pre = shift @ans;
+ my $a;
+ $expr .= ' && ' if $expr;
+ $hint .= ' && ' if $hint;
+ my $str = "Spotter: $pre";
+ my $l = length $str;
+ my @expr;
+ my @hint;
+
+ # build up a search string for this dxcc country/countries
+ foreach $a (@ans) {
+ my $n = $a->dxcc();
+ push @expr, "\$f6 == $n";
+ push @hint, "m{$n}";
+ my $name = $a->name();
+ $str .= " Dxcc: $n ($name)";
+ push @out, $str;
+ $str = ' ' x $l;
+ }
+ $expr .= @expr > 1 ? '(' . join(' || ', @expr) . ')' : $expr[0];
+ $hint .= @hint > 1 ? '(' . join(' || ', @hint) . ')' : $hint[0];
+ }
+ }
+ unless (@ans) {
+ $expr .= ' && ' if $expr;
+ $spotter .= '*' unless $spotter =~ /[\*\?\[]/o;
+ $spotter = shellregex($spotter);
+ $expr .= "\$f4 =~ m{\U$spotter}";
+ $hint .= ' && ' if $hint;
+ $spotter =~ s/[\^\$]//g;
+ $hint .= "m{\U$spotter}";
+ }
+}
+
+# zone requests
+if ($zone) {
+ my @expr;
+ my @hint;
+ $expr .= ' && ' if $expr;
+ $hint .= ' && ' if $hint;
+ for (split /[:,]/, $zone) {
+ push @expr, "\$f9==$_";
+ push @hint, "m{$_}";
+ }
+ $expr .= @expr > 1 ? '(' . join(' || ', @expr) . ')' : $expr[0];
+ $hint .= @hint > 1 ? '(' . join(' || ', @hint) . ')' : $hint[0];
+}
+if ($byzone) {
+ my @expr;
+ my @hint;
+ $expr .= ' && ' if $expr;
+ $hint .= ' && ' if $hint;
+ for (split /[:,]/, $byzone) {
+ push @expr, "\$f11==$_";
+ push @hint, "m{$_}";
+ }
+ $expr .= @expr > 1 ? '(' . join(' || ', @expr) . ')' : $expr[0];
+ $hint .= @hint > 1 ? '(' . join(' || ', @hint) . ')' : $hint[0];
+}
+
+# itu requests
+if ($itu) {
+ my @expr;
+ my @hint;
+ $expr .= ' && ' if $expr;
+ $hint .= ' && ' if $hint;
+ for (split /[:,]/, $itu) {
+ push @expr, "\$f8==$_";
+ push @hint, "m{$_}";
+ }
+ $expr .= @expr > 1 ? '(' . join(' || ', @expr) . ')' : $expr[0];
+ $hint .= @hint > 1 ? '(' . join(' || ', @hint) . ')' : $hint[0];
+}
+if ($byitu) {
+ my @expr;
+ my @hint;
+ $expr .= ' && ' if $expr;
+ $hint .= ' && ' if $hint;
+ for (split /[:,]/, $byitu) {
+ push @expr, "\$f10==$_";
+ push @hint, "m{$_}";
+ }
+ $expr .= @expr > 1 ? '(' . join(' || ', @expr) . ')' : $expr[0];
+ $hint .= @hint > 1 ? '(' . join(' || ', @hint) . ')' : $hint[0];
+}
+
+# state requests
+if ($state) {
+ my @expr;
+ my @hint;
+ $expr .= ' && ' if $expr;
+ $hint .= ' && ' if $hint;
+ for (split /[:,]/, $state) {
+ push @expr, "\$f12 eq '$_'";
+ push @hint, "m{$_}";
+ }
+ if ($main::dbh) {
+ $expr .= @expr > 1 ? '(' . join(' || ', @expr) . ')' : "$expr[0]";
+ } else {
+ $expr .= @expr > 1 ? '(\$f12 && (' . join(' || ', @expr) . '))' : "(\$f12 && $expr[0])";
+ }
+ $hint .= @hint > 1 ? '(' . join(' || ', @hint) . ')' : $hint[0];
+}
+if ($bystate) {
+ my @expr;
+ my @hint;
+ $expr .= ' && ' if $expr;
+ $hint .= ' && ' if $hint;
+ for (split /[:,]/, $bystate) {
+ push @expr, "\$f13 eq '$_'";
+ push @hint, "m{$_}";
+ }
+ if ($main::dbh) {
+ $expr .= @expr > 1 ? '(' . join(' || ', @expr) . ')' : "$expr[0]";
+ } else {
+ $expr .= @expr > 1 ? '(\$f13 && (' . join(' || ', @expr) . '))' : "(\$f13 && $expr[0])";
+ }
+ $hint .= @hint > 1 ? '(' . join(' || ', @hint) . ')' : $hint[0];