]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - tools/tools/iso/check-iso3166.pl
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / tools / tools / iso / check-iso3166.pl
1 #!/usr/bin/perl -w
2
3 #
4 # $FreeBSD$
5 #
6 # This script compares the file iso3166 (from head/share/misc) with the files
7 # list-en1-semic-3.txt (from
8 # http://www.iso.org/iso/list-en1-semic-3.txt) and iso3166-countrycodes.txt
9 # (from ftp://ftp.ripe.net/) to see if there any differences.
10 #
11 # Created by Edwin Groothuis <edwin@FreeBSD.org> for the FreeBSD project.
12 #
13
14 use strict;
15 use Data::Dumper;
16
17 my %old = ();
18 {
19         open(FIN, "iso3166") or die "Cannot open iso3166 (should be in head/share/misc)";
20         my @lines = <FIN>;
21         close(FIN);
22         chomp(@lines);
23
24         foreach my $l (@lines) {
25                 next if ($l =~ /^#/);
26                 next if ($l eq "");
27
28                 die "Bad line: $l\n"
29                         if ($l !~ /^([A-Z\-]*)[ \t]+([A-Z\-]+)[ \t]+(\d+)[ \t]+(.*)/);
30                 my $two = $1;
31                 my $three = $2;
32                 my $number = $3;
33                 my $name = $4;
34
35                 $old{$two}{two} = $two;
36                 $old{$two}{three} = $three;
37                 $old{$two}{number} = $number;
38                 $old{$two}{name} = $name;
39         }
40 }
41
42 my %new1 = ();
43 {
44         open(FIN, "iso3166-countrycodes.txt") or die "Cannot open iso3166-countrycodes.txt, which can be retrieved from ftp://ftp.ripe.net/iso3166-countrycodes.txt";
45         my @lines = <FIN>;
46         close(FIN);
47         chomp(@lines);
48
49         my $noticed = 0;
50         foreach my $l (@lines) {
51                 if ($l =~ /\-\-\-\-\-\-\-/) {
52                         $noticed = 1;
53                         next;
54                 }
55                 next if (!$noticed);
56                 next if ($l eq "");
57
58                 die "Invalid line: $l\n"
59                         if ($l !~ /^(.+?)[\t ]+([A-Z]{2})[\t ]+([A-Z]{3})[\t ]+(\d+)[\t ]*$/);
60                 my $two = $2;
61                 my $three = $3;
62                 my $number = $4;
63                 my $name = $1;
64
65                 $new1{$two}{two} = $two;
66                 $new1{$two}{three} = $three;
67                 $new1{$two}{number} = $number;
68                 $new1{$two}{name} = $name;
69         }
70 }
71
72 my %new2 = ();
73 {
74         open(FIN, "list-en1-semic-3.txt") or die "Cannot open list-en1-semic-3.txt, which can be retrieved from http://www.iso.org/iso/list-en1-semic-3.txt";
75         my @lines = <FIN>;
76         close(FIN);
77         chomp(@lines);
78
79         my $noticed = 0;
80         foreach my $l (@lines) {
81                 $l =~ s/\x0d//g;
82                 if (!$noticed) {        # skip the first line
83                         $noticed = 1;
84                         next;
85                 }
86                 next if ($l eq "");
87
88                 my @a = split(/;/, $l);
89                 die "Invalid line: $l\n" if ($#a != 1);
90                 my $two = $a[1];
91                 my $name = $a[0];
92
93                 $new2{$two}{two} = $two;
94                 $new2{$two}{name} = $name;
95         }
96 }
97
98 {
99         my $c = 0;
100         foreach my $two (sort(keys(%old))) {
101                 if (!defined $new1{$two}) {
102                         print "In old but not new1: $old{$two}{two}\t$old{$two}{three}\t$old{$two}{number}\t$old{$two}{name}\n";
103                         $c++;
104                 }
105                 if (!defined $new2{$two}) {
106                         print "In old but not new2: $old{$two}{two}\t$old{$two}{name}\n";
107                         $c++;
108                 }
109         }
110         print "Found $c issues\n";
111 }
112
113 {
114         my $c = 0;
115         foreach my $two (sort(keys(%new1))) {
116                 next if (defined $old{$two});
117                 print "In new1 but not old: $new1{$two}{two}\t$new1{$two}{three}\t$new1{$two}{number}\t$new1{$two}{name}\n";
118                 $c++;
119         }
120         print "Found $c issues\n";
121 }
122
123 {
124         my $c = 0;
125         foreach my $two (sort(keys(%new2))) {
126                 next if (defined $old{$two});
127                 print "In new2 but not old: $new2{$two}{two}\t$new2{$two}{name}\n";
128                 $c++;
129         }
130         print "Found $c issues\n";
131 }
132
133 {
134         my $c = 0;
135         foreach my $two (sort(keys(%old))) {
136                 if (defined $new1{$two}) {
137                         if ($old{$two}{two} ne $new1{$two}{two} ||
138                             $old{$two}{three} ne $new1{$two}{three} ||
139                             $old{$two}{number} ne $new1{$two}{number} ||
140                             lc($old{$two}{name}) ne lc($new1{$two}{name})) {
141                                 print "In old : $old{$two}{two}\t$old{$two}{three}\t$old{$two}{number}\t$old{$two}{name}\n";
142                                 print "In new1: $new1{$two}{two}\t$new1{$two}{three}\t$new1{$two}{number}\t$new1{$two}{name}\n";
143                                 $c++;
144                         }
145                 }
146         }
147         print "Found $c issues\n";
148 }
149
150 {
151         my $c = 0;
152         foreach my $two (sort(keys(%old))) {
153                 if (defined $new2{$two}) {
154                         if ($old{$two}{two} ne $new2{$two}{two} ||
155                             lc($old{$two}{name}) ne lc($new2{$two}{name})) {
156                                 print "In old : $old{$two}{two}\t$old{$two}{name}\n";
157                                 print "In new2: $new2{$two}{two}\t$new2{$two}{name}\n";
158                                 $c++;
159                         }
160                 }
161         }
162         print "Found $c issues\n";
163 }
164