]> dxcluster.org Git - spider.git/blob - perl/Bands.pm
made sure that pc48 is processed correctly by DXDb.pm
[spider.git] / perl / Bands.pm
1 #
2 # module to manage the band list
3 #
4 # Copyright (c) 1998 - Dirk Koopman G1TLH
5 #
6 # $Id$
7 #
8
9 package Bands;
10
11 use DXUtil;
12 use DXDebug;
13 use DXVars;
14 use Carp;
15
16 use strict;
17 use vars qw(%bands %regions %aliases $bandsfn %valid);
18
19 %bands = ();                                    # the 'raw' band data
20 %regions = ();                                  # list of regions for shortcuts eg vhf ssb
21 %aliases = ();                                  # list of aliases
22 $bandsfn = "$main::data/bands.pl";
23
24 %valid = (
25                   cw => '0,CW,parraypairs',
26                   ssb => '0,SSB,parraypairs',
27                   data => '0,DATA,parraypairs',
28                   sstv => '0,SSTV,parraypairs',
29                   fstv => '0,FSTV,parraypairs',
30                   rtty => '0,RTTY,parraypairs',
31                   pactor => '0,PACTOR,parraypairs',
32                   packet => '0,PACKET,parraypairs',
33                   repeater => '0,REPEATER,parraypairs',
34                   fax => '0,FAX,parraypairs',
35                   beacon => '0,BEACON,parraypairs',
36                   band => '0,BAND,parraypairs',
37                  );
38
39 # load the band data
40 sub load
41 {
42         %bands = ();
43         do $bandsfn;
44         confess $@ if $@;
45 }
46
47 # obtain a band object by callsign [$obj = Band::get($call)]
48 sub get
49 {
50         my $call = shift;
51         my $ncall = $aliases{$call};
52         $call = $ncall if $ncall;
53         return $bands{$call};
54 }
55
56 # obtain all the band objects
57 sub get_all
58 {
59         return values(%bands);
60 }
61
62 # get all the band keys
63 sub get_keys
64 {
65         return keys(%bands);
66 }
67
68 # get all the region keys
69 sub get_region_keys
70 {
71         return keys(%regions);
72 }
73
74 # get all the alias keys
75 sub get_alias_keys
76 {
77         return keys(%aliases);
78 }
79
80 # get a region 
81 sub get_region
82 {
83         my $reg = shift;
84         return $regions{$reg};
85 }
86
87 # get all the frequency pairs associated with the band and sub-band offered
88 # the band can be a region, sub-band can be missing
89
90 # called Bands::get_freq(band-label, subband-label)
91 sub get_freq
92 {
93         my ($band, $subband) = @_;
94         my @band;
95         my $b;
96         my @out;
97         return () if !$band;
98         $subband = 'band' if !$subband;
99   
100         # first look in the region
101         $b = $regions{$band};
102         @band = @$b if $b;
103         @band = ($band) if @band == 0;
104   
105         # we now have a list of bands to scan for sub bands
106         foreach $b (@band) {
107                 my $wb = $bands{$b};
108                 if ($wb) {
109                         my $sb = $wb->{$subband};
110                         push @out, @$sb if $sb;
111                 }
112         }
113         return @out;
114 }
115
116 #
117 # return a list of valid elements 
118
119
120 sub fields
121 {
122         return keys(%valid);
123 }
124
125 #
126 # return a prompt for a field
127 #
128
129 sub field_prompt
130
131         my ($self, $ele) = @_;
132         return $valid{$ele};
133 }
134
135 no strict;
136 sub AUTOLOAD
137 {
138         my $self = shift;
139         my $name = $AUTOLOAD;
140         return if $name =~ /::DESTROY$/;
141         $name =~ s/.*:://o;
142   
143         @_ ? $self->{$name} = shift : $self->{$name} ;
144 }
145
146 1;