- my $t = shift;
- my ($sec,$min,$hour,$mday,$mon,$year) = gmtime((defined $t) ? $t : time);
- $year += 1900;
- my $buf = sprintf "%02d-%s-%04d", $mday, $month[$mon], $year;
- return $buf;
+ my $t = shift;
+ my ($sec,$min,$hour,$mday,$mon,$year) = gmtime((defined $t) ? $t : time);
+ $year += 1900;
+ my $buf = sprintf "%2d-%s-%04d", $mday, $month[$mon], $year;
+ return $buf;
+}
+
+# return a cluster style date time
+sub cldatetime
+{
+ my $t = shift;
+ my $date = cldate($t);
+ my $time = ztime($t);
+ return "$date $time";
+}
+
+# return a unix date from a cluster date and time
+sub cltounix
+{
+ my $date = shift;
+ my $time = shift;
+ my ($thisyear) = (gmtime)[5] + 1900;
+
+ return 0 unless $date =~ /^\s*(\d+)-(\w\w\w)-([12][90]\d\d)$/;
+ return 0 if $3 > 2036;
+ return 0 unless abs($thisyear-$3) <= 1;
+ $date = "$1 $2 $3";
+ return 0 unless $time =~ /^([012]\d)([012345]\d)Z$/;
+ $time = "$1:$2 +0000";
+ my $r = str2time("$date $time");
+ return $r unless $r;
+ return $r == -1 ? undef : $r;
+}
+
+# turn a latitude in degrees into a string
+sub slat
+{
+ my $n = shift;
+ my ($deg, $min, $let);
+ $let = $n >= 0 ? 'N' : 'S';
+ $n = abs $n;
+ $deg = int $n;
+ $min = int ((($n - $deg) * 60) + 0.5);
+ return "$deg $min $let";
+}
+
+# turn a longitude in degrees into a string
+sub slong
+{
+ my $n = shift;
+ my ($deg, $min, $let);
+ $let = $n >= 0 ? 'E' : 'W';
+ $n = abs $n;
+ $deg = int $n;
+ $min = int ((($n - $deg) * 60) + 0.5);
+ return "$deg $min $let";
+}
+
+# turn a true into 'yes' and false into 'no'
+sub yesno
+{
+ my $n = shift;
+ return $n ? $main::yes : $main::no;