Incorporated from ADO dist 94g.
authorroland <roland>
Wed, 14 Dec 1994 23:49:35 +0000 (23:49 +0000)
committerroland <roland>
Wed, 14 Dec 1994 23:49:35 +0000 (23:49 +0000)
time/africa
time/asia
time/australasia
time/emkdir.c
time/europe
time/ialloc.c
time/northamerica
time/private.h
time/scheck.c
time/zdump.c
time/zic.c

index c3f74b1..a978667 100644 (file)
@@ -1,4 +1,4 @@
-# @(#)africa   7.5
+# @(#)africa   7.6
 
 # This data is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
 #      Omit `.' from abbreviations in names, e.g. prefer `St_Helena'
 #              to `St._Helena'.
 #
+# We typically use traditional English time zone abbreviations,
+# and assume that applications translate them to other languages
+# as part of the normal localization process.
+#
 # I made up the following time zone abbreviations; corrections are welcome!
 #              LMT     Local Mean Time
 #      -2:00   CVT     Cape Verde Time (no longer used)
index 60166c1..78ecb30 100644 (file)
--- a/time/asia
+++ b/time/asia
@@ -1,4 +1,4 @@
-# @(#)asia     7.11
+# @(#)asia     7.12
 
 # This data is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
@@ -53,7 +53,7 @@
 #      9:00    MLT     Moluccas*
 #      9:30    CST     Australian Central Standard Time
 #
-# See the `europe' file for Russia in Asia.
+# See the `europe' file for Russia and Turkey in Asia.
 #
 # See the `africa' file for Zone naming conventions.
 
@@ -277,6 +277,11 @@ Zone       Asia/Nicosia    2:13:28 -       LMT     1921 Nov 14
                        2:00    Cyprus  EET%s
 
 # Georgia
+# From Paul Eggert <eggert@twinsun.com> (1994-11-19):
+# Today's _Economist_ (p 60) reports that Georgia moved its clocks forward
+# an hour recently, due to a law proposed by Zurab Murvanidze,
+# an MP who went on a hunger strike for 11 days to force discussion about it!
+# Alas, we have no details.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Asia/Tbilisi    2:59:16 -       LMT     1880
                        2:59    -       LST     1924 May  2
@@ -519,6 +524,11 @@ Zone       Asia/Alma-Ata   5:07:48 -       LMT     1924 May  2
                        5:00    -       TSK     1957 Mar
                        6:00    Russia  TS%s
 
+# Kirgizstan
+# Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
+Zone   Asia/Bishkek    4:58:24 -       LMT     1924 May  2
+                       5:00    -       TSK     1957 Mar
+                       6:00    Russia  TS%s
 
 ###############################################################################
 
@@ -555,18 +565,11 @@ Zone      Asia/Pyongyang  8:23:00 -       LMT     1890
 
 ###############################################################################
 
-
 # Kuwait
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Asia/Kuwait     3:11:56 -       LMT     1950
                        3:00    -       AST
 
-# Kyrgyzstan
-# Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
-Zone   Asia/Frunze     4:58:24 -       LMT     1924 May  2
-                       5:00    -       TSK     1957 Mar
-                       6:00    Russia  TS%s
-
 # Laos
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Asia/Vientiane  6:50:24 -       LMT     1906 Jun  9
index 15f520a..f9cde45 100644 (file)
@@ -1,4 +1,4 @@
-# @(#)australasia      7.20
+# @(#)australasia      7.21
 # This file also includes Pacific islands.
 
 # Notes are at the end of this file
@@ -21,9 +21,11 @@ Rule Aus     1943    only    -       Oct      3      2:00    1:00    -
 # 1944/1945 was just like 1943/1944; go with Shanks.
 
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
+# Northern Territory
 Zone Australia/Darwin   8:43:20 -      LMT     1895 Feb
                         9:30   -       CST     1917 Jan 1 0:01
                         9:30   Aus     CST
+# Western Australia
 Zone Australia/Perth    7:43:24 -      LMT     1895 Dec
                         8:00   -       WST     1917 Jan 1 0:01
                         8:00   Aus     WST     1974 Oct lastSun 2:00
@@ -33,6 +35,7 @@ Zone Australia/Perth   7:43:24 -      LMT     1895 Dec
                         8:00   -       WST     1991 Nov 17 2:00
                         8:00   1:00    WST     1992 Mar Sun>=1 3:00
                         8:00   -       WST
+# Queensland
 Zone Australia/Brisbane        10:12:08 -      LMT     1895
                        10:00   -       EST     1917 Jan 1 0:01
                        10:00   Aus     EST     1971 Oct lastSun 2:00
@@ -45,6 +48,7 @@ Zone Australia/Brisbane       10:12:08 -      LMT     1895
                        10:00   1:00    EST     1992 Mar Sun>=1 3:00
                        10:00   -       EST
 
+# South Australia
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   AS      1971    1985    -       Oct     lastSun 2:00    1:00    -
 Rule   AS      1986    only    -       Oct     19      2:00    1:00    -
@@ -52,8 +56,9 @@ Rule  AS      1987    max     -       Oct     lastSun 2:00    1:00    -
 Rule   AS      1972    only    -       Feb     27      3:00    0       -
 Rule   AS      1973    1985    -       Mar     Sun>=1  3:00    0       -
 Rule   AS      1986    1989    -       Mar     Sun>=15 3:00    0       -
-Rule   AS      1990    max     even    Mar     Sun>=18 3:00    0       -
-Rule   AS      1990    max     odd     Mar     Sun>=1  3:00    0       -
+Rule   AS      1990    1994    even    Mar     Sun>=18 3:00    0       -
+Rule   AS      1990    1994    odd     Mar     Sun>=1  3:00    0       -
+Rule   AS      1995    max     -       Mar     lastSun 3:00    0       -
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Australia/Adelaide        9:14:20 -       LMT     1895 Feb
                        9:00    -       CST     1899 May
@@ -61,6 +66,7 @@ Zone Australia/Adelaide       9:14:20 -       LMT     1895 Feb
                        9:30    Aus     CST     1971 Oct lastSun 2:00
                        9:30    AS      CST
 
+# Tasmania
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   AT      1967    only    -       Oct     1       2:00    1:00    -
 Rule   AT      1968    only    -       Mar     31      3:00    0       -
@@ -81,6 +87,7 @@ Zone Australia/Hobart 9:49:16 -       LMT     1895 Sep
                        10:00   Aus     EST     1967 Oct 1 2:00
                        10:00   AT      EST
 
+# Victoria
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   AV      1971    1985    -       Oct     lastSun 2:00    1:00    -
 Rule   AV      1972    only    -       Feb     27      3:00    0       -
@@ -88,19 +95,19 @@ Rule        AV      1973    1985    -       Mar     Sun>=1  3:00    0       -
 Rule   AV      1986    1990    -       Mar     Sun>=15 3:00    0       -
 Rule   AV      1986    only    -       Oct     19      2:00    1:00    -
 Rule   AV      1987    max     -       Oct     lastSun 2:00    1:00    -
-Rule   AV      1991    max     -       Mar     Sun>=1  3:00    0       -
+Rule   AV      1991    1994    -       Mar     Sun>=1  3:00    0       -
+Rule   AV      1995    max     -       Mar     lastSun 3:00    0       -
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Australia/Melbourne 9:39:52 -     LMT     1895 Feb
                        10:00   -       EST     1917 Jan 1 0:01
                        10:00   Aus     EST     1971 Oct 31 2:00
                        10:00   AV      EST
 
+# New South Wales
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   AN      1971    1985    -       Oct     lastSun 2:00    1:00    -
 Rule   AN      1972    only    -       Feb     27      3:00    0       -
-Rule   AN      1973    1981    -       Mar     Sun>=1  3:00    0       -
-Rule   AN      1982    only    -       Apr     4       3:00    0       -
-Rule   AN      1983    1985    -       Mar     Sun>=1  3:00    0       -
+Rule   AN      1973    1985    -       Mar     Sun>=1  3:00    0       -
 Rule   AN      1986    1989    -       Mar     Sun>=15 3:00    0       -
 Rule   AN      1986    only    -       Oct     19      2:00    1:00    -
 Rule   AN      1987    max     -       Oct     lastSun 2:00    1:00    -
@@ -116,12 +123,23 @@ Zone Australia/Broken_Hill 9:25:48 -      LMT     1895 Feb
                        9:30    -       CST     1917 Jan 1 0:01
                        9:30    Aus     CST     1971 Oct 31 2:00
                        9:30    AN      CST
+
+# Australian Capital Territory
+# Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
+Zone Australia/Canberra         9:56:32 -      LMT     1895 Feb
+                       10:00   -       EST     1917 Jan  1 0:01
+                       10:00   Aus     EST     1971 Oct 31 2:00
+                       10:00   AN      EST     1981 Oct 25 2:00
+                       10:00   1:00    EST     1982 Apr  4 3:00
+                       10:00   AN      EST
+
+# Australian miscellany
+# Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Australia/Lord_Howe 10:36:20 -    LMT     1895 Feb
                        10:00   -       EST     1981 Mar
                        10:30   AN      LHST
 Zone Indian/Christmas  7:02:52 -       LMT     1895 Feb
                        7:00    -       JVT
-
 #
 # Ashmore Is, Cartier
 # no information; probably like Australia/Perth
@@ -130,10 +148,6 @@ Zone Indian/Christmas      7:02:52 -       LMT     1895 Feb
 # no information
 
 
-# Belau
-Zone Pacific/Belau     8:58:00 -       LMT     1901
-                       9:00    -       BLT
-
 # Cook Is
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Cook    1978    only    -       Nov     12      0:00    0:30    HD
@@ -147,7 +161,7 @@ Zone Pacific/Rarotonga      -10:39:04 -     LMT     1901            # Avarua
 # Cocos
 # From USNO (1989):
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
-Zone   Pacific/Cocos   6:30    -       CCT
+Zone   Indian/Cocos    6:30    -       CCT
 
 # Fiji
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
@@ -223,13 +237,13 @@ Rule      NZ      1930    1933    -       Oct     Sun>=8  2:00    1:00    D
 # Shanks says DST stopped 1940 Sep lastSun; go with Whitman for war years.
 Rule   NZ      1934    1944    -       Apr     lastSun 2:00    0       S
 Rule   NZ      1934    1944    -       Sep     lastSun 2:00    1:00    D
-Rule   NZ      1974    only    -       Nov      3      2:00    1:00    D
-Rule   NZ      1975    1988    -       Oct     lastSun 2:00    1:00    D
-Rule   NZ      1989    only    -       Oct      8      2:00    1:00    D
-Rule   NZ      1990    max     -       Oct     Sun>=1  2:00    1:00    D
-Rule   NZ      1975    only    -       Feb     23      3:00    0       S
-Rule   NZ      1976    1989    -       Mar     Sun>=1  3:00    0       S
-Rule   NZ      1990    max     -       Mar     Sun>=15 3:00    0       S
+Rule   NZ      1974    only    -       Nov      3      2:00s   1:00    D
+Rule   NZ      1975    1988    -       Oct     lastSun 2:00s   1:00    D
+Rule   NZ      1989    only    -       Oct      8      2:00s   1:00    D
+Rule   NZ      1990    max     -       Oct     Sun>=1  2:00s   1:00    D
+Rule   NZ      1975    only    -       Feb     23      2:00s   0       S
+Rule   NZ      1976    1989    -       Mar     Sun>=1  2:00s   0       S
+Rule   NZ      1990    max     -       Mar     Sun>=15 2:00s   0       S
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Pacific/Auckland  11:39:04 -      LMT     1868
                                                # Shanks gives 1940 Sep 29 2:00;
@@ -256,7 +270,7 @@ Zone        Pacific/Niue    -11:19:40 -     LMT     1901            # Alofi
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Pacific/Norfolk 11:11:52 -      LMT     1901            # Kingston
                        11:12   -       NMT     1951
-                       11:30   -       NST
+                       11:30   -       NRFT
 
 # Pacific Islands Trust Territories
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
@@ -273,9 +287,14 @@ Zone Pacific/Truk  10:07:08 -      LMT     1901
 Zone Pacific/Ponape    10:33:00 -      LMT     1901
                        11:00   -       NCST
 Zone Pacific/Yap       9:12:24 -       LMT     1901
-                       9:00    -       BLT     1969 Oct
+                       9:00    -       PLT     1969 Oct
                        10:00   -       GST
 
+# Palau
+# Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
+Zone Pacific/Palau     8:57:56 -       LMT     1901            # Koror
+                       9:00    -       PLT
+
 # Palmyra
 # no information; probably like Pacific/Kiritmati
 
@@ -366,14 +385,14 @@ Zone      Pacific/Wallis  12:15:20 -      LMT     1901
 #        6:30  CCT     Cocos*
 #        7:00  JVT     Java*
 #        8:00  WST WST Western Australia
-#        9:00  BLT     Belau*
 #        9:00  JST     Japan
+#        9:00  PLT     Palau*
 #        9:30  CST CST Central Australia
 #       10:00  EST EST Eastern Australia
 #       10:00  GST     Guam*
 #       10:30  LHST LHST Lord Howe*
 #       11:00  NCST NCDT New Caledonia*
-#       11:30  NR    Norfolk*
+#       11:30  NRFT    Norfolk*
 #       12:00  NZST NZDT New Zealand
 #       12:45  NZ-CHAT Chatham
 #       13:00  TGT     Tongatapu*
@@ -385,6 +404,9 @@ Zone        Pacific/Wallis  12:15:20 -      LMT     1901
 #      - 9:00  GBT     Gambier*
 #      - 8:30  PIT     Pitcairn*
 #
+# See the `northamerica' file for Hawaii and Samoa.
+# See the `southamerica' file for Easter I and the Galapagos Is.
+#
 # See the `africa' file for Zone naming conventions.
 
 ###############################################################################
@@ -415,20 +437,31 @@ Zone      Pacific/Wallis  12:15:20 -      LMT     1901
 #      WST     for any place operating at a GMTOFF of 8:00
 #      EST     for any place operating at a GMTOFF of 10:00
 
-# Australia/North
+# From Paul Eggert (November 8, 1994):
+# Shanks reports 2:00 for all autumn changes in Australia and New Zealand.
+# Mark Prior <mrp@itd.adelaide.edu.au> writes that his newspaper
+# reports that NSW's fall 1995 change will occur at 2:00,
+# but Robert Elz says it's been 3:00 in Victoria since 1970
+# and perhaps the newspaper's `2:00' is referring to standard time.
+# And Robert Uzgalis <buz@cs.aukuni.ac.nz> says that the New Zealand Daylight
+# Savings Time Order in Council dated 1990-06-18 specifies 2:00 standard
+# time on both the first Sunday in October and the third Sunday in March.
+# For now we'll continue to assume 3:00 for changes since 1970.
+
+# Northern Territory
 
 # From George Shepherd via Simon Woodhead via Robert Elz (March 6, 1991):
 # # The NORTHERN TERRITORY..  [ Courtesy N.T. Dept of the Chief Minister ]
 # #                                    [ Nov 1990 ]
 # #    N.T. have never utilised any DST due to sub-tropical/tropical location.
 # ...
-# Zone Australia/North         9:30    -       CST
+# Zone        Australia/North         9:30    -       CST
 
 # From Bradley White (March 4, 1991):
 # A recent excerpt from an Australian newspaper...
 # the Northern Territory do[es] not have daylight saving.
 
-# Australia/West
+# Western Australia
 
 # From George Shepherd via Simon Woodhead via Robert Elz (March 6, 1991):
 # #  The state of WESTERN AUSTRALIA..  [ Courtesy W.A. dept Premier+Cabinet ]
@@ -460,8 +493,7 @@ Zone        Pacific/Wallis  12:15:20 -      LMT     1901
 # The 1992 ending date used in the rules is a best guess;
 # it matches what was used in the past.
 
-# Australia/Queensland
-
+# Queensland
 # From George Shepherd via Simon Woodhead via Robert Elz (March 6, 1991):
 # #   The state of QUEENSLAND.. [ Courtesy Qld. Dept Premier Econ&Trade Devel ]
 # #                                            [ Dec 1990 ]
@@ -498,7 +530,7 @@ Zone        Pacific/Wallis  12:15:20 -      LMT     1901
 # From Arthur David Olson (March 8, 1992):
 # The chosen rules the union of the 1971/1972 change and the 1989-1992 changes.
 
-# Australia/Tasmania, Australia/South, and Australia/Victoria
+# South Australia, Tasmania, Victoria
 
 # From Arthur David Olson (March 8, 1992):
 # The rules from version 7.1 follow.
@@ -526,7 +558,7 @@ Zone        Pacific/Wallis  12:15:20 -      LMT     1901
 # The file I'm including says that happened in 1988, I think
 # that's incorrect, but I'm not 100% certain.
 
-# Australia/South
+# South Australia
 
 # From Bradley White (March 4, 1991):
 # A recent excerpt from an Australian newspaper...
@@ -565,7 +597,12 @@ Zone       Pacific/Wallis  12:15:20 -      LMT     1901
 # 1994 was at +0930 as John Connolly's customer seems to assert, then I can
 # only conclude that the actual rule is more complicated....
 
-# Australia/Tasmania
+# From John Warburton <jwarb@SACBH.com.au> (1994-10-07):
+# The new Daylight Savings dates for South Australia ...
+# was gazetted in the Government Hansard on Sep 26 1994....
+# start on last Sunday in October and end in last sunday in March.
+
+# Tasmania
 
 # From Bradley White (March 4, 1991):
 # A recent excerpt from an Australian newspaper...
@@ -608,7 +645,7 @@ Zone        Pacific/Wallis  12:15:20 -      LMT     1901
 # 6 weeks a year now when we are out of sync with the rest of Australia
 # (but nothing new about that).
 
-# Australia/Victoria
+# Victoria
 
 # From Bradley White (March 4, 1991):
 # A recent excerpt from an Australian newspaper...
@@ -628,7 +665,7 @@ Zone        Pacific/Wallis  12:15:20 -      LMT     1901
 # Rule AV      1988    max     -       Oct     lastSun 2:00    1:00    D
 # Rule AV      1991    max     -       Mar     Sun>=1  3:00    0       E
 
-# Australia/NSW
+# New South Wales
 
 # From Arthur David Olson:
 # New South Wales and subjurisdictions have their own ideas of a fun time.
@@ -664,7 +701,7 @@ Zone        Pacific/Wallis  12:15:20 -      LMT     1901
 # Sources differ on whether DST ended March 6 or March 20 in 1988;
 # March 20 (the "confirmed" date) is in the chosen rules.
 
-# Australia/Yancowinna
+# Yancowinna
 
 # From John Basser (January 4, 1989):
 # `Broken Hill' means the County of Yancowinna.
@@ -685,7 +722,7 @@ Zone        Pacific/Wallis  12:15:20 -      LMT     1901
 # Rule  AY     1972    only    -       Feb     lastSun 3:00    0       C
 # [followed by other Rules]
 
-# Australia/LHI
+# Lord Howe Island
 
 # From George Shepherd via Simon Woodhead via Robert Elz (March 6, 1991):
 # LHI...               [ Courtesy of Pauline Van Winsen.. pauline@Aus ]
index a405b01..5cc62d2 100644 (file)
@@ -1,6 +1,6 @@
 #ifndef lint
 #ifndef NOID
-static char    elsieid[] = "@(#)emkdir.c       8.21";
+static char    elsieid[] = "@(#)emkdir.c       8.23";
 #endif /* !defined NOID */
 #endif /* !defined lint */
 
@@ -23,7 +23,7 @@ register const char * name;
 
        if (name == NULL)
                name = "";
-       result = imalloc(4 * strlen(name) + 3);
+       result = imalloc((int) (4 * strlen(name) + 3));
        if (result == NULL)
                return NULL;
        cp = result;
@@ -66,7 +66,7 @@ const int     mode;
 #ifndef unix
        format = "mkdir %s";
 #endif /* !defined unix */
-       command = imalloc(strlen(format) + 2 * strlen(qname) + 20 + 1);
+       command = imalloc((int) (strlen(format) + 2 * strlen(qname) + 20 + 1));
        if (command == NULL) {
                ifree(qname);
                return -1;
@@ -79,7 +79,7 @@ const int     mode;
 }
 
 /*
-** UNIX is a registered trademark of AT&T.
+** UNIX was a registered trademark of UNIX System Laboratories in 1993.
 */
 
 #endif /* !defined emkdir */
index 9abf677..a802cfe 100644 (file)
@@ -1,4 +1,4 @@
-# @(#)europe   7.16
+# @(#)europe   7.17
 
 # This data is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
 # From Andrew A. Chernov <ache@astral.msk.su> (November 12, 1993):
 # LST is Local Star Time (``mestnoe zvezdnoe vremya'').
 
+# From Peter Ilieve <peter@memex.co.uk> (December 4, 1994),
+# The original six [EU members]: Belguim, France, (West) Germany, Italy,
+# Luxembourg, the Netherlands.
+# Plus, from 1 Jan 73: Denmark, Ireland, United Kingdom.
+# Plus, from 1 Jan 81: Greece.
+# Plus, from 1 Jan 86: Spain, Portugal.
+# Plus, from 1 Jan 95: Austria, Finland, Sweden. (Norway negotiated terms for
+# entry but in a referendum on 28 Nov 94 the people voted No by 52.2% to 47.8%
+# on a turnout of 88.6%. This was almost the same result as Norway's previous
+# referendum in 1972, they are the only country to have said No twice.
+# Referendums in the other three countries voted Yes.)
+# ...
+# The only [current nonmember using EU rules] I can speak for is Estonia,
+# which uses EU dates but not at 01:00 GMT, they use midnight GMT. I don't
+# think they know yet what they will do from 1996 onwards.
+# ...
+# There shouldn't be any [current members who are not using EU rules].
+# A Directive has the force of law, member states are obliged to enact
+# national law to implement it. The only contentious issue was the
+# different end date for the UK and Ireland, and this was always allowed
+# in the Directive.
+
 ###############################################################################
 
 # United Kingdom
 
 # From Peter Ilieve <peter@memex.co.uk> (September 3, 1993):
 #
-# I have some more up to date info.
-#
 # Our Government...couldn't...make a decision after the 1989 consultation
 # exercise about the UK changing its timezone so it just let things drift
 # (different from deciding to keep the status quo).  According to the
 #       Start       End
 # 1993  28 March    24 October
 # 1994  27 March    23 October
-# All start and end times are at 01:00 GMT.
-# This is as far as it goes at present. A new EC directive is expected soon
-# and this will lead to a new Summer Time Order implementing it in the UK.
+# All start and end times are at 01:00 GMT....
 #
 # - Some text on the extent of Acts, from Halsbury's Statutes
 #
 # place of my old transcription of the Green Paper table [the UK Government
 # paper "Summer Time: A Consultation Document" (HMSO Cm722 June 1989)].
 #
-# The next thing on the horizon is the 7th EC/EU directive and the matching
-# UK Order. I expect I will keep quiet until then.
-#
-#
 #              Peter Ilieve            peter@memex.co.uk
 #
 #
 # 1993    28 Mar  24 Oct fixed
 # 1994    27 Mar  23 Oct fixed
 
-# From Peter Ilieve <peter@memex.co.uk> (June 8, 1994):
-# The European Union bureaucracy has edged a step closer to a 7th Directive
-# on summer-time arrangements.  I have the text of a Common Position
-# (EC No 9/94) and a statement of the Council's reasons dated 4 March 94,
-# reported in the Official Journal of the EC, No. C 137/38--41....
-# The dates again:
+# From Peter Ilieve <peter@memex.co.uk> (August 18, 1994):
+# I now have the text of the 7th EC directive on summer time arrangements
+# (94/21/EC), which was approved on 30 May....
+# The major changes from existing practice are that 1995 will be the last year
+# that the UK and Eire finish on a different date from everyone else,
+# and the common end date from 1996 onwards will be the last Sunday in October.
 # Year  Start          End             End (UK & Eire, 1995 only)
 # (rule) (last Sun)    (last Sun)      (4th Sun)
 # 1995 26 March        24 September    22 October
 # 1996 31 March        27 October
 # 1997 30 March        26 October
+#
+# From Peter Ilieve <peter@memex.co.uk> (1994-12-01):
+# The final piece of the legislative jigsaw for summer time in the UK for
+# 1995-97 is now in place.  The Summer Time Order 1994 (SI 1994/2798)
+# came into force on 16 November.  It restates the dates from the EC
+# seventh Summer Time Directive....
 
 # From Peter Ilieve <peter@memex.co.uk> (March 28, 1994):
 # The UK/Eire end date of 22 October [1995] conflicts with your current rule of
@@ -693,13 +713,16 @@ Rule      GB-Eire 1953    1960    -       Oct     Sun>=1  2:00s   0       GMT
 Rule   GB-Eire 1961    1967    -       Oct     Sun>=23 2:00s   0       GMT
 Rule   GB-Eire 1971    only    -       Oct     31      3:00    0       GMT
 Rule   GB-Eire 1972    1980    -       Oct     Sun>=23 2:00s   0       GMT
-# Current rules
+# 1981 on
 Rule   GB-Eire 1981    max     -       Mar     lastSun 1:00s   1:00    BST
-Rule   GB-Eire 1981    max     -       Oct     Sun>=23 1:00s   0       GMT
-# Under the 7th EU proposal, replace the above line with the following three:
-#Rule  GB-Eire 1981    1989    -       Oct     Sun>=23 1:00s   0       GMT
-#Rule  GB-Eire 1990    1995    -       Oct     Sun>=22 1:00s   0       GMT
-#Rule  GB-Eire 1996    max     -       Oct     lastSun 1:00s   0       GMT
+Rule   GB-Eire 1981    1989    -       Oct     Sun>=23 1:00s   0       GMT
+Rule   GB-Eire 1990    1995    -       Oct     Sun>=22 1:00s   0       GMT
+Rule   GB-Eire 1996    max     -       Oct     lastSun 1:00s   0       GMT
+#Rule  GB-Eire 1981    max     -       Mar     lastSun 1:00u   1:00    BST
+#Rule  GB-Eire 1981    1989    -       Oct     Sun>=23 1:00u   0       GMT
+#Rule  GB-Eire 1990    1995    -       Oct     Sun>=22 1:00u   0       GMT
+#Rule  GB-Eire 1996    max     -       Oct     lastSun 1:00u   0       GMT
+# Also see W-Eur, which (starting 1996) differs only in LETTER/S.
 
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Europe/London   -0:01:15 -      LMT     1847 Sep 22
@@ -728,12 +751,19 @@ Zone      Europe/Dublin   -0:25:21 -      LMT     1880 Aug  2
 
 # Continental Europe
 
+# The *-Eur rules now correspond to the European Community (EC).
+# Three rulesets are used because the EC changes at 01:00 UTC, not local time.
+# Older *-Eur rules are for convenience in the tables.
+
+# Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   W-Eur   1800    only    -       Jan      1       0:00   0       -
 Rule   W-Eur   1977    1980    -       Apr     Sun>=1   1:00s  1:00    " DST"
 Rule   W-Eur   1977    only    -       Sep     lastSun  1:00s  0       -
 Rule   W-Eur   1978    only    -       Oct      1       1:00s  0       -
-Rule   W-Eur   1979    max     -       Sep     lastSun  1:00s  0       -
+Rule   W-Eur   1979    1995    -       Sep     lastSun  1:00s  0       -
 Rule   W-Eur   1981    max     -       Mar     lastSun  1:00s  1:00    " DST"
+Rule   W-Eur   1996    max     -       Oct     lastSun  1:00s  0       -
+# Also see GB-Eire, which (starting 1996) differs only in LETTER/S.
 
 Rule   M-Eur   1800    only    -       Jan      1       0:00   0       -
 Rule   M-Eur   1916    only    -       Apr     30      23:00   1:00    " DST"
@@ -755,14 +785,13 @@ Rule      M-Eur   1944    only    -       Oct      2       2:00s  0       -
 Rule   M-Eur   1977    1980    -       Apr     Sun>=1   2:00s  1:00    " DST"
 Rule   M-Eur   1977    only    -       Sep     lastSun  2:00s  0       -
 Rule   M-Eur   1978    only    -       Oct      1       2:00s  0       -
-Rule   M-Eur   1979    max     -       Sep     lastSun  2:00s  0       -
-# Under the 7th EU proposal, replace the above line with the following two:
-#Rule  M-Eur   1979    1995    -       Sep     lastSun  2:00s  0       -
-#Rule  M-Eur   1996    max     -       Oct     lastSun  2:00s  0       -
+Rule   M-Eur   1979    1995    -       Sep     lastSun  2:00s  0       -
 Rule   M-Eur   1981    max     -       Mar     lastSun  2:00s  1:00    " DST"
+Rule   M-Eur   1996    max     -       Oct     lastSun  2:00s  0       -
 
 Rule   E-Eur   1981    max     -       Mar     lastSun  3:00s  1:00    " DST"
-Rule   E-Eur   1981    max     -       Sep     lastSun  3:00s  0       -
+Rule   E-Eur   1981    1995    -       Sep     lastSun  3:00s  0       -
+Rule   E-Eur   1996    max     -       Oct     lastSun  3:00s  0       -
 
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Russia  1880    only    -       Jan      1       0:00   0       -
@@ -830,6 +859,7 @@ Zone        Europe/Tirane   1:19:20 -       LMT     1914
                        1:00    -       MET     1940 Jun 16
                        1:00    Albania MET%s   1985 Mar 31 1:00
                        1:00    W-Eur   MET%s
+#                      This may change to `M-Eur' soon, for EC compatibility.
 
 # Andorra
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
@@ -944,6 +974,7 @@ Zone        Europe/Sofia    1:33:16 -       LMT     1880
                        2:00    -       EET     1979 Mar 31 23:00
                        2:00    Bulg    EET%s   1982 Sep 26  2:00
                        2:00    M-Eur   EET%s
+#                      This may change to `E-Eur' soon, for EC compatibility.
 
 # Croatia
 # They switched from the Julian to the Gregorian calendar on 1918 Mar 18.
@@ -1011,6 +1042,11 @@ Zone America/Thule       -4:35:08 -      LMT     1916 Jul 28
 
 # Estonia
 # They switched from the Julian to the Gregorian calendar on 1918 Feb 15.
+#
+# From Peter Ilieve <peter@memex.co.uk> (1994-10-15):
+# A relative in Tallinn confirms the accuracy of the data for 1989 onwards
+# [through 1994] and gives the legal authority for it,
+# a regulation of the Government of Estonia, No. 111 of 1989....
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Europe/Tallinn  1:39:00 -       LMT     1880
                        1:39    -       LST     1918 Feb
@@ -1022,8 +1058,18 @@ Zone     Europe/Tallinn  1:39:00 -       LMT     1880
                        3:00    Russia  MS%s    1989 Mar 26 2:00s
                        2:00    1:00  "EET DST" 1989 Sep 24 2:00s
                        2:00    M-Eur   EET%s
+#                      This may change to `E-Eur' soon, for EC compatibility.
 
 # Finland
+#
+# From Hannu Strang <chs@apu.fi> (25 Sep 1994 06:03:37 UTC):
+# Well, here in Helsinki we're just changing from summer time to regular one,
+# and it's supposed to change at 4am...
+#
+# From Paul Eggert <eggert@twinsun.com> (25 Sep 1994):
+# Shanks says Finland has switched at 02:00 standard time since 1981.
+# Go with Strang instead.
+#
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Finland 1921    only    -       May     1       0:00    0       -
 Rule   Finland 1942    only    -       Apr     3       0:00    1:00    " DST"
@@ -1032,7 +1078,7 @@ Rule      Finland 1942    only    -       Oct     3       0:00    0       -
 Zone   Europe/Helsinki 1:39:52 -       LMT     1878 May 31
                        1:40    -       HMT     1921 May    # Helsinki Mean Time
                        2:00    Finland EET%s   1981 Mar 29 2:00
-                       2:00    M-Eur   EET%s
+                       2:00    E-Eur   EET%s
 
 # France
 # Shanks seems to use `24:00' ambiguously; we resolve it with Whitman.
@@ -1160,7 +1206,9 @@ Zone      Europe/Athens   1:34:52 -       LMT     1895 Sep 14
                        2:00    Greece  EET%s   1941 Apr 30
                        1:00    Greece  MET%s   1944 Apr  4
                        2:00    Greece  EET%s   1981 Mar 29 2:00
-                       2:00    M-Eur   EET%s
+#                      Greece must change by 1996 for EC compatibility.
+                       2:00    M-Eur   EET%s   1996 # Guess the last minute.
+                       2:00    E-Eur   EET%s
 
 # Hungary
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
@@ -1317,6 +1365,7 @@ Zone      Europe/Riga     1:36:24 -       LMT     1880
                        3:00    Russia  MS%s    1991 Mar 31 2:00s
                        2:00    1:00  "EET DST" 1991 Sep 29 2:00s
                        2:00    M-Eur   EET%s
+#                      This may change to `E-Eur' soon, for EC compatibility.
 
 # Liechtenstein
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
@@ -1338,6 +1387,7 @@ Zone      Europe/Vilnius  1:41:16 -       LMT     1880
                        3:00    Russia  MS%s    1991 Mar 31 2:00s
                        2:00    1:00  "EET DST" 1991 Sep 29 2:00s
                        2:00    M-Eur   EET%s
+#                      This may change to `E-Eur' soon, for EC compatibility.
 
 # Luxembourg
 # Whitman disagrees with most of these dates in minor ways; go with Shanks.
@@ -1410,6 +1460,7 @@ Zone      Europe/Chisinau 1:55:20 -       LMT     1924 May  2
                        3:00    Russia  MS%s    1991 Mar 31 2:00s
                        2:00    1:00  "EET DST" 1991 Sep 29 2:00s
                        2:00    M-Eur   EET%s
+#                      This may change to `E-Eur' soon, for EC compatibility.
 
 # Monaco
 # Shanks gives 0:09 for Paris Mean Time; go with Whitman's more precise 0:09:05.
@@ -1517,6 +1568,7 @@ Zone      Europe/Warsaw   1:24:00 -       LMT     1880
                        1:00    M-Eur   MET%s   1944 Oct
                        1:00    Poland  MET%s   1977 Apr  3 1:00
                        1:00    W-Eur   MET%s
+#                      This may change to `M-Eur' soon, for EC compatibility.
 
 # Portugal
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
@@ -1628,6 +1680,7 @@ Zone Europe/Bucharest     1:44:24 -       LMT     1891 Oct
                        1:44    -       BMT     1931 Jul 24     # Bucharest MT
                        2:00    Romania EET%s   1981 Mar 29 2:00s
                        2:00    M-Eur   EET%s
+#                      This may change to `E-Eur' soon, for EC compatibility.
 
 # Russia
 # From Paul Eggert <eggert@twinsun.com> (May 28, 1994):
@@ -1892,6 +1945,7 @@ Zone      Europe/Istanbul 1:55:52 -       LMT     1880
                        3:00    Turkey  TUR%s   1985 Apr 20
                        2:00    Turkey  EET%s   1986
                        2:00    M-Eur   EET%s
+#                      This may change to `E-Eur' soon, for EC compatibility.
 Link   Europe/Istanbul Asia/Istanbul   # Istanbul is in both continents.
 
 # Ukraine
@@ -1909,6 +1963,7 @@ Zone Europe/Kiev  2:02:04 -       LMT     1880
                        2:00    -       EET     1930 Jun 21
                        3:00    Russia  MS%s    1990 Jul 17
                        2:00    M-Eur   EET%s
+#                      This may change to `E-Eur' soon, for EC compatibility.
 Zone Europe/Simferopol 2:16:24 -       LMT     1880
                        2:08    Russia  LST%s   1919 Jul  1 2:00
                        2:08    Ukraine LST%s   1924 May  2
index 7dc2f2b..d6a1b22 100644 (file)
@@ -1,6 +1,6 @@
 #ifndef lint
 #ifndef NOID
-static char    elsieid[] = "@(#)ialloc.c       8.21";
+static char    elsieid[] = "@(#)ialloc.c       8.24";
 #endif /* !defined NOID */
 #endif /* !defined lint */
 
@@ -21,7 +21,7 @@ char *        icalloc P((int nelem, int elsize));
 char * icatalloc P((char * old, const char * new));
 char * icpyalloc P((const char * string));
 char * imalloc P((int n));
-char * irealloc P((char * pointer, int size));
+void * irealloc P((void * pointer, int size));
 void   ifree P((char * pointer));
 
 char *
@@ -31,11 +31,11 @@ const int   n;
 #ifdef MAL
        register char * result;
 
-       result = malloc((alloc_size_t) nonzero(n));
+       result = malloc((alloc_size_T) nonzero(n));
        return NULLMAL(result) ? NULL : result;
 #endif /* defined MAL */
 #ifndef MAL
-       return malloc((alloc_size_t) nonzero(n));
+       return malloc((alloc_size_T) nonzero(n));
 #endif /* !defined MAL */
 }
 
@@ -46,17 +46,17 @@ int elsize;
 {
        if (nelem == 0 || elsize == 0)
                nelem = elsize = 1;
-       return calloc((alloc_size_t) nelem, (alloc_size_t) elsize);
+       return calloc((alloc_size_T) nelem, (alloc_size_T) elsize);
 }
 
-char *
+void *
 irealloc(pointer, size)
-char * const   pointer;
+void * const   pointer;
 const int      size;
 {
        if (NULLMAL(pointer))
                return imalloc(size);
-       return realloc((genericptr_t) pointer, (alloc_size_t) nonzero(size));
+       return realloc((genericptr_T) pointer, (alloc_size_T) nonzero(size));
 }
 
 char *
index 9cd74b1..40733fd 100644 (file)
@@ -1,4 +1,4 @@
-# @(#)northamerica     7.11
+# @(#)northamerica     7.12
 # also includes Central America and the Caribbean
 
 # This data is by no means authoritative; if you think you know better,
@@ -223,6 +223,8 @@ Link        Pacific/Honolulu        HST
 # I invented the abbreviation SPST for St Pierre Standard Time; SPDT likewise.
 # Corrections are welcome!
 #
+# See the `europe' file for Greenland.
+#
 # See the `africa' file for Zone naming conventions.
 
 
@@ -301,6 +303,39 @@ Link       Pacific/Honolulu        HST
 # East-Saskatchewan kept to avoid problems for folks using that zone by name;
 # plain Saskatchewan added.
 
+# From Alain LaBont<e'> <ALB@immedia.ca> (1994-11-14):
+# I post here the time zone abbreviations standardized in Canada
+# for both English and French in the CAN/CSA-Z234.4-89 standard....
+#
+#      UTC     Standard time   Daylight savings time
+#      offset  French  English French  English
+#      -2:30   -       -       HAT     NDT
+#      -3      -       -       HAA     ADT
+#      -3:30   HNT     NST     -       -
+#      -4      HNA     AST     HAE     EDT
+#      -5      HNE     EST     HAC     CDT
+#      -6      HNC     CST     HAR     MDT
+#      -7      HNR     MST     HAP     PDT
+#      -8      HNP     PST     HAY     YDT
+#      -9      HNY     YST     -       -
+#
+#      HN: Heure Normale       ST: Standard Time
+#      HA: Heure Avanc<e'>e    DT: Daylight saving Time
+#
+#      A: de l'Atlantique      Atlantic
+#      C: du Centre            Central
+#      E: de l'Est             Eastern
+#      M:                      Mountain
+#      N:                      Newfoundland
+#      P: du Pacifique         Pacific
+#      R: des Rocheuses
+#      T: de Terre-Neuve
+#      Y: du Yukon             Yukon
+#
+# From Paul Eggert <eggert@twinsun.com> (1994-11-22):
+# Alas, this sort of thing must be handled by localization software.
+
+
 
 # From Shanks (1991):
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
index 5af259c..8852b83 100644 (file)
@@ -16,7 +16,7 @@
 
 #ifndef lint
 #ifndef NOID
-static char    privatehid[] = "@(#)private.h   7.5";
+static char    privatehid[] = "@(#)private.h   7.10";
 #endif /* !defined NOID */
 #endif /* !defined lint */
 
@@ -45,6 +45,28 @@ static char  privatehid[] = "@(#)private.h   7.5";
 #endif /* !defined void */
 
 /*
+** INITIALIZE
+*/
+
+#ifndef GNUC_or_lint
+#ifdef lint
+#define GNUC_or_lint
+#endif /* defined lint */
+#ifdef __GNUC__
+#define GNUC_or_lint
+#endif /* defined __GNUC__ */
+#endif /* !defined GNUC_or_lint */
+
+#ifndef INITIALIZE
+#ifdef GNUC_or_lint
+#define INITIALIZE(x)  ((x) = 0)
+#endif /* defined GNUC_or_lint */
+#ifndef GNUC_or_lint
+#define INITIALIZE(x)
+#endif /* !defined GNUC_or_lint */
+#endif /* !defined INITIALIZE */
+
+/*
 ** P((args))
 */
 
@@ -53,20 +75,19 @@ static char privatehid[] = "@(#)private.h   7.5";
 #define P(x)   x
 #endif /* defined __STDC__ */
 #ifndef __STDC__
-#define ASTERISK       *
-#define P(x)   ( /ASTERISK x ASTERISK/ )
+#define P(x)   ()
 #endif /* !defined __STDC__ */
 #endif /* !defined P */
 
 /*
-** genericptr_t
+** genericptr_T
 */
 
 #ifdef __STDC__
-typedef void *         genericptr_t;
+typedef void *         genericptr_T;
 #endif /* defined __STDC__ */
 #ifndef __STDC__
-typedef char *         genericptr_t;
+typedef char *         genericptr_T;
 #endif /* !defined __STDC__ */
 
 #include "sys/types.h" /* for time_t */
@@ -111,29 +132,29 @@ extern int        unlink P((const char * filename));
 
 #ifdef __STDC__
 
-#define alloc_size_t   size_t
-#define qsort_size_t   size_t
-#define fwrite_size_t  size_t
+#define alloc_size_T   size_t
+#define qsort_size_T   size_t
+#define fwrite_size_T  size_t
 
 #endif /* defined __STDC__ */
 #ifndef __STDC__
 
-#ifndef alloc_size_t
-#define alloc_size_t   unsigned
-#endif /* !defined alloc_size_t */
+#ifndef alloc_size_T
+#define alloc_size_T   unsigned
+#endif /* !defined alloc_size_T */
 
-#ifndef qsort_size_t
+#ifndef qsort_size_T
 #ifdef USG
-#define qsort_size_t   unsigned
+#define qsort_size_T   unsigned
 #endif /* defined USG */
 #ifndef USG
-#define qsort_size_t   int
+#define qsort_size_T   int
 #endif /* !defined USG */
-#endif /* !defined qsort_size_t */
+#endif /* !defined qsort_size_T */
 
-#ifndef fwrite_size_t
-#define fwrite_size_t  int
-#endif /* !defined fwrite_size_t */
+#ifndef fwrite_size_T
+#define fwrite_size_T  int
+#endif /* !defined fwrite_size_T */
 
 #ifndef USG
 extern char *          sprintf P((char * buf, const char * format, ...));
@@ -146,14 +167,14 @@ extern char *             sprintf P((char * buf, const char * format, ...));
 */
 
 extern char *          getenv P((const char * name));
-extern genericptr_t    malloc P((alloc_size_t size));
-extern genericptr_t    calloc P((alloc_size_t nelem, alloc_size_t elsize));
-extern genericptr_t    realloc P((genericptr_t oldptr, alloc_size_t newsize));
+extern genericptr_T    malloc P((alloc_size_T size));
+extern genericptr_T    calloc P((alloc_size_T nelem, alloc_size_T elsize));
+extern genericptr_T    realloc P((genericptr_T oldptr, alloc_size_T newsize));
 
 #ifdef USG
 extern void            exit P((int s));
-extern void            qsort P((genericptr_t base, qsort_size_t nelem,
-                               qsort_size_t elsize, int (*comp)()));
+extern void            qsort P((genericptr_T base, qsort_size_T nelem,
+                               qsort_size_T elsize, int (*comp)()));
 extern void            perror P((const char * string));
 extern void            free P((char * buf));
 #endif /* defined USG */
@@ -177,8 +198,12 @@ extern void                free P((char * buf));
        ((sizeof(type) * CHAR_BIT - 1) * 302 / 1000 + 2)
 #endif /* !defined INT_STRLEN_MAXIMUM */
 
+#ifndef LOCALE_HOME
+#define LOCALE_HOME    "/usr/lib/locale"
+#endif /* !defined LOCALE_HOME */
+
 /*
-** UNIX is a registered trademark of AT&T.
+** UNIX was a registered trademark of UNIX System Laboratories in 1993.
 ** VAX is a trademark of Digital Equipment Corporation.
 */
 
index 4d9616d..404c6b2 100644 (file)
@@ -1,6 +1,6 @@
 #ifndef lint
 #ifndef NOID
-static char    elsieid[] = "@(#)scheck.c       8.11";
+static char    elsieid[] = "@(#)scheck.c       8.12";
 #endif /* !defined lint */
 #endif /* !defined NOID */
 
@@ -14,7 +14,7 @@ extern void   ifree P((char * p));
 char *
 scheck(string, format)
 const char * const     string;
-const char * const     format;
+char * const           format;
 {
        register char *         fbuf;
        register const char *   fp;
@@ -22,12 +22,12 @@ const char * const  format;
        register int            c;
        register char *         result;
        char                    dummy;
-       static char             nada[1];
+       static char             nada;
 
-       result = nada;
+       result = &nada;
        if (string == NULL || format == NULL)
                return result;
-       fbuf = imalloc(2 * strlen(format) + 4);
+       fbuf = imalloc((int) (2 * strlen(format) + 4));
        if (fbuf == NULL)
                return result;
        fp = format;
index 1e44d4a..d35df33 100644 (file)
@@ -1,6 +1,6 @@
 #ifndef lint
 #ifndef NOID
-static char    elsieid[] = "@(#)zdump.c        7.10";
+static char    elsieid[] = "@(#)zdump.c        7.12";
 #endif /* !defined NOID */
 #endif /* !defined lint */
 
@@ -67,13 +67,30 @@ static char elsieid[] = "@(#)zdump.c        7.10";
 #define isleap(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0)
 #endif /* !defined isleap */
 
+#ifndef GNUC_or_lint
+#ifdef lint
+#define GNUC_or_lint
+#endif /* defined lint */
+#ifdef __GNUC__
+#define GNUC_or_lint
+#endif /* defined __GNUC__ */
+#endif /* !defined GNUC_or_lint */
+
+#ifndef INITIALIZE
+#ifdef GNUC_or_lint
+#define INITIALIZE(x)  ((x) = 0)
+#endif /* defined GNUC_or_lint */
+#ifndef GNUC_or_lint
+#define INITIALIZE(x)
+#endif /* !defined GNUC_or_lint */
+#endif /* !defined INITIALIZE */
+
 extern char ** environ;
 extern int     getopt();
 extern char *  optarg;
 extern int     optind;
 extern time_t  time();
 extern char *  tzname[2];
-extern void    tzset();
 
 #ifdef USG
 extern void    exit();
@@ -92,16 +109,18 @@ main(argc, argv)
 int    argc;
 char * argv[];
 {
-       register int    i, c;
-       register int    vflag;
-       register char * cutoff;
-       register int    cutyear;
-       register long   cuttime;
-       time_t          now;
-       time_t          t, newt;
-       time_t          hibit;
-       struct tm       tm, newtm;
-
+       register int            i, c;
+       register int            vflag;
+       register char *         cutoff;
+       register int            cutyear;
+       register long           cuttime;
+       char **                 fakeenv;
+       time_t                  now;
+       time_t                  t, newt;
+       time_t                  hibit;
+       struct tm               tm, newtm;
+
+       INITIALIZE(cuttime);
        progname = argv[0];
        vflag = 0;
        cutoff = NULL;
@@ -132,25 +151,29 @@ char *    argv[];
                        longest = strlen(argv[i]);
        for (hibit = 1; (hibit << 1) != 0; hibit <<= 1)
                continue;
-       for (i = optind; i < argc; ++i) {
-               register char **        saveenv;
-               static char             buf[MAX_STRING_LENGTH];
-               char *                  fakeenv[2];
-
-               if (strlen(argv[i]) + 4 > sizeof buf) {
-                       (void) fflush(stdout);
-                       (void) fprintf(stderr, "%s: argument too long -- %s\n",
-                               progname, argv[i]);
-                       (void) exit(EXIT_FAILURE);
+       {
+               register int    from, to;
+
+               for (i = 0;  environ[i] != NULL;  ++i)
+                       continue;
+               fakeenv = (char **) malloc((i + 2) * sizeof *fakeenv);
+               if (fakeenv == NULL ||
+                       (fakeenv[0] = (char *) malloc(longest + 4)) == NULL) {
+                               (void) perror(progname);
+                               (void) exit(EXIT_FAILURE);
                }
-               (void) strcpy(buf, "TZ=");
-               (void) strcat(buf, argv[i]);
-               fakeenv[0] = buf;
-               fakeenv[1] = NULL;
-               saveenv = environ;
+               to = 0;
+               (void) strcpy(fakeenv[to++], "TZ=");
+               for (from = 0; environ[from] != NULL; ++from)
+                       if (strncmp(environ[from], "TZ=", 3) != 0)
+                               fakeenv[to++] = environ[from];
+               fakeenv[to] = NULL;
                environ = fakeenv;
-               (void) tzset();
-               environ = saveenv;
+       }
+       for (i = optind; i < argc; ++i) {
+               static char     buf[MAX_STRING_LENGTH];
+
+               (void) strcpy(&fakeenv[0][3], argv[i]);
                show(argv[i], now, FALSE);
                if (!vflag)
                        continue;
@@ -268,14 +291,15 @@ struct tm *       oldp;
        return result;
 }
 
+extern struct tm *     localtime();
+
 static void
 show(zone, t, v)
 char * zone;
 time_t t;
 int    v;
 {
-       struct tm *             tmp;
-       extern struct tm *      localtime();
+       struct tm *     tmp;
 
        (void) printf("%-*s  ", longest, zone);
        if (v)
@@ -298,10 +322,10 @@ abbr(tmp)
 struct tm *    tmp;
 {
        register char * result;
-       static char     nada[1];
+       static char     nada;
 
        if (tmp->tm_isdst != 0 && tmp->tm_isdst != 1)
-               return nada;
+               return &nada;
        result = tzname[tmp->tm_isdst];
-       return (result == NULL) ? nada : result;
+       return (result == NULL) ? &nada : result;
 }
index a0dc5f6..73ea468 100644 (file)
@@ -1,6 +1,6 @@
 #ifndef lint
 #ifndef NOID
-static char    elsieid[] = "@(#)zic.c  7.22";
+static char    elsieid[] = "@(#)zic.c  7.28";
 #endif /* !defined NOID */
 #endif /* !defined lint */
 
@@ -25,6 +25,8 @@ struct rule {
        long            r_tod;          /* time from midnight */
        int             r_todisstd;     /* above is standard time if TRUE */
                                        /* or wall clock time if FALSE */
+       int             r_todisuniv;    /* above is universal time if TRUE */
+                                       /* or local time if FALSE */
        long            r_stdoff;       /* offset from standard time */
        const char *    r_abbrvar;      /* variable part of abbreviation */
 
@@ -64,7 +66,7 @@ extern char * icatalloc P((char * old, const char * new));
 extern char *  icpyalloc P((const char * string));
 extern void    ifree P((char * p));
 extern char *  imalloc P((int n));
-extern char *  irealloc P((char * old, int n));
+extern void *  irealloc P((void * old, int n));
 extern int     link P((const char * fromname, const char * toname));
 extern char *  optarg;
 extern int     optind;
@@ -103,12 +105,12 @@ static void       newabbr P((const char * abbr));
 static long    oadd P((long t1, long t2));
 static void    outzone P((const struct zone * zp, int ntzones));
 static void    puttzcode P((long code, FILE * fp));
-static int     rcomp P((const genericptr_t leftp, const genericptr_t rightp));
+static int     rcomp P((const genericptr_T leftp, const genericptr_T rightp));
 static time_t  rpytime P((const struct rule * rp, int wantedy));
 static void    rulesub P((struct rule * rp,
-                       char * loyearp, char * hiyearp,
-                       char * typep, char * monthp,
-                       char * dayp, char * timep));
+                       const char * loyearp, const char * hiyearp,
+                       const char * typep, const char * monthp,
+                       const char * dayp, const char * timep));
 static void    setboundaries P((void));
 static time_t  tadd P((time_t t1, long t2));
 static void    usage P((void));
@@ -340,9 +342,9 @@ char * const        ptr;
 }
 
 #define emalloc(size)          memcheck(imalloc(size))
-#define erealloc(ptr, size)    memcheck(irealloc(ptr, size))
+#define erealloc(ptr, size)    memcheck(irealloc((ptr), (size)))
 #define ecpyalloc(ptr)         memcheck(icpyalloc(ptr))
-#define ecatalloc(oldp, newp)  memcheck(icatalloc(oldp, newp))
+#define ecatalloc(oldp, newp)  memcheck(icatalloc((oldp), (newp)))
 
 /*
 ** Error handling.
@@ -388,7 +390,7 @@ const char * const  string;
 }
 
 static void
-usage()
+usage P((void))
 {
        (void) fprintf(stderr,
 "%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d directory ] \n\
@@ -491,9 +493,6 @@ char *      argv[];
                adjleap();
        }
 
-       zones = (struct zone *) emalloc(0);
-       rules = (struct rule *) emalloc(0);
-       links = (struct link *) emalloc(0);
        for (i = optind; i < argc; ++i)
                infile(argv[i]);
        if (errors)
@@ -528,14 +527,14 @@ const char * const        tofile;
        register char * toname;
 
        if (fromfile[0] == '/')
-               fromname = fromfile;
+               fromname = ecpyalloc(fromfile);
        else {
                fromname = ecpyalloc(directory);
                fromname = ecatalloc(fromname, "/");
                fromname = ecatalloc(fromname, fromfile);
        }
        if (tofile[0] == '/')
-               toname = tofile;
+               toname = ecpyalloc(tofile);
        else {
                toname = ecpyalloc(directory);
                toname = ecatalloc(toname, "/");
@@ -557,14 +556,12 @@ const char * const        tofile;
                        (void) exit(EXIT_FAILURE);
                }
        }
-       if (fromname != fromfile)
-               ifree(fromname);
-       if (toname != tofile)
-               ifree(toname);
+       ifree(fromname);
+       ifree(toname);
 }
 
 static void
-setboundaries()
+setboundaries P((void))
 {
        register time_t bit;
        register int bii;
@@ -619,15 +616,15 @@ const char * const        name;
 
 static int
 rcomp(cp1, cp2)
-const genericptr_t     cp1;
-const genericptr_t     cp2;
+const genericptr_T     cp1;
+const genericptr_T     cp2;
 {
        return strcmp(((struct rule *) cp1)->r_name,
                ((struct rule *) cp2)->r_name);
 }
 
 static void
-associate()
+associate P((void))
 {
        register struct zone *  zp;
        register struct rule *  rp;
@@ -635,9 +632,9 @@ associate()
        register int            i;
 
        if (nrules != 0)
-               (void) qsort((genericptr_t) rules,
-                       (qsort_size_t) nrules,
-                       (qsort_size_t) sizeof *rules, rcomp);
+               (void) qsort((genericptr_T) rules,
+                       (qsort_size_T) nrules,
+                       (qsort_size_T) sizeof *rules, rcomp);
        for (i = 0; i < nzones; ++i) {
                zp = &zones[i];
                zp->z_rules = NULL;
@@ -711,10 +708,10 @@ const char *      name;
                fields = getfields(buf);
                nfields = 0;
                while (fields[nfields] != NULL) {
-                       static char     nada[1];
+                       static char     nada;
 
                        if (ciequal(fields[nfields], "-"))
-                               fields[nfields] = nada;
+                               fields[nfields] = &nada;
                        ++nfields;
                }
                if (nfields == 0) {
@@ -834,7 +831,7 @@ const int           nfields;
                fields[RF_MONTH], fields[RF_DAY], fields[RF_TOD]);
        r.r_name = ecpyalloc(fields[RF_NAME]);
        r.r_abbrvar = ecpyalloc(fields[RF_ABBRVAR]);
-       rules = (struct rule *) erealloc((char *) rules,
+       rules = (struct rule *) (void *) erealloc((char *) rules,
                (int) ((nrules + 1) * sizeof *rules));
        rules[nrules++] = r;
 }
@@ -852,7 +849,7 @@ const int           nfields;
                return FALSE;
        }
        if (strcmp(fields[ZF_NAME], TZDEFAULT) == 0 && lcltime != NULL) {
-               buf = erealloc(buf, 132 + strlen(TZDEFAULT));
+               buf = erealloc(buf, (int) (132 + strlen(TZDEFAULT)));
                (void) sprintf(buf,
 "\"Zone %s\" line and -l option are mutually exclusive",
                        TZDEFAULT);
@@ -860,7 +857,7 @@ const int           nfields;
                return FALSE;
        }
        if (strcmp(fields[ZF_NAME], TZDEFRULES) == 0 && psxrules != NULL) {
-               buf = erealloc(buf, 132 + strlen(TZDEFRULES));
+               buf = erealloc(buf, (int) (132 + strlen(TZDEFRULES)));
                (void) sprintf(buf,
 "\"Zone %s\" line and -p option are mutually exclusive",
                        TZDEFRULES);
@@ -870,9 +867,9 @@ const int           nfields;
        for (i = 0; i < nzones; ++i)
                if (zones[i].z_name != NULL &&
                        strcmp(zones[i].z_name, fields[ZF_NAME]) == 0) {
-                               buf = erealloc(buf, 132 +
+                               buf = erealloc(buf, (int) (132 +
                                        strlen(fields[ZF_NAME]) +
-                                       strlen(zones[i].z_filename));
+                                       strlen(zones[i].z_filename)));
                                (void) sprintf(buf,
 "duplicate zone name %s (file \"%s\", line %d)",
                                        fields[ZF_NAME],
@@ -963,7 +960,7 @@ error("Zone continuation line end time is not after end time of previous line");
                                return FALSE;
                }
        }
-       zones = (struct zone *) erealloc((char *) zones,
+       zones = (struct zone *) (void *) erealloc((char *) zones,
                (int) ((nzones + 1) * sizeof *zones));
        zones[nzones++] = z;
        /*
@@ -1092,7 +1089,7 @@ const int         nfields;
        l.l_linenum = linenum;
        l.l_from = ecpyalloc(fields[LF_FROM]);
        l.l_to = ecpyalloc(fields[LF_TO]);
-       links = (struct link *) erealloc((char *) links,
+       links = (struct link *) (void *) erealloc((char *) links,
                (int) ((nlinks + 1) * sizeof *links));
        links[nlinks++] = l;
 }
@@ -1100,15 +1097,17 @@ const int               nfields;
 static void
 rulesub(rp, loyearp, hiyearp, typep, monthp, dayp, timep)
 register struct rule * const   rp;
-char * const                   loyearp;
-char * const                   hiyearp;
-char * const                   typep;
-char * const                   monthp;
-char * const                   dayp;
-char * const                   timep;
+const char * const             loyearp;
+const char * const             hiyearp;
+const char * const             typep;
+const char * const             monthp;
+const char * const             dayp;
+const char * const             timep;
 {
-       register struct lookup const *  lp;
-       register char *                 cp;
+       register const struct lookup *  lp;
+       register const char *           cp;
+       register char *                 dp;
+       register char *                 ep;
 
        if ((lp = byword(monthp, mon_names)) == NULL) {
                error("invalid month name");
@@ -1116,21 +1115,31 @@ char * const                    timep;
        }
        rp->r_month = lp->l_value;
        rp->r_todisstd = FALSE;
-       cp = timep;
-       if (*cp != '\0') {
-               cp += strlen(cp) - 1;
-               switch (lowerit(*cp)) {
-                       case 's':
+       rp->r_todisuniv = FALSE;
+       dp = ecpyalloc(timep);
+       if (*dp != '\0') {
+               ep = dp + strlen(dp) - 1;
+               switch (lowerit(*ep)) {
+                       case 's':       /* Standard */
                                rp->r_todisstd = TRUE;
-                               *cp = '\0';
+                               rp->r_todisuniv = FALSE;
+                               *ep = '\0';
                                break;
-                       case 'w':
+                       case 'w':       /* Wall */
                                rp->r_todisstd = FALSE;
-                               *cp = '\0';
+                               rp->r_todisuniv = FALSE;
+                               *ep = '\0';
+                       case 'g':       /* Greenwich */
+                       case 'u':       /* Universal */
+                       case 'z':       /* Zulu */
+                               rp->r_todisstd = TRUE;
+                               rp->r_todisuniv = TRUE;
+                               *ep = '\0';
                                break;
                }
        }
-       rp->r_tod = gethms(timep, "invalid time of day", FALSE);
+       rp->r_tod = gethms(dp, "invalid time of day", FALSE);
+       ifree(dp);
        /*
        ** Year work.
        */
@@ -1192,38 +1201,43 @@ char * const                    timep;
        **      Sun<=20
        **      Sun>=7
        */
-       if ((lp = byword(dayp, lasts)) != NULL) {
+       dp = ecpyalloc(dayp);
+       if ((lp = byword(dp, lasts)) != NULL) {
                rp->r_dycode = DC_DOWLEQ;
                rp->r_wday = lp->l_value;
                rp->r_dayofmonth = len_months[1][rp->r_month];
        } else {
-               if ((cp = strchr(dayp, '<')) != 0)
+               if ((ep = strchr(dp, '<')) != 0)
                        rp->r_dycode = DC_DOWLEQ;
-               else if ((cp = strchr(dayp, '>')) != 0)
+               else if ((ep = strchr(dp, '>')) != 0)
                        rp->r_dycode = DC_DOWGEQ;
                else {
-                       cp = dayp;
+                       ep = dp;
                        rp->r_dycode = DC_DOM;
                }
                if (rp->r_dycode != DC_DOM) {
-                       *cp++ = 0;
-                       if (*cp++ != '=') {
+                       *ep++ = 0;
+                       if (*ep++ != '=') {
                                error("invalid day of month");
+                               ifree(dp);
                                return;
                        }
-                       if ((lp = byword(dayp, wday_names)) == NULL) {
+                       if ((lp = byword(dp, wday_names)) == NULL) {
                                error("invalid weekday name");
+                               ifree(dp);
                                return;
                        }
                        rp->r_wday = lp->l_value;
                }
-               if (sscanf(cp, scheck(cp, "%d"), &rp->r_dayofmonth) != 1 ||
+               if (sscanf(ep, scheck(ep, "%d"), &rp->r_dayofmonth) != 1 ||
                        rp->r_dayofmonth <= 0 ||
                        (rp->r_dayofmonth > len_months[1][rp->r_month])) {
                                error("invalid day of month");
+                               ifree(dp);
                                return;
                }
        }
+       ifree(dp);
 }
 
 static void
@@ -1246,9 +1260,9 @@ FILE * const      fp;
        char    buf[4];
 
        convert(val, buf);
-       (void) fwrite((genericptr_t) buf,
-               (fwrite_size_t) sizeof buf,
-               (fwrite_size_t) 1, fp);
+       (void) fwrite((genericptr_T) buf,
+               (fwrite_size_T) sizeof buf,
+               (fwrite_size_T) 1, fp);
 }
 
 static void
@@ -1261,7 +1275,7 @@ const char * const        name;
        static struct tzhead    tzh;
 
        fullname = erealloc(fullname,
-               strlen(directory) + 1 + strlen(name) + 1);
+               (int) (strlen(directory) + 1 + strlen(name) + 1));
        (void) sprintf(fullname, "%s/%s", directory, name);
        if ((fp = fopen(fullname, "wb")) == NULL) {
                if (mkdirs(fullname) != 0)
@@ -1277,9 +1291,9 @@ const char * const        name;
        convert(eitol(timecnt), tzh.tzh_timecnt);
        convert(eitol(typecnt), tzh.tzh_typecnt);
        convert(eitol(charcnt), tzh.tzh_charcnt);
-       (void) fwrite((genericptr_t) &tzh,
-               (fwrite_size_t) sizeof tzh,
-               (fwrite_size_t) 1, fp);
+       (void) fwrite((genericptr_T) &tzh,
+               (fwrite_size_T) sizeof tzh,
+               (fwrite_size_T) 1, fp);
        for (i = 0; i < timecnt; ++i) {
                j = leapcnt;
                while (--j >= 0)
@@ -1290,18 +1304,18 @@ const char * const      name;
                puttzcode((long) ats[i], fp);
        }
        if (timecnt > 0)
-               (void) fwrite((genericptr_t) types,
-                       (fwrite_size_t) sizeof types[0],
-                       (fwrite_size_t) timecnt, fp);
+               (void) fwrite((genericptr_T) types,
+                       (fwrite_size_T) sizeof types[0],
+                       (fwrite_size_T) timecnt, fp);
        for (i = 0; i < typecnt; ++i) {
                puttzcode((long) gmtoffs[i], fp);
                (void) putc(isdsts[i], fp);
                (void) putc(abbrinds[i], fp);
        }
        if (charcnt != 0)
-               (void) fwrite((genericptr_t) chars,
-                       (fwrite_size_t) sizeof chars[0],
-                       (fwrite_size_t) charcnt, fp);
+               (void) fwrite((genericptr_T) chars,
+                       (fwrite_size_T) sizeof chars[0],
+                       (fwrite_size_T) charcnt, fp);
        for (i = 0; i < leapcnt; ++i) {
                if (roll[i]) {
                        if (timecnt == 0 || trans[i] < ats[0]) {
@@ -1349,6 +1363,9 @@ const int                 zonecount;
        register int                    type;
        char                            startbuf[BUFSIZ];
 
+       INITIALIZE(untiltime);
+       INITIALIZE(starttime);
+       INITIALIZE(startoff);
        /*
        ** Now. . .finally. . .generate some useful data!
        */
@@ -1408,14 +1425,17 @@ const int                       zonecount;
                                register long   offset;
                                char            buf[BUFSIZ];
 
+                               INITIALIZE(ktime);
                                if (useuntil) {
                                        /*
                                        ** Turn untiltime into GMT
                                        ** assuming the current gmtoff and
                                        ** stdoff values.
                                        */
-                                       untiltime = tadd(zp->z_untiltime,
-                                               -gmtoff);
+                                       untiltime = zp->z_untiltime;
+                                       if (!zp->z_untilrule.r_todisuniv)
+                                               untiltime = tadd(untiltime,
+                                                       -gmtoff);
                                        if (!zp->z_untilrule.r_todisstd)
                                                untiltime = tadd(untiltime,
                                                        -stdoff);
@@ -1434,7 +1454,7 @@ const int                 zonecount;
                                                continue;
                                        eats(zp->z_filename, zp->z_linenum,
                                                rp->r_filename, rp->r_linenum);
-                                       offset = gmtoff;
+                                       offset = rp->r_todisuniv ? 0 : gmtoff;
                                        if (!rp->r_todisstd)
                                                offset = oadd(offset, stdoff);
                                        jtime = rp->r_temp;
@@ -1600,7 +1620,7 @@ int               count;
 }
 
 static void
-adjleap()
+adjleap P((void))
 {
        register int    i;
        register long   last = 0;
@@ -1624,11 +1644,7 @@ const char * const       type;
 
        if (type == NULL || *type == '\0')
                return TRUE;
-       if (strcmp(type, "uspres") == 0)
-               return (year % 4) == 0;
-       if (strcmp(type, "nonpres") == 0)
-               return (year % 4) != 0;
-       buf = erealloc(buf, 132 + strlen(yitcommand) + strlen(type));
+       buf = erealloc(buf, (int) (132 + strlen(yitcommand) + strlen(type)));
        (void) sprintf(buf, "%s %d %s", yitcommand, year, type);
        result = system(buf);
        if (result == 0)
@@ -1713,7 +1729,8 @@ register char *   cp;
 
        if (cp == NULL)
                return NULL;
-       array = (char **) emalloc((int) ((strlen(cp) + 1) * sizeof *array));
+       array = (char **) (void *)
+               emalloc((int) ((strlen(cp) + 1) * sizeof *array));
        nsubs = 0;
        for ( ; ; ) {
                while (isascii(*cp) && isspace(*cp))
@@ -1935,5 +1952,5 @@ const int i;
 }
 
 /*
-** UNIX is a registered trademark of AT&T.
+** UNIX was a registered trademark of UNIX System Laboratories in 1993.
 */