aboutsummaryrefslogtreecommitdiff
path: root/unused/zoneinfo2tdf.pl
diff options
context:
space:
mode:
Diffstat (limited to 'unused/zoneinfo2tdf.pl')
-rwxr-xr-xunused/zoneinfo2tdf.pl54
1 files changed, 54 insertions, 0 deletions
diff --git a/unused/zoneinfo2tdf.pl b/unused/zoneinfo2tdf.pl
new file mode 100755
index 000000000000..f34ca3e99c31
--- /dev/null
+++ b/unused/zoneinfo2tdf.pl
@@ -0,0 +1,54 @@
+#! /usr/bin/perl -w
+
+# @(#)zoneinfo2tdf.pl 8.2
+
+# Courtesy Ken Pizzini.
+
+use strict;
+
+#This file released to the public domain.
+
+#Note: error checking is poor --- only trust the output if the input
+#has been checked by zic.
+
+my $contZone = '';
+while (<>) {
+ my $origline = $_;
+ my @fields = ();
+ while (s/^\s*((?:"[^"]*"|[^\s#])+)//) {
+ push @fields, $1;
+ }
+ next unless @fields;
+
+ my $type = lc($fields[0]);
+ if ($contZone) {
+ @fields >= 3 or warn "bad continuation line";
+ unshift @fields, '+', $contZone;
+ $type = 'zone';
+ }
+
+ $contZone = '';
+ if ($type eq 'zone') {
+ # Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+ my $nfields = @fields;
+ $nfields >= 5 or warn "bad zone line";
+ if ($nfields > 6) {
+ #this splice is optional, depending on one's preference
+ #(one big date-time field, or componentized date and time):
+ splice(@fields, 5, $nfields-5, "@fields[5..$nfields-1]");
+ }
+ $contZone = $fields[1] if @fields > 5;
+ } elsif ($type eq 'rule') {
+ # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+ @fields == 10 or warn "bad rule line";
+ } elsif ($type eq 'link') {
+ # Link LINK-FROM LINK-TO
+ @fields == 3 or warn "bad link line";
+ } elsif ($type eq 'leap') {
+ # Leap YEAR MONTH DAY HH:MM:SS CORR R/S
+ @fields == 7 or warn "bad leap line";
+ } else {
+ warn "Fubar at input line $.: $origline";
+ }
+ print join("\t", @fields), "\n";
+}