xref: /minix3/lib/libc/time/leapseconds.awk (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1# Generate the 'leapseconds' file from 'leap-seconds.list'.
2
3# This file is in the public domain.
4
5BEGIN {
6  print "# Allowance for leapseconds added to each timezone file."
7  print ""
8  print "# This file is in the public domain."
9  print ""
10  print "# This file is generated automatically from the data in the public-domain"
11  print "# leap-seconds.list file available from most NIST time servers."
12  print "# If the URL <ftp://time.nist.gov/pub/leap-seconds.list> does not work,"
13  print "# you should be able to pick up leap-seconds.list from a secondary NIST server."
14  print "# For more about leap-seconds.list, please see"
15  print "# The NTP Timescale and Leap Seconds"
16  print "# <http://www.eecis.udel.edu/~mills/leap.html>."
17  print ""
18  print "# The International Earth Rotation Service periodically uses leap seconds"
19  print "# to keep UTC to within 0.9 s of UT1"
20  print "# (which measures the true angular orientation of the earth in space); see"
21  print "# Terry J Quinn, The BIPM and the accurate measure of time,"
22  print "# Proc IEEE 79, 7 (July 1991), 894-905 <http://dx.doi.org/10.1109/5.84965>."
23  print "# There were no leap seconds before 1972, because the official mechanism"
24  print "# accounting for the discrepancy between atomic time and the earth's rotation"
25  print "# did not exist until the early 1970s."
26  print ""
27  print "# The correction (+ or -) is made at the given time, so lines"
28  print "# will typically look like:"
29  print "#	Leap	YEAR	MON	DAY	23:59:60	+	R/S"
30  print "# or"
31  print "#	Leap	YEAR	MON	DAY	23:59:59	-	R/S"
32  print ""
33  print "# If the leapsecond is Rolling (R) the given time is local time."
34  print "# If the leapsecond is Stationary (S) the given time is UTC."
35  print ""
36  print "# Leap	YEAR	MONTH	DAY	HH:MM:SS	CORR	R/S"
37}
38
39/^ *$/ { next }
40/^#/ { next }
41
42{
43    NTP_timestamp = $1
44    TAI_minus_UTC = $2
45    hash_mark = $3
46    one = $4
47    month = $5
48    year = $6
49    if (old_TAI_minus_UTC) {
50	if (old_TAI_minus_UTC < TAI_minus_UTC) {
51	    sign = "23:59:60\t+"
52	} else {
53	    sign = "23:59:59\t-"
54	}
55	if (month == "Jan") {
56	    year--;
57	    month = "Dec";
58	    day = 31
59	} else if (month == "Jul") {
60	    month = "Jun";
61	    day = 30
62	}
63	printf "Leap\t%s\t%s\t%s\t%s\tS\n", year, month, day, sign
64    }
65    old_TAI_minus_UTC = TAI_minus_UTC
66}
67