Blob Blame History Raw
#!/usr/bin/perl
# Copyright (c) 2008-2017 Sullivan Beck.  All rights reserved.
# This program is free software; you can redistribute it and/or modify it
# under the same terms as Perl itself.

###############################################################################
###############################################################################
# This script will check windows timezone information.

my $new = 'windows.new';
require "data.alias.pl";

############################################################################
# MAIN PROGRAM
############################################################################

my %old = %windows_zones;
my %new = _parse($new);

# Find deprecated zones

my @old;
foreach my $key (keys %old) {
   next  if (exists $new{$key});
   push(@old,$key);
}

if (@old) {
   print "The following zones need to be removed:\n";
   foreach my $key (sort @old) {
      print "   $key\n";
      delete $old{$key};
   }
   print "\n";
}

# Find new zones

my @new;
foreach my $key (keys %new) {
   next  if (exists $old{$key});
   push(@new,$key);
}

if (@new) {
   print "The following zones need to be added (check that the zones are in tzdata):\n";
   foreach my $key (sort @new) {
      my $val = $new{$key};
      print "   \"$key\"" . " "x(32-length($key)) . "=> \"$val\",\n";
      delete $new{$key};
   }
   print "\n";
}

# Find changed zones

my @chg;
foreach my $key (keys %old) {
   next  if ($old{$key} eq $new{$key});
   push(@chg,$key);
}

if (@chg) {
   print "The following zones need to be changed (verify in tzdata first):\n";
   foreach my $key (sort @chg) {
      my $val = $new{$key};
      print "   \"$key\"" . " "x(32-length($key)) . "=> \"$val\",\n";
   }
   print "\n";
}

############################################################################
############################################################################

# It's a file of TAB separated lines:
#
#    ALIAS \t TAG \t ZONE_LIST
#
# where ALIAS is the windows time zone name and ZONE_LIST is a space
# separated list of timezones.
#
# ALIAS may appear on multiple lines... use the first, and ZONE_LIST
# may have multiple zones... use the first.
#
sub _parse {
   my($file) = @_;
   my %ret;

   my @lines = `cat $file`;
   chomp(@lines);

   my $n = 0;
   foreach my $line (@lines) {
      $n++;

      my @f = split(/\t/,$line);
      if (@f != 3) {
         warn "ERROR: invalid line: $file[$n]\n" .
              "       $line\n";
      }

      my($alias,$tmp,$zones) = @f;
      next  if (exists $ret{$alias});

      my @tmp = split(/\s+/,$zones);
      my $zone = $tmp[0];

      $ret{$alias} = $zone;
   }

   return %ret;
}

# For CLDR 2.0
# sub _parse {
#    my($file) = @_;
#    my %ret;

#    my @lines = `cat $file`;
#    chomp(@lines);

#    my $n = 0;
#    foreach my $line (@lines) {
#       $n++;

#       if ($line =~ /^\s*(.*?)\s+any\s+(.*?)\s*$/) {
#          $ret{$1} = $2;
#       } else {
#          warn "ERROR: invalid line: $file[$n]\n" .
#               "       $line\n";
#       }
#    }

#    return %ret;
# }

# Local Variables:
# mode: cperl
# indent-tabs-mode: nil
# cperl-indent-level: 3
# cperl-continued-statement-offset: 2
# cperl-continued-brace-offset: 0
# cperl-brace-offset: 0
# cperl-brace-imaginary-offset: 0
# cperl-label-offset: 0
# End: