+#
+# return a list of valid elements
+#
+
+sub elements
+{
+ return keys(%valid);
+}
+
+#
+# return a prompt together with the existing value
+#
+
+sub prompt
+{
+ my ($self, $ele) = @_;
+ return "$valid{$ele} [$self->{$ele}]";
+}
+
+#
+# enter an element from input, returns 1 for success
+#
+
+sub enter
+{
+ my ($self, $ele, $value) = @_;
+ return 0 if (!defined $valid{$ele});
+ chomp $value;
+ return 0 if $value eq "";
+ if ($ele eq 'long') {
+ my ($longd, $longm, $longl) = $value =~ /(\d+) (\d+) ([EWew])/;
+ return 0 if (!$longl || $longd < 0 || $longd > 180 || $longm < 0 || $longm > 59);
+ $longd += ($longm/60);
+ $longd = 0-$longd if (uc $longl) eq 'W';
+ $self->{'long'} = $longd;
+ return 1;
+ } elsif ($ele eq 'lat') {
+ my ($latd, $latm, $latl) = $value =~ /(\d+) (\d+) ([NSns])/;
+ return 0 if (!$latl || $latd < 0 || $latd > 90 || $latm < 0 || $latm > 59);
+ $latd += ($latm/60);
+ $latd = 0-$latd if (uc $latl) eq 'S';
+ $self->{'lat'} = $latd;
+ return 1;
+ } elsif ($ele eq 'qra') {
+ $self->{'qra'} = UC $value;
+ return 1;
+ } else {
+ $self->{$ele} = $value; # default action
+ return 1;
+ }
+ return 0;
+}