xref: /freebsd/contrib/tzdata/ziguard.awk (revision 63a938566d524836885917d95bd491aa4400b181)
1# Convert tzdata source into vanguard or rearguard form.
2
3# Contributed by Paul Eggert.  This file is in the public domain.
4
5# This is not a general-purpose converter; it is designed for current tzdata.
6#
7# When converting to vanguard form, the output can use negative SAVE
8# values.
9#
10# When converting to rearguard form, the output uses only nonnegative
11# SAVE values.  The idea is for the output data to simulate the behavior
12# of the input data as best it can within the constraints of the
13# rearguard format.
14
15BEGIN {
16  dst_type["vanguard.zi"] = 1
17  dst_type["main.zi"] = 1
18  dst_type["rearguard.zi"] = 1
19
20  # The command line should set OUTFILE to the name of the output file.
21  if (!dst_type[outfile]) exit 1
22  vanguard = outfile == "vanguard.zi"
23}
24
25/^Zone/ { zone = $2 }
26
27outfile != "main.zi" {
28  in_comment = /^#/
29
30  # If this line should differ due to Ireland using negative SAVE values,
31  # uncomment the desired version and comment out the undesired one.
32  Rule_Eire = /^#?Rule[\t ]+Eire[\t ]/
33  Zone_Dublin_post_1968 \
34    = (zone == "Europe/Dublin" && /^#?[\t ]+[01]:00[\t ]/ \
35       && (!$(in_comment + 4) || 1968 < $(in_comment + 4)))
36  if (Rule_Eire || Zone_Dublin_post_1968) {
37    if ((Rule_Eire \
38	 || (Zone_Dublin_post_1968 && $(in_comment + 3) == "IST/GMT"))	\
39	== vanguard) {
40      sub(/^#/, "")
41    } else if (/^[^#]/) {
42      sub(/^/, "#")
43    }
44  }
45}
46
47# If a Link line is followed by a Zone line for the same data, comment
48# out the Link line.  This can happen if backzone overrides a Link
49# with a Zone.
50/^Link/ {
51  linkline[$3] = NR
52}
53/^Zone/ {
54  sub(/^Link/, "#Link", line[linkline[$2]])
55}
56
57{ line[NR] = $0 }
58
59END {
60  for (i = 1; i <= NR; i++)
61    print line[i]
62}
63