about summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1996-09-10 02:00:15 +0000
committerUlrich Drepper <drepper@redhat.com>1996-09-10 02:00:15 +0000
commit569c558c880779d33c6642662d1aa57dff697244 (patch)
tree0e0cebd3aa3c32f9f236e8cc97bd534c9130934c
parentc2bb8cabc58851b00d43c15ed4c37ac393a3465b (diff)
downloadglibc-569c558c880779d33c6642662d1aa57dff697244.tar.gz
glibc-569c558c880779d33c6642662d1aa57dff697244.tar.xz
glibc-569c558c880779d33c6642662d1aa57dff697244.zip
update from main archive 960909 cvs/libc-960910
Mon Sep  9 20:31:27 1996  Ulrich Drepper  <drepper@cygnus.com>

	* version.c (banner): Report to bug-glibc@prep not @gnu.
	Reported by Andreas Jaeger.

	* libio/stdio.h [!__USE_REENTRANT]: Don't define getc as
 	_IO_getc_unlocked.
	[__USE_REENTRANT]: Don't define

Mon Sep  9 15:59:32 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/i386/strrchr.c: Fix bug where NUL byte is not recognized
	when it is the third byte in the string.  Reported by
	NIIBE Yutaka.
	* string/tester.c: Add tests for above bug to strlen, strchr, and
	strrchr tests.

Fri Sep  6 21:23:33 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/fpu/e_acos.c: Deansideclized.  Include
	"math_private.h" to get prototype.
	* sysdeps/m68k/fpu/e_fmod.c: Likewise.
	* sysdeps/m68k/fpu/k_cos.c: Likewise.
	* sysdeps/m68k/fpu/k_sin.c: Likewise.
	* sysdeps/m68k/fpu/k_tan.c: Likewise.

	* sysdeps/m68k/fpu/k_sin.c: Remove uneeded indirection of
	__m81_u.
	* sysdeps/m68k/fpu/k_tan.c: Likewise.

Sun Sep  1 18:01:35 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/fpu/__math.h: Check for __NO_M81_MATH_INLINES
	instead of __NO_MATH_INLINES.
	(__M81_MATH_INLINES): Renamed from __MATH_INLINES.
	* sysdeps/m68k/fpu/e_acos.c: Define __NO_M81_MATH_INLINES.
	* sysdeps/m68k/fpu/e_fmod.c: Likewise.
	* sysdeps/m68k/fpu/k_cos.c: Likewise.
	* sysdeps/m68k/fpu/k_sin.c: Likewise.
	* sysdeps/m68k/fpu/k_tan.c: Likewise.
	* sysdeps/m68k/fpu/s_atan.c: Likewise.
	* sysdeps/m68k/fpu/s_frexp.c: Likewise.
	* sysdeps/m68k/fpu/s_ilogb.c: Likewise.
	* sysdeps/m68k/fpu/s_isinf.c: Likewise.
	* sysdeps/m68k/fpu/s_ldexp.c: Likewise.
	* sysdeps/m68k/fpu/s_modf.c: Likewise.
	* sysdeps/m68k/fpu/k_cos.c: Use inline version of __cos.
	* sysdeps/m68k/fpu/k_sin.c: Likewise.
	* sysdeps/m68k/fpu/k_tan.c: Likewise.

Mon Sep  9 12:55:14 1996  Ulrich Drepper  <drepper@cygnus.com>

	* nss/nss_files/files-parse.c (INT_FIELD_MAYBE_NULL): Check for
	available character before converting number and return with
	error if none is available.

Fri Sep  6 22:09:08 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/init-first.h: New file, generic
	implementation for architectures where parameters are passed on
	stack.
	* sysdeps/unix/sysv/linux/m68k/init-first.h: Removed.
	* sysdeps/unix/sysv/linux/i386/init-first.h: Removed.

Fri Sep  6 22:05:32 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* configure.in: Remove unneeded sysnames frobbing.

Mon Sep  9 05:29:09 1996  Ulrich Drepper  <drepper@cygnus.com>

	* time/zic.c: Update from ADO 96l.
	* time/africa: Update from ADO 96k.
	* time/antarctica: Likewise.
	* time/asia: Likewise.
	* time/australia: Likewise.
	* time/europe: Likewise.
	* time/northamerica: Likewise.
	* time/southamerica: Likewise.

Mon Sep  9 05:03:47 1996  NIIBE Yutaka  <gniibe@mri.co.jp>

	* sysdeps/unix/sysv/linux/i386/init-first.h: Work around buggy
	gcc <= 2.7.2.1 which optimizes away address operations on weak
	objects.

	* nss/nss_files/files-parse.c (INT_FIELD_MAYBE_NULL): New macro.
	Like INT_FIELD but also accept non-existing field.
	* shadow/sgetspent_r.c (LINE_PARSER): Use INT_FIELD_MAYBE_NULL
	for last four fields.
	* shadow/putspent.c (putspent): Print `:' after numeric value.

Mon Sep  9 02:42:48 1996  Richard Henderson  <rth@tamu.edu>

	* libio/stdio.h (BUFSIZ): Define using _IO_BUFSIZ.

Sun Sep  8 16:43:56 1996  Ulrich Drepper  <drepper@cygnus.com>

	* Make-dist: Filter out $(add-ons) from $(subdirs).
	Don't distribute TAGS files.
	($(tardir).tar): Remove dist.tar when all is done.
	* manual/Makefile (distribute): Add libc.info*.
	* libio/Makefile (distribute): Add Banner.
	* inet/Makefile (headers): Add netinet/tcp.h.

	* resolv/Makefile (libresolv-routines): Add getnetnamadr.

	* crypt-README: Removed.
	* gnu-stabs.h: Removed.

	* sysdeps/alpha/copysign.S: Renamed to...
	* sysdeps/alpha/s_copysign.S: ...this.
	* sysdeps/alpha/fabs.S: Renamed to...
	* sysdeps/alpha/s_fabs.S: ...this.

	* sysdeps/m68k/isinfl.c: Renamed to...
	* sysdeps/m68k/s_isinfl.c: ...this.
	* sysdeps/m68k/isnanl.c: Renamed to...
	* sysdeps/m68k/s_isnanl.c: ...this.

	* sysdeps/sparc/sqrt.c: Renamed to...
	* sysdeps/sparc/e_sqrt.c: ...this.  Function name now is
	__ieee754_sqrt.

	* sysdeps/generic/get_str.c: Removed.

	* sysdeps/ieee754/cbrt.c: Removed.
	* sysdeps/ieee754/drem.c: Removed.
	* sysdeps/ieee754/logb.c: Removed.
	* sysdeps/ieee754/sqrt.c: Removed.

	* sysdeps/stub/cbrt.c: Removed.
	* sysdeps/stub/cos.c: Removed.
	* sysdeps/stub/drem.c: Removed.
	* sysdeps/stub/isinf.c: Removed.
	* sysdeps/stub/isinfl.c: Removed.
	* sysdeps/stub/isnanl.c: Removed.
	* sysdeps/stub/logb.c: Removed.
	* sysdeps/stub/sin.c: Removed.
	* sysdeps/stub/sqrt.c: Removed.

	* sysdeps/tahoe/log10.c: Removed.

	* sysdeps/vax/index.s: Removed.
	* sysdeps/vax/rindex.s: Removed.
	* sysdeps/vax/bcmp.s: Removed.
	* sysdeps/vax/log10.c: Removed.
	* sysdeps/vax/infnan.c: Removed.
	* sysdeps/vax/Dist: Add fl.h.

	* sysdeps/unix/sysv/linux/alpha/Dist: Add llseek.S.

	* inet/rcmd.c (rcmd): Make messages more uniform.

Sun Sep  8 14:15:42 1996  Ulrich Drepper  <drepper@cygnus.com>

	* po/de.po: Update.
	* po/es.po: Update.
	* po/ko.po: Update.
	* po/pl.po: New file.
	* po/nl.po: New file.

	take care for a possible clash.  Nobody will name the domain
-rw-r--r--ChangeLog163
-rw-r--r--Make-dist9
-rw-r--r--README4
-rwxr-xr-xconfigure28
-rw-r--r--configure.in4
-rw-r--r--crypt-README14
-rw-r--r--gnu-stabs.h75
-rw-r--r--inet/Makefile2
-rw-r--r--inet/rcmd.c2
-rw-r--r--libio/Makefile2
-rw-r--r--libio/stdio.h27
-rw-r--r--manual/Makefile2
-rw-r--r--nss/nss_files/files-parse.c18
-rw-r--r--resolv/Makefile6
-rw-r--r--shadow/putspent.c20
-rw-r--r--shadow/sgetspent_r.c19
-rw-r--r--string/tester.c42
-rw-r--r--sysdeps/alpha/s_copysign.S (renamed from sysdeps/alpha/copysign.S)0
-rw-r--r--sysdeps/alpha/s_fabs.S (renamed from sysdeps/alpha/fabs.S)5
-rw-r--r--sysdeps/generic/get_str.c213
-rw-r--r--sysdeps/generic/prof-freq.c59
-rw-r--r--sysdeps/i386/strrchr.S12
-rw-r--r--sysdeps/ieee754/cbrt.c120
-rw-r--r--sysdeps/ieee754/drem.c107
-rw-r--r--sysdeps/ieee754/logb.c48
-rw-r--r--sysdeps/ieee754/sqrt.c120
-rw-r--r--sysdeps/m68k/fpu/__math.h4
-rw-r--r--sysdeps/m68k/fpu/e_acos.c6
-rw-r--r--sysdeps/m68k/fpu/e_fmod.c7
-rw-r--r--sysdeps/m68k/fpu/k_cos.c2
-rw-r--r--sysdeps/m68k/fpu/k_sin.c4
-rw-r--r--sysdeps/m68k/fpu/k_tan.c6
-rw-r--r--sysdeps/m68k/fpu/s_atan.c1
-rw-r--r--sysdeps/m68k/fpu/s_frexp.c1
-rw-r--r--sysdeps/m68k/fpu/s_ilogb.c1
-rw-r--r--sysdeps/m68k/fpu/s_isinf.c1
-rw-r--r--sysdeps/m68k/fpu/s_ldexp.c1
-rw-r--r--sysdeps/m68k/fpu/s_modf.c1
-rw-r--r--sysdeps/m68k/s_isinfl.c (renamed from sysdeps/m68k/isinfl.c)0
-rw-r--r--sysdeps/m68k/s_isnanl.c (renamed from sysdeps/m68k/isnanl.c)0
-rw-r--r--sysdeps/mach/hurd/prof-freq.c2
-rw-r--r--sysdeps/sparc/e_sqrt.c (renamed from sysdeps/sparc/sqrt.c)2
-rw-r--r--sysdeps/stub/cbrt.c32
-rw-r--r--sysdeps/stub/cos.c32
-rw-r--r--sysdeps/stub/drem.c33
-rw-r--r--sysdeps/stub/isinf.c31
-rw-r--r--sysdeps/stub/isinfl.c33
-rw-r--r--sysdeps/stub/isnanl.c33
-rw-r--r--sysdeps/stub/logb.c31
-rw-r--r--sysdeps/stub/sin.c32
-rw-r--r--sysdeps/stub/sqrt.c32
-rw-r--r--sysdeps/tahoe/log10.c22
-rw-r--r--sysdeps/unix/sysv/linux/alpha/Dist1
-rw-r--r--sysdeps/unix/sysv/linux/i386/init-first.h27
-rw-r--r--sysdeps/unix/sysv/linux/m68k/init-first.h12
-rw-r--r--sysdeps/vax/Dist1
-rw-r--r--sysdeps/vax/bcmp.s57
-rw-r--r--sysdeps/vax/index.s99
-rw-r--r--sysdeps/vax/infnan.c62
-rw-r--r--sysdeps/vax/log10.c28
-rw-r--r--sysdeps/vax/memcmp.s2
-rw-r--r--sysdeps/vax/rindex.s113
-rw-r--r--sysdeps/vax/strchr.s2
-rw-r--r--sysdeps/vax/strrchr.s2
-rw-r--r--time/africa227
-rw-r--r--time/antarctica160
-rw-r--r--time/asia524
-rw-r--r--time/australasia149
-rw-r--r--time/europe1416
-rw-r--r--time/northamerica18
-rw-r--r--time/southamerica332
-rw-r--r--time/zic.c19
-rw-r--r--version.c2
73 files changed, 1835 insertions, 2889 deletions
diff --git a/ChangeLog b/ChangeLog
index c052ebf06a..92b1e8a061 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,164 @@
+Mon Sep  9 20:31:27 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* version.c (banner): Report to bug-glibc@prep not @gnu.
+	Reported by Andreas Jaeger.
+
+	* libio/stdio.h [!__USE_REENTRANT]: Don't define getc as
+ 	_IO_getc_unlocked.
+	[__USE_REENTRANT]: Don't define
+
+Mon Sep  9 15:59:32 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* sysdeps/i386/strrchr.c: Fix bug where NUL byte is not recognized
+	when it is the third byte in the string.  Reported by
+	NIIBE Yutaka.
+	* string/tester.c: Add tests for above bug to strlen, strchr, and
+	strrchr tests.
+
+Fri Sep  6 21:23:33 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* sysdeps/m68k/fpu/e_acos.c: Deansideclized.  Include
+	"math_private.h" to get prototype.
+	* sysdeps/m68k/fpu/e_fmod.c: Likewise.
+	* sysdeps/m68k/fpu/k_cos.c: Likewise.
+	* sysdeps/m68k/fpu/k_sin.c: Likewise.
+	* sysdeps/m68k/fpu/k_tan.c: Likewise.
+
+	* sysdeps/m68k/fpu/k_sin.c: Remove uneeded indirection of
+	__m81_u.
+	* sysdeps/m68k/fpu/k_tan.c: Likewise.
+
+Sun Sep  1 18:01:35 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* sysdeps/m68k/fpu/__math.h: Check for __NO_M81_MATH_INLINES
+	instead of __NO_MATH_INLINES.
+	(__M81_MATH_INLINES): Renamed from __MATH_INLINES.
+	* sysdeps/m68k/fpu/e_acos.c: Define __NO_M81_MATH_INLINES.
+	* sysdeps/m68k/fpu/e_fmod.c: Likewise.
+	* sysdeps/m68k/fpu/k_cos.c: Likewise.
+	* sysdeps/m68k/fpu/k_sin.c: Likewise.
+	* sysdeps/m68k/fpu/k_tan.c: Likewise.
+	* sysdeps/m68k/fpu/s_atan.c: Likewise.
+	* sysdeps/m68k/fpu/s_frexp.c: Likewise.
+	* sysdeps/m68k/fpu/s_ilogb.c: Likewise.
+	* sysdeps/m68k/fpu/s_isinf.c: Likewise.
+	* sysdeps/m68k/fpu/s_ldexp.c: Likewise.
+	* sysdeps/m68k/fpu/s_modf.c: Likewise.
+	* sysdeps/m68k/fpu/k_cos.c: Use inline version of __cos.
+	* sysdeps/m68k/fpu/k_sin.c: Likewise.
+	* sysdeps/m68k/fpu/k_tan.c: Likewise.
+
+Mon Sep  9 12:55:14 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* nss/nss_files/files-parse.c (INT_FIELD_MAYBE_NULL): Check for
+	available character before converting number and return with
+	error if none is available.
+
+Fri Sep  6 22:09:08 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* sysdeps/unix/sysv/linux/init-first.h: New file, generic
+	implementation for architectures where parameters are passed on
+	stack.
+	* sysdeps/unix/sysv/linux/m68k/init-first.h: Removed.
+	* sysdeps/unix/sysv/linux/i386/init-first.h: Removed.
+
+Fri Sep  6 22:05:32 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* configure.in: Remove unneeded sysnames frobbing.
+
+Mon Sep  9 05:29:09 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* time/zic.c: Update from ADO 96l.
+	* time/africa: Update from ADO 96k.
+	* time/antarctica: Likewise.
+	* time/asia: Likewise.
+	* time/australia: Likewise.
+	* time/europe: Likewise.
+	* time/northamerica: Likewise.
+	* time/southamerica: Likewise.
+
+Mon Sep  9 05:03:47 1996  NIIBE Yutaka  <gniibe@mri.co.jp>
+
+	* sysdeps/unix/sysv/linux/i386/init-first.h: Work around buggy
+	gcc <= 2.7.2.1 which optimizes away address operations on weak
+	objects.
+
+	* nss/nss_files/files-parse.c (INT_FIELD_MAYBE_NULL): New macro.
+	Like INT_FIELD but also accept non-existing field.
+	* shadow/sgetspent_r.c (LINE_PARSER): Use INT_FIELD_MAYBE_NULL
+	for last four fields.
+	* shadow/putspent.c (putspent): Print `:' after numeric value.
+
+Mon Sep  9 02:42:48 1996  Richard Henderson  <rth@tamu.edu>
+
+	* libio/stdio.h (BUFSIZ): Define using _IO_BUFSIZ.
+
+Sun Sep  8 16:43:56 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* Make-dist: Filter out $(add-ons) from $(subdirs).
+	Don't distribute TAGS files.
+	($(tardir).tar): Remove dist.tar when all is done.
+	* manual/Makefile (distribute): Add libc.info*.
+	* libio/Makefile (distribute): Add Banner.
+	* inet/Makefile (headers): Add netinet/tcp.h.
+
+	* resolv/Makefile (libresolv-routines): Add getnetnamadr.
+
+	* crypt-README: Removed.
+	* gnu-stabs.h: Removed.
+
+	* sysdeps/alpha/copysign.S: Renamed to...
+	* sysdeps/alpha/s_copysign.S: ...this.
+	* sysdeps/alpha/fabs.S: Renamed to...
+	* sysdeps/alpha/s_fabs.S: ...this.
+
+	* sysdeps/m68k/isinfl.c: Renamed to...
+	* sysdeps/m68k/s_isinfl.c: ...this.
+	* sysdeps/m68k/isnanl.c: Renamed to...
+	* sysdeps/m68k/s_isnanl.c: ...this.
+
+	* sysdeps/sparc/sqrt.c: Renamed to...
+	* sysdeps/sparc/e_sqrt.c: ...this.  Function name now is
+	__ieee754_sqrt.
+
+	* sysdeps/generic/get_str.c: Removed.
+
+	* sysdeps/ieee754/cbrt.c: Removed.
+	* sysdeps/ieee754/drem.c: Removed.
+	* sysdeps/ieee754/logb.c: Removed.
+	* sysdeps/ieee754/sqrt.c: Removed.
+
+	* sysdeps/stub/cbrt.c: Removed.
+	* sysdeps/stub/cos.c: Removed.
+	* sysdeps/stub/drem.c: Removed.
+	* sysdeps/stub/isinf.c: Removed.
+	* sysdeps/stub/isinfl.c: Removed.
+	* sysdeps/stub/isnanl.c: Removed.
+	* sysdeps/stub/logb.c: Removed.
+	* sysdeps/stub/sin.c: Removed.
+	* sysdeps/stub/sqrt.c: Removed.
+
+	* sysdeps/tahoe/log10.c: Removed.
+
+	* sysdeps/vax/index.s: Removed.
+	* sysdeps/vax/rindex.s: Removed.
+	* sysdeps/vax/bcmp.s: Removed.
+	* sysdeps/vax/log10.c: Removed.
+	* sysdeps/vax/infnan.c: Removed.
+	* sysdeps/vax/Dist: Add fl.h.
+
+	* sysdeps/unix/sysv/linux/alpha/Dist: Add llseek.S.
+
+	* inet/rcmd.c (rcmd): Make messages more uniform.
+
+Sun Sep  8 14:15:42 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* po/de.po: Update.
+	* po/es.po: Update.
+	* po/ko.po: Update.
+	* po/pl.po: New file.
+	* po/nl.po: New file.
+
 Sat Sep  7 18:41:17 1996  Richard Henderson  <rth@tamu.edu>
 
 	* Makeconfig (+link): Filter out start, pre & postinit from the
@@ -11,7 +172,7 @@ Sun Sep  8 02:36:02 1996  Ulrich Drepper  <drepper@cygnus.com>
 
 	* locale/SYS_libc.c (_libc_intl_domainname): Change value to "libc".
 	This is consistent with all other GNU packages.  We shouldn't
-	take care for a possible clash.  Somebody will name the domain
+	take care for a possible clash.  Nobody will name the domain
 	of a package libc if it is not the libc itself.
 	* MakeTAGS ($P/SYS_libc.pot): Rename to $P/libc.pot.
 	* po/Makefile (domainname): Change to libc.
diff --git a/Make-dist b/Make-dist
index 10ea43c06b..ec0f10bd8e 100644
--- a/Make-dist
+++ b/Make-dist
@@ -40,6 +40,9 @@ else
 sysdep_dirs := $(addprefix $(..),$(sysdep_dirs))
 endif
 
+# Don't distribute add-on subdirs.
+subdirs := $(filter-out $(add-ons),$(subdirs))
+
 # Make sure both stdio and libio get in, whichever is in use.
 subdirs += stdio libio
 
@@ -129,8 +132,8 @@ endif
 $(..)glibc-$(version):
 	ln -s . $@
 
-+tsrcs := $(+tsrcs) \
-	  TAGS
+#+tsrcs := $(+tsrcs) \
+#	  TAGS
 .PHONY: TAGS
 TAGS: $(..)MakeTAGS
 	$(MAKE) -f $< $@ -o subdir_TAGS
@@ -195,7 +198,7 @@ $(tardir).tar: dist.tar subdir_dist
 	@echo Files listed here have names exceeding 14 chars.
 	tar xfv $< -C /tmp | sed -n '/[^/]\{15,\}/p'
 	tar covf $@ -C /tmp $(tardir)
-	-rm -fr /tmp/$(tardir) &
+	-rm -fr /tmp/$(tardir) dist.tar &
 
 %.Z: %
 	compress -c $< > $@
diff --git a/README b/README
index 8f2c548dd1..c04bef259c 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-This directory contains the version 1.93 test release of the GNU C Library.
+This directory contains the version 1.94 test release of the GNU C Library.
 Many bugs have been fixed since the last release.
 Some bugs surely remain.
 
@@ -38,7 +38,7 @@ provides the Unix `crypt' function, plus some other entry points.
 Because of the United States export restriction on DES implementations,
 we are distributing this code separately from the rest of the C
 library.  There is an extra distribution tar file just for crypt; it is
-called `glibc-1.93-crypt.tar.gz'.  You can just unpack the crypt
+called `glibc-1.94-crypt.tar.gz'.  You can just unpack the crypt
 distribution along with the rest of the C library and build; you can
 also build the library without getting crypt.  Users outside the USA
 can get the crypt distribution via anonymous FTP from ftp.uni-c.dk
diff --git a/configure b/configure
index 2d03f8c6da..fc7595cdf8 100755
--- a/configure
+++ b/configure
@@ -886,10 +886,6 @@ if test "$elf" = yes; then
 fi
 
 
-# Remove the leading slashes.
-sysnames="`echo $sysnames | sed -e 's@^/@@' -e 's@ /@ @g'`"
-
-
 # Expand the list of system names into a full list of directories
 # from each element's parent name and Implies file (if present).
 set $sysnames
@@ -1174,13 +1170,13 @@ else
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 1178 "configure"
+#line 1174 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1184: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1180: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -1189,13 +1185,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 1193 "configure"
+#line 1189 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1199: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1195: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -1337,7 +1333,7 @@ if eval "test \"`echo '$''{'libc_cv_friendly_stddef'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1341 "configure"
+#line 1337 "configure"
 #include "confdefs.h"
 #define __need_size_t
 #define __need_wchar_t
@@ -1353,7 +1349,7 @@ size_t size; wchar_t wchar;
 if (&size == NULL || &wchar == NULL) abort ();
 ; return 0; }
 EOF
-if { (eval echo configure:1357: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1353: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   libc_cv_friendly_stddef=yes
 else
@@ -1460,7 +1456,7 @@ if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1464 "configure"
+#line 1460 "configure"
 #include "confdefs.h"
 
 int main() { return 0; }
@@ -1470,7 +1466,7 @@ asm (".section .init");
 				    asm (".text");
 ; return 0; }
 EOF
-if { (eval echo configure:1474: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1470: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   libc_cv_have_initfini=yes
 else
@@ -1498,7 +1494,7 @@ if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1502 "configure"
+#line 1498 "configure"
 #include "confdefs.h"
 asm ("_glibc_foobar:");
 int main() { return 0; }
@@ -1506,7 +1502,7 @@ int t() {
 glibc_foobar ();
 ; return 0; }
 EOF
-if { (eval echo configure:1510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:1506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   libc_cv_asm_underscores=yes
 else
@@ -1600,7 +1596,7 @@ __throw () {}
 EOF
 if { ac_try='${CC-cc} $CFLAGS
 			    -nostdlib -nostartfiles -Wl,--no-whole-archive
-			    -o conftest conftest.c'; { (eval echo configure:1604: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+			    -o conftest conftest.c'; { (eval echo configure:1600: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
   libc_cv_ld_no_whole_archive=yes
 else
   libc_cv_ld_no_whole_archive=no
@@ -1621,7 +1617,7 @@ __throw () {}
 EOF
 if { ac_try='${CC-cc} $CFLAGS
 			    -nostdlib -nostartfiles -fno-exceptions
-			    -o conftest conftest.c'; { (eval echo configure:1625: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+			    -o conftest conftest.c'; { (eval echo configure:1621: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
   libc_cv_gcc_no_exceptions=yes
 else
   libc_cv_gcc_no_exceptions=no
diff --git a/configure.in b/configure.in
index 76055a2342..cd9de13063 100644
--- a/configure.in
+++ b/configure.in
@@ -256,10 +256,6 @@ if test "$elf" = yes; then
 fi
 
 
-# Remove the leading slashes.
-sysnames="`echo $sysnames | sed -e 's@^/@@' -e 's@ /@ @g'`"
-
-
 # Expand the list of system names into a full list of directories
 # from each element's parent name and Implies file (if present).
 set $sysnames
diff --git a/crypt-README b/crypt-README
deleted file mode 100644
index c80ddf5c15..0000000000
--- a/crypt-README
+++ /dev/null
@@ -1,14 +0,0 @@
-The GNU C library now includes Michael Glad's Ultra Fast Crypt, which
-provides the Unix `crypt' function, plus some other entry points.  Because
-of the United States export restriction on DES implementations, we are
-distributing this code separately from the rest of the C library.  There is
-an extra distribution tar file just for crypt; it is called
-`glibc-1.07-crypt.tar.gz'.  You can just unpack the crypt distribution
-along with the rest of the C library and build; you can also build the
-library without getting crypt.  Users outside the USA can get the crypt
-distribution via anonymous FTP from ftp.uni-c.dk [129.142.6.74], or another
-archive site outside the USA.  Archive maintainers are encouraged to copy
-this distribution to their archives outside the USA.  Please get it from
-ftp.uni-c.dk; transferring this distribution from prep.ai.mit.edu (or any
-other site in the USA) to a site outside the USA is in violation of US
-export laws.
diff --git a/gnu-stabs.h b/gnu-stabs.h
deleted file mode 100644
index 3cdc91def8..0000000000
--- a/gnu-stabs.h
+++ /dev/null
@@ -1,75 +0,0 @@
-#error This file is obsolete.
-
-/* Copyright (C) 1991, 1992, 1994 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#ifndef	__GNU_STABS_H
-
-#define	__GNU_STABS_H	1
-
-#ifdef	HAVE_GNU_LD
-
-/* Alias a function:
-   	function_alias(creat, _creat, int, (file, mode),
-		       DEFUN(creat, (file, mode),
-		             CONST char *file AND int mode))
-   Yes, this is very repetitive.  Nothing you can do about it, so shut up.  */
-#define	function_alias(name, _name, type, args, defun) \
-  symbol_alias (_name, name);
-
-#define function_alias_void(name, _name, args, defun) \
-  symbol_alias (_name, name);
-
-#ifdef NO_UNDERSCORES
-#define __SYMBOL_PREFIX
-#else
-#define __SYMBOL_PREFIX "_"
-#endif
-
-/* Make references to ALIAS refer to SYMBOL.  */
-#define	symbol_alias(symbol, alias)	\
-  asm(".stabs \"" __SYMBOL_PREFIX #alias "\",11,0,0,0\n"\
-      ".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0")
-
-/* Issue a warning message from the linker whenever SYMBOL is referenced.  */
-#define	warn_references(symbol, msg)	\
-  asm(".stabs \"" msg "\",30,0,0,0\n"	\
-      ".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0")
-
-#define	stub_warning(name) \
-  warn_references(name, \
-		  "warning: " #name " is not implemented and will always fail")
-
-#define	text_set_element(set, symbol)	\
-  asm(".stabs \"" __SYMBOL_PREFIX #set "\",23,0,0," __SYMBOL_PREFIX #symbol)
-#define	data_set_element(set, symbol)	\
-  asm(".stabs \"" __SYMBOL_PREFIX #set "\",25,0,0," __SYMBOL_PREFIX #symbol)
-#define	bss_set_element(set, symbol)	\
-  asm(".stabs \"" __SYMBOL_PREFIX #set "\",27,0,0," __SYMBOL_PREFIX #symbol)
-
-#else	/* No GNU stabs.  */
-
-#define	function_alias(name, _name, type, args, defun) \
-  type defun { return _name args; }
-
-#define function_alias_void(name, _name, args, defun) \
-  void defun { _name args; }
-
-#endif	/* GNU stabs.  */
-
-#endif	/* gnu-stabs.h  */
diff --git a/inet/Makefile b/inet/Makefile
index e97da7f1ce..fbac0dc4c8 100644
--- a/inet/Makefile
+++ b/inet/Makefile
@@ -22,7 +22,7 @@
 subdir	:= inet
 
 headers	:= netinet/ether.h netinet/in.h netinet/if_ether.h \
-	   $(wildcard arpa/*.h protocols/*.h)
+	   netinet/tcp.h $(wildcard arpa/*.h protocols/*.h)
 
 routines := ntohl ntohs htonl htons		\
 	    inet_lnaof inet_mkadr	\
diff --git a/inet/rcmd.c b/inet/rcmd.c
index 7a29db2155..00fa965fd7 100644
--- a/inet/rcmd.c
+++ b/inet/rcmd.c
@@ -173,7 +173,7 @@ rcmd(ahost, rport, locuser, remuser, cmd, fd2p)
 		    from.sin_port >= IPPORT_RESERVED ||
 		    from.sin_port < IPPORT_RESERVED / 2) {
 			(void)fprintf(stderr,
-			    _("socket: protocol failure in circuit setup.\n"));
+			    _("socket: protocol failure in circuit setup\n"));
 			goto bad2;
 		}
 	}
diff --git a/libio/Makefile b/libio/Makefile
index 355a79a0e5..1d0ec937bf 100644
--- a/libio/Makefile
+++ b/libio/Makefile
@@ -48,6 +48,6 @@ endif
 aux	:=								      \
 	cleanup fileops genops stdfiles stdio strops
 
-distribute := iolibio.h libioP.h strfile.h
+distribute := iolibio.h libioP.h strfile.h Banner
 
 include ../Rules
diff --git a/libio/stdio.h b/libio/stdio.h
index 0d6c5e6741..ce3da7df4c 100644
--- a/libio/stdio.h
+++ b/libio/stdio.h
@@ -40,7 +40,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 #define EOF (-1)
 #endif
 #ifndef BUFSIZ
-#define BUFSIZ 1024
+#define BUFSIZ _IO_BUFSIZ
 #endif
 
 #define _IOFBF 0 /* Fully buffered. */
@@ -234,21 +234,16 @@ extern int putc_unlocked __P ((int, FILE *));
 extern int putchar_locked __P ((int));
 extern int putchar_unlocked __P ((int));
 
-# define getc_unlocked(fp) _IO_getc_unlocked (fp)
-# define getc_locked(fp) fgetc (fp)
-# define getchar_unlocked() getc_unlocked (stdin)
-# define getchar_locked() getc_locked (stdin)
-# define getc(fp) getc_locked (fp)
-
-# define putc_unlocked(c, fp) putc_unlocked (c, fp)
-# define putc_locked(c, fp) putc_locked (c, fp)
-# define putchar_unlocked(c) putc_unlocked (c, stdout)
-# define putchar_locked(c) putc_locked (c, stdout)
-# define putc(c, fp) putc_locked (c, fp)
-
-#else
-# define getc(fp) _IO_getc_unlocked (fp)
-# define putc(c, fp) _IO_putc_unlocked (c, fp)
+# ifndef _LIBC
+#  define getc_unlocked(fp) _IO_getc_unlocked (fp)
+#  define getc_locked(fp) fgetc (fp)
+#  define getchar_unlocked() getc_unlocked (stdin)
+#  define getchar_locked() getc_locked (stdin)
+#  define getc(fp) getc_locked (fp)
+#  define putchar_unlocked(c) putc_unlocked (c, stdout)
+#  define putchar_locked(c) putc_locked (c, stdout)
+#  define putc(c, fp) putc_locked (c, fp)
+# endif
 
 #endif /* __USE_REENTRANT */
 
diff --git a/manual/Makefile b/manual/Makefile
index c0a5782ea7..5c217815b2 100644
--- a/manual/Makefile
+++ b/manual/Makefile
@@ -77,7 +77,7 @@ doc-only-dist = Makefile COPYING.LIB mkinstalldirs
 distribute = $(minimal-dist)	       					\
 	     $(patsubst examples/%.c,%.c.texi,$(filter examples/%.c,	\
 			$(minimal-dist)))				\
-	     libc.?? libc.??s texinfo.tex summary.texi			\
+	     libc.info* libc.?? libc.??s texinfo.tex summary.texi	\
 	     stamp-summary chapters chapters-incl
 export distribute := $(distribute)
 
diff --git a/nss/nss_files/files-parse.c b/nss/nss_files/files-parse.c
index c9fb1f81e9..ece253d017 100644
--- a/nss/nss_files/files-parse.c
+++ b/nss/nss_files/files-parse.c
@@ -121,6 +121,24 @@ parse_line (char *line, struct STRUCTURE *result,			      \
     line = endp;							      \
   }
 
+#define INT_FIELD_MAYBE_NULL(variable, terminator_p, swallow, base, convert, default)	      \
+  {									      \
+    char *endp;								      \
+    if (*line == '\0')							      \
+      /* We expect some more input, so don't allow the string to end here. */ \
+      return 0;								      \
+    variable = convert (strtol (line, &endp, base));			      \
+    if (endp == line)							      \
+      variable = default;						      \
+    if (terminator_p (*endp))						      \
+      do								      \
+	++endp;								      \
+      while (swallow && terminator_p (*endp));				      \
+    else if (*endp != '\0')						      \
+      return 0;								      \
+    line = endp;							      \
+  }
+
 #define ISCOLON(c) ((c) == ':')
 
 
diff --git a/resolv/Makefile b/resolv/Makefile
index 51257a5917..fffaca3948 100644
--- a/resolv/Makefile
+++ b/resolv/Makefile
@@ -27,9 +27,9 @@ distribute := ../conf/portability.h mapv4v6addr.h mapv4v6hostent.h
 routines := herror inet_addr inet_ntop inet_pton nsap_addr res_init
 
 extra-libs := libresolv
-libresolv-routines := gethnamaddr res_comp res_debug res_data res_mkquery \
-		      res_query res_send inet_net_ntop inet_net_pton \
-		      inet_neta base64
+libresolv-routines := gethnamaddr getnetnamadr res_comp res_debug	\
+		      res_data res_mkquery res_query res_send		\
+		      inet_net_ntop inet_net_pton inet_neta base64
 
 include ../Rules
 
diff --git a/shadow/putspent.c b/shadow/putspent.c
index 59dbfda172..b638057bae 100644
--- a/shadow/putspent.c
+++ b/shadow/putspent.c
@@ -28,48 +28,48 @@ putspent (const struct spwd *p, FILE *stream)
 {
   int errors = 0;
 
-  if (fprintf (stream, "%s:%s", p->sp_namp, p->sp_pwdp) < 0)
+  if (fprintf (stream, "%s:%s:", p->sp_namp, p->sp_pwdp) < 0)
     ++errors;
 
   if ((p->sp_lstchg != (time_t) -1
-       && fprintf (stream, "%ld", p->sp_lstchg) < 0)
+       && fprintf (stream, "%ld:", p->sp_lstchg) < 0)
       || (p->sp_lstchg == (time_t) -1
 	  && putc (':', stream) == EOF))
     ++errors;
 
   if ((p->sp_min != (time_t) -1
-       && fprintf (stream, "%ld", p->sp_min) < 0)
+       && fprintf (stream, "%ld:", p->sp_min) < 0)
       || (p->sp_min == (time_t) -1
 	  && putc (':', stream) == EOF))
     ++errors;
 
   if ((p->sp_max != (time_t) -1
-       && fprintf (stream, "%ld", p->sp_max) < 0)
+       && fprintf (stream, "%ld:", p->sp_max) < 0)
       || (p->sp_max == (time_t) -1
 	  && putc (':', stream) == EOF))
     ++errors;
 
   if ((p->sp_warn != (time_t) -1
-       && fprintf (stream, "%ld", p->sp_warn) < 0)
+       && fprintf (stream, "%ld:", p->sp_warn) < 0)
       || (p->sp_warn == (time_t) -1
 	  && putc (':', stream) == EOF))
     ++errors;
 
   if ((p->sp_inact != (time_t) -1
-       && fprintf (stream, "%ld", p->sp_inact) < 0)
+       && fprintf (stream, "%ld:", p->sp_inact) < 0)
       || (p->sp_inact == (time_t) -1
 	  && putc (':', stream) == EOF))
     ++errors;
 
   if ((p->sp_expire != (time_t) -1
-       && fprintf (stream, "%ld", p->sp_expire) < 0)
+       && fprintf (stream, "%ld:", p->sp_expire) < 0)
       || (p->sp_expire == (time_t) -1
 	  && putc (':', stream) == EOF))
     ++errors;
 
-  if ((p->sp_flag != -1l
-       && fprintf (stream, "%ld", p->sp_flag) < 0)
-      || (p->sp_flag == -1l
+  if ((p->sp_flag != ~0ul
+       && fprintf (stream, "%ld:", p->sp_flag) < 0)
+      || (p->sp_flag == ~0ul
 	  && putc (':', stream) == EOF))
     ++errors;
 
diff --git a/shadow/sgetspent_r.c b/shadow/sgetspent_r.c
index 134a45e5b4..03c96b581b 100644
--- a/shadow/sgetspent_r.c
+++ b/shadow/sgetspent_r.c
@@ -44,19 +44,18 @@ LINE_PARSER
      result->sp_warn = (time_t) -1;
      result->sp_inact = (time_t) -1;
      result->sp_expire = (time_t) -1;
-     result->sp_flag = (time_t) -1;
+     result->sp_flag = ~0ul;
    }
  else
    {
-     INT_FIELD (result->sp_warn, ISCOLON, 0, 10, (time_t));
-     INT_FIELD (result->sp_inact, ISCOLON, 0, 10, (time_t));
-     INT_FIELD (result->sp_expire, ISCOLON, 0, 10, (time_t));
-     while (isspace (*line))
-       ++line;
-     if (*line == '\0')
-       result->sp_flag = -1;
-     else
-       INT_FIELD (result->sp_flag, ISCOLON, 0, 10, );
+     INT_FIELD_MAYBE_NULL (result->sp_warn, ISCOLON, 0, 10, (time_t),
+			   (time_t) -1);
+     INT_FIELD_MAYBE_NULL (result->sp_inact, ISCOLON, 0, 10, (time_t),
+			   (time_t) -1);
+     INT_FIELD_MAYBE_NULL (result->sp_expire, ISCOLON, 0, 10, (time_t),
+			   (time_t) -1);
+     INT_FIELD_MAYBE_NULL (result->sp_flag, ISCOLON, 0, 10,
+			   (unsigned long int), ~0ul);
    }
  )
 
diff --git a/string/tester.c b/string/tester.c
index e57b279fa4..d376db2a67 100644
--- a/string/tester.c
+++ b/string/tester.c
@@ -208,7 +208,19 @@ DEFUN(main, (argc, argv), int argc AND char **argv)
   it = "strlen";
   check(strlen("") == 0, 1);		/* Empty. */
   check(strlen("a") == 1, 2);		/* Single char. */
-  check(strlen("abcd") == 4, 3);		/* Multiple chars. */
+  check(strlen("abcd") == 4, 3);	/* Multiple chars. */
+  {
+    char buf[4096];
+    int i;
+    char *p;
+    for (i=0; i < 0x100; i++)
+      {
+	p = (char *)((int)(buf + 0xff) & ~0xff) + i;
+	strcpy (p, "OK");
+	strcpy (p+3, "BAD/WRONG");
+	check(strlen(p) == 2, 4+i);
+      }
+   }
 
   /* strchr.  */
   it = "strchr";
@@ -223,6 +235,18 @@ DEFUN(main, (argc, argv), int argc AND char **argv)
   (void) strcpy(one, "");
   check(strchr(one, 'b') == NULL, 7);	/* Empty string. */
   check(strchr(one, '\0') == one, 8);	/* NUL in empty string. */
+  {
+    char buf[4096];
+    int i;
+    char *p;
+    for (i=0; i < 0x100; i++)
+      {
+	p = (char *)((int)(buf + 0xff) & ~0xff) + i;
+	strcpy (p, "OK");
+	strcpy (p+3, "BAD/WRONG");
+	check(strchr(p, '/') == NULL, 9+i);
+      }
+   }
 
 #if 0
   /* index - just like strchr.  */
@@ -253,6 +277,18 @@ DEFUN(main, (argc, argv), int argc AND char **argv)
   (void) strcpy(one, "");
   check(strrchr(one, 'b') == NULL, 7);	/* Empty string. */
   check(strrchr(one, '\0') == one, 8);	/* NUL in empty string. */
+  {
+    char buf[4096];
+    int i;
+    char *p;
+    for (i=0; i < 0x100; i++)
+      {
+	p = (char *)((int)(buf + 0xff) & ~0xff) + i;
+	strcpy (p, "OK");
+	strcpy (p+3, "BAD/WRONG");
+	check(strrchr(p, '/') == NULL, 9+i);
+      }
+   }
 
 #if 0
   /* rindex - just like strrchr.  */
@@ -515,8 +551,8 @@ DEFUN(main, (argc, argv), int argc AND char **argv)
     char buf[128 + sizeof(long)];
     long align, len, i, pos;
 
-    for (align = 0; align < sizeof(long); ++align) {
-      for (len = 0; len < sizeof(buf) - align; ++len) {
+    for (align = 0; align < (long) sizeof(long); ++align) {
+      for (len = 0; len < (long) (sizeof(buf) - align); ++len) {
 	for (i = 0; i < len; ++i) {
 	  buf[align + i] = 'x';		/* don't depend on memset... */
 	}
diff --git a/sysdeps/alpha/copysign.S b/sysdeps/alpha/s_copysign.S
index 95eb608666..95eb608666 100644
--- a/sysdeps/alpha/copysign.S
+++ b/sysdeps/alpha/s_copysign.S
diff --git a/sysdeps/alpha/fabs.S b/sysdeps/alpha/s_fabs.S
index dff8390b5a..12c0abdf75 100644
--- a/sysdeps/alpha/fabs.S
+++ b/sysdeps/alpha/s_fabs.S
@@ -19,9 +19,10 @@ Cambridge, MA 02139, USA.  */
 
 #include <sysdep.h>
 
-ENTRY(fabs)
+ENTRY(__fabs)
 	.prologue 0
 	cpys	$f31,$f16,$f0
 	ret
 
-	END(fabs)
+	END(__fabs)
+weak_alias (__fabs, fabs)
diff --git a/sysdeps/generic/get_str.c b/sysdeps/generic/get_str.c
deleted file mode 100644
index 182815ee18..0000000000
--- a/sysdeps/generic/get_str.c
+++ /dev/null
@@ -1,213 +0,0 @@
-/* __mpn_get_str -- Convert a MSIZE long limb vector pointed to by MPTR
-   to a printable string in STR in base BASE.
-
-Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
-
-
-This file is part of the GNU C Library.  Its master source is NOT part of
-the C library, however.  This file is in fact copied from the GNU MP
-Library and its source lives there.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include "gmp.h"
-#include "gmp-impl.h"
-
-/* Convert the limb vector pointed to by MPTR and MSIZE long to a
-   char array, using base BASE for the result array.  Store the
-   result in the character array STR.  STR must point to an array with
-   space for the largest possible number represented by a MSIZE long
-   limb vector + 1 extra character.
-
-   The result is NOT in Ascii, to convert it to printable format, add
-   '0' or 'A' depending on the base and range.
-
-   Return the number of digits in the result string.
-   This may include some leading zeros.
-
-   The limb vector pointed to by MPTR is clobbered.  */
-
-size_t
-__mpn_get_str (str, base, mptr, msize)
-     unsigned char *str;
-     int base;
-     mp_ptr mptr;
-     mp_size_t msize;
-{
-  mp_limb big_base;
-#if UDIV_NEEDS_NORMALIZATION || UDIV_TIME > 2 * UMUL_TIME
-  int normalization_steps;
-#endif
-#if UDIV_TIME > 2 * UMUL_TIME
-  mp_limb big_base_inverted;
-#endif
-  unsigned int dig_per_u;
-  mp_size_t out_len;
-  register unsigned char *s;
-
-  big_base = __mp_bases[base].big_base;
-
-  s = str;
-
-  /* Special case zero, as the code below doesn't handle it.  */
-  if (msize == 0)
-    {
-      s[0] = 0;
-      return 1;
-    }
-
-  if ((base & (base - 1)) == 0)
-    {
-      /* The base is a power of 2.  Make conversion from most
-	 significant side.  */
-      mp_limb n1, n0;
-      register int bits_per_digit = big_base;
-      register int x;
-      register int bit_pos;
-      register int i;
-
-      n1 = mptr[msize - 1];
-      count_leading_zeros (x, n1);
-
-	/* BIT_POS should be R when input ends in least sign. nibble,
-	   R + bits_per_digit * n when input ends in n:th least significant
-	   nibble. */
-
-      {
-	int bits;
-
-	bits = BITS_PER_MP_LIMB * msize - x;
-	x = bits % bits_per_digit;
-	if (x != 0)
-	  bits += bits_per_digit - x;
-	bit_pos = bits - (msize - 1) * BITS_PER_MP_LIMB;
-      }
-
-      /* Fast loop for bit output.  */
-      i = msize - 1;
-      for (;;)
-	{
-	  bit_pos -= bits_per_digit;
-	  while (bit_pos >= 0)
-	    {
-	      *s++ = (n1 >> bit_pos) & ((1 << bits_per_digit) - 1);
-	      bit_pos -= bits_per_digit;
-	    }
-	  i--;
-	  if (i < 0)
-	    break;
-	  n0 = (n1 << -bit_pos) & ((1 << bits_per_digit) - 1);
-	  n1 = mptr[i];
-	  bit_pos += BITS_PER_MP_LIMB;
-	  *s++ = n0 | (n1 >> bit_pos);
-	}
-
-      *s = 0;
-
-      return s - str;
-    }
-  else
-    {
-      /* General case.  The base is not a power of 2.  Make conversion
-	 from least significant end.  */
-
-      /* If udiv_qrnnd only handles divisors with the most significant bit
-	 set, prepare BIG_BASE for being a divisor by shifting it to the
-	 left exactly enough to set the most significant bit.  */
-#if UDIV_NEEDS_NORMALIZATION || UDIV_TIME > 2 * UMUL_TIME
-      count_leading_zeros (normalization_steps, big_base);
-      big_base <<= normalization_steps;
-#if UDIV_TIME > 2 * UMUL_TIME
-      /* Get the fixed-point approximation to 1/(BIG_BASE << NORMALIZATION_STEPS).  */
-      big_base_inverted = __mp_bases[base].big_base_inverted;
-#endif
-#endif
-
-      dig_per_u = __mp_bases[base].chars_per_limb;
-      out_len = ((size_t) msize * BITS_PER_MP_LIMB
-		 * __mp_bases[base].chars_per_bit_exactly) + 1;
-      s += out_len;
-
-      while (msize != 0)
-	{
-	  int i;
-	  mp_limb n0, n1;
-
-#if UDIV_NEEDS_NORMALIZATION || UDIV_TIME > 2 * UMUL_TIME
-	  /* If we shifted BIG_BASE above, shift the dividend too, to get
-	     the right quotient.  We need to do this every loop,
-	     since the intermediate quotients are OK, but the quotient from
-	     one turn in the loop is going to be the dividend in the
-	     next turn, and the dividend needs to be up-shifted.  */
-	  if (normalization_steps != 0)
-	    {
-	      n0 = __mpn_lshift (mptr, mptr, msize, normalization_steps);
-
-	      /* If the shifting gave a carry out limb, store it and
-		 increase the length.  */
-	      if (n0 != 0)
-		{
-		  mptr[msize] = n0;
-		  msize++;
-		}
-	    }
-#endif
-
-	  /* Divide the number at TP with BIG_BASE to get a quotient and a
-	     remainder.  The remainder is our new digit in base BIG_BASE.  */
-	  i = msize - 1;
-	  n1 = mptr[i];
-
-	  if (n1 >= big_base)
-	    n1 = 0;
-	  else
-	    {
-	      msize--;
-	      i--;
-	    }
-
-	  for (; i >= 0; i--)
-	    {
-	      n0 = mptr[i];
-#if UDIV_TIME > 2 * UMUL_TIME
-	      udiv_qrnnd_preinv (mptr[i], n1, n1, n0, big_base, big_base_inverted);
-#else
-	      udiv_qrnnd (mptr[i], n1, n1, n0, big_base);
-#endif
-	    }
-
-#if UDIV_NEEDS_NORMALIZATION || UDIV_TIME > 2 * UMUL_TIME
-	  /* If we shifted above (at previous UDIV_NEEDS_NORMALIZATION tests)
-	     the remainder will be up-shifted here.  Compensate.  */
-	  n1 >>= normalization_steps;
-#endif
-
-	  /* Convert N1 from BIG_BASE to a string of digits in BASE
-	     using single precision operations.  */
-	  for (i = dig_per_u - 1; i >= 0; i--)
-	    {
-	      *--s = n1 % base;
-	      n1 /= base;
-	      if (n1 == 0 && msize == 0)
-		break;
-	    }
-	}
-
-      while (s != str)
-	*--s = 0;
-      return out_len;
-    }
-}
diff --git a/sysdeps/generic/prof-freq.c b/sysdeps/generic/prof-freq.c
index c69b43ec09..4ad42124e8 100644
--- a/sysdeps/generic/prof-freq.c
+++ b/sysdeps/generic/prof-freq.c
@@ -55,62 +55,3 @@ __profile_frequency ()
     return 0;
   return (1000000 / tim.it_interval.tv_usec);
 }
-/* Return frequency of ticks reported by profil.  Generic version. */
-/*-
- * Copyright (c) 1983, 1992, 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by the University of
- *	California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-
-#include <sys/types.h>
-#include <sys/time.h>
-
-int
-__profile_frequency ()
-{
-  /*
-   * Discover the tick frequency of the machine if something goes wrong,
-   * we return 0, an impossible hertz.
-   */
-  struct itimerval tim;
-
-  tim.it_interval.tv_sec = 0;
-  tim.it_interval.tv_usec = 1;
-  tim.it_value.tv_sec = 0;
-  tim.it_value.tv_usec = 0;
-  setitimer(ITIMER_REAL, &tim, 0);
-  setitimer(ITIMER_REAL, 0, &tim);
-  if (tim.it_interval.tv_usec < 2)
-    return 0;
-  return (1000000 / tim.it_interval.tv_usec);
-}
-
-
diff --git a/sysdeps/i386/strrchr.S b/sysdeps/i386/strrchr.S
index 26d6a22d6b..58058e1195 100644
--- a/sysdeps/i386/strrchr.S
+++ b/sysdeps/i386/strrchr.S
@@ -1,6 +1,6 @@
-/* strchr (str, ch) -- Return pointer to last occurrence of CH in STR.
+/* strrchr (str, ch) -- Return pointer to last occurrence of CH in STR.
 For Intel 80x86, x>=3.
-Copyright (C) 1994, 1995 Free Software Foundation, Inc.
+Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
 Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>
 Some optimisations by Alan Modra <Alan@SPRI.Levels.UniSA.Edu.Au>
 This file is part of the GNU C Library.
@@ -84,7 +84,7 @@ L12:	orb %dl, %dl		/* is NUL? */
 	cmpb %dl, %cl		/* compare byte */
 	jne L13			/* target found => return */
 	movl %esi, %eax		/* remember pointer as result */
-L13:	orb %cl, %cl		/* is NUL? */
+L13:	orb %dl, %dl		/* is NUL? */
 	jz L2			/* yes => return NULL */
 	incl %esi		/* increment pointer */
 
@@ -134,7 +134,11 @@ L13:	orb %cl, %cl		/* is NUL? */
 	/* These fill bytes make the main loop be correctly aligned.
 	   We cannot use align because it is not the following instruction
 	   which should be aligned.  */
-	.byte 0, 0, 0, 0, 0, 0, 0, 0
+	.byte 0, 0
+#ifndef	PROF
+	/* Profiling adds some code and so changes the alignment.  */
+	.byte 0
+#endif
 
 L4:	subl $4, %esi		/* adjust pointer */
 L41:	subl $4, %esi
diff --git a/sysdeps/ieee754/cbrt.c b/sysdeps/ieee754/cbrt.c
deleted file mode 100644
index fe5fb95511..0000000000
--- a/sysdeps/ieee754/cbrt.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 1985, 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by the University of
- *	California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef lint
-static char sccsid[] = "@(#)cbrt.c	8.1 (Berkeley) 6/4/93";
-#endif /* not lint */
-
-#include <sys/cdefs.h>
-
-/* kahan's cube root (53 bits IEEE double precision)
- * for IEEE machines only
- * coded in C by K.C. Ng, 4/30/85
- *
- * Accuracy:
- *	better than 0.667 ulps according to an error analysis. Maximum
- * error observed was 0.666 ulps in an 1,000,000 random arguments test.
- *
- * Warning: this code is semi machine dependent; the ordering of words in
- * a floating point number must be known in advance. I assume that the
- * long interger at the address of a floating point number will be the
- * leading 32 bits of that floating point number (i.e., sign, exponent,
- * and the 20 most significant bits).
- * On a National machine, it has different ordering; therefore, this code 
- * must be compiled with flag -DNATIONAL. 
- */
-#if !defined(vax)&&!defined(tahoe)
-
-static const unsigned long
-		     B1 = 715094163, /* B1 = (682-0.03306235651)*2**20 */
-	             B2 = 696219795; /* B2 = (664-0.03306235651)*2**20 */
-static const double
-	    C= 19./35.,
-	    D= -864./1225.,
-	    E= 99./70.,
-	    F= 45./28.,
-	    G= 5./14.;
-
-double cbrt(x) 
-double x;
-{
-	double r,s,t=0.0,w;
-	unsigned long *px = (unsigned long *) &x,
-	              *pt = (unsigned long *) &t,
-		      mexp,sign;
-
-#ifdef national /* ordering of words in a floating points number */
-	const int n0=1,n1=0;
-#else	/* national */
-	const int n0=0,n1=1;
-#endif	/* national */
-
-	mexp=px[n0]&0x7ff00000;
-	if(mexp==0x7ff00000) return(x); /* cbrt(NaN,INF) is itself */
-	if(x==0.0) return(x);		/* cbrt(0) is itself */
-
-	sign=px[n0]&0x80000000; /* sign= sign(x) */
-	px[n0] ^= sign;		/* x=|x| */
-
-
-    /* rough cbrt to 5 bits */
-	if(mexp==0) 		/* subnormal number */
-	  {pt[n0]=0x43500000; 	/* set t= 2**54 */
-	   t*=x; pt[n0]=pt[n0]/3+B2;
-	  }
-	else
-	  pt[n0]=px[n0]/3+B1;	
-
-
-    /* new cbrt to 23 bits, may be implemented in single precision */
-	r=t*t/x;
-	s=C+r*t;
-	t*=G+F/(s+E+D/s);	
-
-    /* chopped to 20 bits and make it larger than cbrt(x) */ 
-	pt[n1]=0; pt[n0]+=0x00000001;
-
-
-    /* one step newton iteration to 53 bits with error less than 0.667 ulps */
-	s=t*t;		/* t*t is exact */
-	r=x/s;
-	w=t+t;
-	r=(r-t)/(w+r);	/* r-t is exact */
-	t=t+t*r;
-
-
-    /* retore the sign bit */
-	pt[n0] |= sign;
-	return(t);
-}
-#endif
diff --git a/sysdeps/ieee754/drem.c b/sysdeps/ieee754/drem.c
deleted file mode 100644
index cab3a04535..0000000000
--- a/sysdeps/ieee754/drem.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Copyright (C) 1992, 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-/*
- * Copyright (c) 1985 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted provided
- * that: (1) source distributions retain this entire copyright notice and
- * comment, and (2) distributions including binaries display the following
- * acknowledgement:  ``This product includes software developed by the
- * University of California, Berkeley and its contributors'' in the
- * documentation or other materials provided with the distribution and in
- * all advertising materials mentioning features or use of this software.
- * Neither the name of the University nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-#include <ansidecl.h>
-#include <math.h>
-#include <float.h>
-#include "ieee754.h"
-
-/* Return the remainder of X/Y.  */
-double
-DEFUN(__drem, (x, y),
-      double x AND double y)
-{
-  union ieee754_double ux, uy;
-
-  ux.d = x;
-  uy.d = y;
-#define x ux.d
-#define	y uy.d
-
-  uy.ieee.negative = 0;
-
-  if (!__finite (x) || y == 0.0)
-    return NAN;
-  else if (__isnan (y))
-    return y;
-  else if (__isinf (y))
-    return x;
-  else if (uy.ieee.exponent <= 1)
-    {
-      /* Subnormal (or almost subnormal) Y value.  */
-      double b = __scalb (1.0, 54);
-      y *= b;
-      x = __drem (x, y);
-      x *= b;
-      return __drem (x, y) / b;
-    }
-  else if (y >= 1.7e308 / 2)
-    {
-      y /= 2;
-      x /= 2;
-      return __drem (x, y) * 2;
-    }
-  else
-    {
-      union ieee754_double a;
-      double b;
-      unsigned int negative = ux.ieee.negative;
-      a.d = y + y;
-      b = y / 2;
-      ux.ieee.negative = 0;
-      while (x > a.d)
-	{
-	  unsigned short int k = ux.ieee.exponent - a.ieee.exponent;
-	  union ieee754_double tmp;
-	  tmp.d = a.d;
-	  tmp.ieee.exponent += k;
-	  if (x < tmp.d)
-	    --tmp.ieee.exponent;
-	  x -= tmp.d;
-	}
-      if (x > b)
-	{
-	  x -= y;
-	  if (x >= b)
-	    x -= y;
-	}
-      ux.ieee.negative ^= negative;
-      return x;
-    }
-}
-
-weak_alias (__drem, drem)
diff --git a/sysdeps/ieee754/logb.c b/sysdeps/ieee754/logb.c
deleted file mode 100644
index 918de9ebad..0000000000
--- a/sysdeps/ieee754/logb.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright (C) 1992, 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <math.h>
-#include <float.h>
-#include "ieee754.h"
-
-/* Return the base 2 signed integral exponent of X.  */
-double
-DEFUN(__logb, (x), double x)
-{
-  union ieee754_double u;
-
-  if (__isnan (x))
-    return x;
-  else if (__isinf (x))
-    return HUGE_VAL;
-  else if (x == 0.0)
-    return - HUGE_VAL;
-
-  u.d = x;
-
-  if (u.ieee.exponent == 0)
-    /* A denormalized number.
-       Multiplying by 2 ** DBL_MANT_DIG normalizes it;
-       we then subtract the DBL_MANT_DIG we added to the exponent.  */
-    return (__logb (x * ldexp (1.0, DBL_MANT_DIG)) - DBL_MANT_DIG);
-
-  return (int) u.ieee.exponent - (DBL_MAX_EXP - 1);
-}
-
-weak_alias (__logb, logb)
diff --git a/sysdeps/ieee754/sqrt.c b/sysdeps/ieee754/sqrt.c
deleted file mode 100644
index 7e350e0d91..0000000000
--- a/sysdeps/ieee754/sqrt.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 1985 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted provided
- * that: (1) source distributions retain this entire copyright notice and
- * comment, and (2) distributions including binaries display the following
- * acknowledgement:  ``This product includes software developed by the
- * University of California, Berkeley and its contributors'' in the
- * documentation or other materials provided with the distribution and in
- * all advertising materials mentioning features or use of this software.
- * Neither the name of the University nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-#include <ansidecl.h>
-#include <errno.h>
-#include <math.h>
-
-/* Return the square root of X.  */
-double
-DEFUN (sqrt, (x), double x)
-{
-  double q, s, b, r, t;
-  CONST double zero = 0.0;
-  int m, n, i;
-
-  /* sqrt (NaN) is NaN; sqrt (+-0) is +-0.  */
-  if (__isnan (x) || x == zero)
-    return x;
-
-  if (x < zero)
-    return zero / zero;
-
-  /* sqrt (Inf) is Inf.  */
-  if (__isinf (x))
-    return x;
-
-  /* Scale X to [1,4).  */
-  n = __logb (x);
-  x = __scalb (x, -n);
-  m = __logb (x);
-  if (m != 0)
-    /* Subnormal number.  */
-    x = __scalb (x, -m);
-
-  m += n;
-  n = m / 2;
-
-  if ((n + n) != m)
-    {
-      x *= 2;
-      --m;
-      n = m / 2;
-    }
-
-  /* Generate sqrt (X) bit by bit (accumulating in Q).  */
-  q = 1.0;
-  s = 4.0;
-  x -= 1.0;
-  r = 1;
-  for (i = 1; i <= 51; i++)
-    {
-      t = s + 1;
-      x *= 4;
-      r /= 2;
-      if (t <= x)
-	{
-	  s = t + t + 2, x -= t;
-	  q += r;
-	}
-      else
-	s *= 2;
-    }
-
-  /* Generate the last bit and determine the final rounding.  */
-  r /= 2;
-  x *= 4;
-  if (x == zero)
-    goto end;
-  (void) (100 + r);		/* Trigger inexact flag.  */
-  if (s < x)
-    {
-      q += r;
-      x -= s;
-      s += 2;
-      s *= 2;
-      x *= 4;
-      t = (x - s) - 5;
-      b = 1.0 + 3 * r / 4;
-      if (b == 1.0)
-	goto end;		/* B == 1: Round to zero.  */
-      b = 1.0 + r / 4;
-      if (b > 1.0)
-	t = 1;			/* B > 1: Round to +Inf.  */
-      if (t >= 0)
-	q += r;
-    }				/* Else round to nearest.  */
-  else
-    {
-      s *= 2;
-      x *= 4;
-      t = (x - s) - 1;
-      b = 1.0 + 3 * r / 4;
-      if (b == 1.0)
-	goto end;
-      b = 1.0 + r / 4;
-      if (b > 1.0)
-	t = 1;
-      if (t >= 0)
-	q += r;
-    }
-
-end:
-  return __scalb (q, n);
-}
diff --git a/sysdeps/m68k/fpu/__math.h b/sysdeps/m68k/fpu/__math.h
index 2cbb4ca388..4992aea561 100644
--- a/sysdeps/m68k/fpu/__math.h
+++ b/sysdeps/m68k/fpu/__math.h
@@ -20,7 +20,7 @@ Cambridge, MA 02139, USA.  */
 
 #include <sys/cdefs.h>
 
-#ifdef	__NO_MATH_INLINES
+#ifdef	__NO_M81_MATH_INLINES
 /* This is used when defining the functions themselves.  Define them with
    __ names, and with `static inline' instead of `extern inline' so the
    bodies will always be used, never an external function call.  */
@@ -29,7 +29,7 @@ Cambridge, MA 02139, USA.  */
 #else
 #define	__m81_u(x)	x
 #define __m81_inline	extern __inline
-#define	__MATH_INLINES	1
+#define	__M81_MATH_INLINES	1
 #endif
 
 /* Define a const math function.  */
diff --git a/sysdeps/m68k/fpu/e_acos.c b/sysdeps/m68k/fpu/e_acos.c
index ae77dabf98..61c374d917 100644
--- a/sysdeps/m68k/fpu/e_acos.c
+++ b/sysdeps/m68k/fpu/e_acos.c
@@ -16,8 +16,9 @@ License along with the GNU C Library; see the file COPYING.LIB.  If
 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
-#include <ansidecl.h>
+#define __NO_M81_MATH_INLINES
 #include <math.h>
+#include "math_private.h"
 
 #ifndef	FUNC
 #define	FUNC	__ieee754_acos
@@ -27,7 +28,8 @@ Cambridge, MA 02139, USA.  */
 #endif
 
 float_type
-DEFUN(FUNC, (x), float_type x)
+FUNC (x)
+     float_type x;
 {
   return __m81_u(FUNC)(x);
 }
diff --git a/sysdeps/m68k/fpu/e_fmod.c b/sysdeps/m68k/fpu/e_fmod.c
index 0b2468c06d..bf2f7ed1bb 100644
--- a/sysdeps/m68k/fpu/e_fmod.c
+++ b/sysdeps/m68k/fpu/e_fmod.c
@@ -16,8 +16,9 @@ License along with the GNU C Library; see the file COPYING.LIB.  If
 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
-#include <ansidecl.h>
+#define __NO_M81_MATH_INLINES
 #include <math.h>
+#include "math_private.h"
 
 #ifndef FUNC
 #define FUNC __ieee754_fmod
@@ -27,7 +28,9 @@ Cambridge, MA 02139, USA.  */
 #endif
 
 float_type
-DEFUN(FUNC, (x, y), float_type x AND float_type y)
+FUNC (x, y)
+     float_type x;
+     float_type y;
 {
   return __m81_u(FUNC)(x, y);
 }
diff --git a/sysdeps/m68k/fpu/k_cos.c b/sysdeps/m68k/fpu/k_cos.c
index 61f566f6a1..6bb9090568 100644
--- a/sysdeps/m68k/fpu/k_cos.c
+++ b/sysdeps/m68k/fpu/k_cos.c
@@ -16,7 +16,9 @@ License along with the GNU C Library; see the file COPYING.LIB.  If
 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
+#define __NO_M81_MATH_INLINES
 #include <math.h>
+#include "math_private.h"
 
 #ifndef FUNC
 #define FUNC cos
diff --git a/sysdeps/m68k/fpu/k_sin.c b/sysdeps/m68k/fpu/k_sin.c
index 3eed1d466c..f10c7f9801 100644
--- a/sysdeps/m68k/fpu/k_sin.c
+++ b/sysdeps/m68k/fpu/k_sin.c
@@ -16,7 +16,9 @@ License along with the GNU C Library; see the file COPYING.LIB.  If
 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
+#define __NO_M81_MATH_INLINES
 #include <math.h>
+#include "math_private.h"
 
 #ifndef FUNC
 #define FUNC sin
@@ -35,7 +37,7 @@ __CONCATX(__kernel_,FUNC) (x, y, iy)
 {
   float_type sin_x, cos_x, sin_y, cos_y;
   if (iy == 0)
-    return __m81_u_(__CONCATX(__,FUNC)) (x);
+    return __m81_u(__CONCATX(__,FUNC)) (x);
   __asm__ __volatile__ ("fsincosx %2,%0:%1" : "=f" (cos_x), "=f" (sin_x)
 			: "f" (x));
   __asm__ __volatile__ ("fsincosx %2,%0:%1" : "=f" (cos_y), "=f" (sin_y)
diff --git a/sysdeps/m68k/fpu/k_tan.c b/sysdeps/m68k/fpu/k_tan.c
index 7f1b729b96..9c222cd6e1 100644
--- a/sysdeps/m68k/fpu/k_tan.c
+++ b/sysdeps/m68k/fpu/k_tan.c
@@ -16,7 +16,9 @@ License along with the GNU C Library; see the file COPYING.LIB.  If
 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
+#define __NO_M81_MATH_INLINES
 #include <math.h>
+#include "math_private.h"
 
 #ifndef FUNC
 #define FUNC tan
@@ -34,8 +36,8 @@ __CONCATX(__kernel_,FUNC) (x, y, iy)
      int iy;
 {
   float_type tan_x, tan_y;
-  tan_x = __m81_u_(__CONCATX(__,FUNC)) (x);
-  tan_y = __m81_u_(__CONCATX(__,FUNC)) (y);
+  tan_x = __m81_u(__CONCATX(__,FUNC)) (x);
+  tan_y = __m81_u(__CONCATX(__,FUNC)) (y);
   if (iy > 0)
     return (tan_x + tan_y) / (1 - tan_x * tan_y);
   else
diff --git a/sysdeps/m68k/fpu/s_atan.c b/sysdeps/m68k/fpu/s_atan.c
index 29717d4395..99b3024326 100644
--- a/sysdeps/m68k/fpu/s_atan.c
+++ b/sysdeps/m68k/fpu/s_atan.c
@@ -17,6 +17,7 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
 #include <ansidecl.h>
+#define __NO_M81_MATH_INLINES
 #include <math.h>
 
 #ifndef FUNC
diff --git a/sysdeps/m68k/fpu/s_frexp.c b/sysdeps/m68k/fpu/s_frexp.c
index 16f30394b2..8b38086e27 100644
--- a/sysdeps/m68k/fpu/s_frexp.c
+++ b/sysdeps/m68k/fpu/s_frexp.c
@@ -17,6 +17,7 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
 #include <ansidecl.h>
+#define __NO_M81_MATH_INLINES
 #include <math.h>
 
 #ifndef FUNC
diff --git a/sysdeps/m68k/fpu/s_ilogb.c b/sysdeps/m68k/fpu/s_ilogb.c
index c80a288949..39c871481d 100644
--- a/sysdeps/m68k/fpu/s_ilogb.c
+++ b/sysdeps/m68k/fpu/s_ilogb.c
@@ -17,6 +17,7 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
 #include <ansidecl.h>
+#define __NO_M81_MATH_INLINES
 #include <math.h>
 
 #ifndef FUNC
diff --git a/sysdeps/m68k/fpu/s_isinf.c b/sysdeps/m68k/fpu/s_isinf.c
index 570a7ba7bb..7d4b1c44a5 100644
--- a/sysdeps/m68k/fpu/s_isinf.c
+++ b/sysdeps/m68k/fpu/s_isinf.c
@@ -17,6 +17,7 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
 #include <ansidecl.h>
+#define __NO_M81_MATH_INLINES
 #include <math.h>
 
 #ifndef FUNC
diff --git a/sysdeps/m68k/fpu/s_ldexp.c b/sysdeps/m68k/fpu/s_ldexp.c
index ea8bfbab88..18f4d43c37 100644
--- a/sysdeps/m68k/fpu/s_ldexp.c
+++ b/sysdeps/m68k/fpu/s_ldexp.c
@@ -17,6 +17,7 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
 #include <ansidecl.h>
+#define __NO_M81_MATH_INLINES
 #include <math.h>
 
 #ifndef FUNC
diff --git a/sysdeps/m68k/fpu/s_modf.c b/sysdeps/m68k/fpu/s_modf.c
index f704260e21..426d847ebd 100644
--- a/sysdeps/m68k/fpu/s_modf.c
+++ b/sysdeps/m68k/fpu/s_modf.c
@@ -17,6 +17,7 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
 #include <ansidecl.h>
+#define __NO_M81_MATH_INLINES
 #include <math.h>
 
 #ifndef FUNC
diff --git a/sysdeps/m68k/isinfl.c b/sysdeps/m68k/s_isinfl.c
index 1b06d47d52..1b06d47d52 100644
--- a/sysdeps/m68k/isinfl.c
+++ b/sysdeps/m68k/s_isinfl.c
diff --git a/sysdeps/m68k/isnanl.c b/sysdeps/m68k/s_isnanl.c
index 38a9616593..38a9616593 100644
--- a/sysdeps/m68k/isnanl.c
+++ b/sysdeps/m68k/s_isnanl.c
diff --git a/sysdeps/mach/hurd/prof-freq.c b/sysdeps/mach/hurd/prof-freq.c
index 5c0d307bdb..a3707033a6 100644
--- a/sysdeps/mach/hurd/prof-freq.c
+++ b/sysdeps/mach/hurd/prof-freq.c
@@ -1,4 +1,2 @@
 /* __profile_frequency is in sysdeps/mach/hurd/profil.c.  This file
 is here as a place-holder to prevent the use of sysdeps/generic/prof-freq.c. */
-/* __profile_frequency is in sysdeps/mach/hurd/profil.c.  This file
-is here as a place-holder to prevent the use of sysdeps/generic/prof-freq.c. */
diff --git a/sysdeps/sparc/sqrt.c b/sysdeps/sparc/e_sqrt.c
index bff46e1644..614965d047 100644
--- a/sysdeps/sparc/sqrt.c
+++ b/sysdeps/sparc/e_sqrt.c
@@ -26,7 +26,7 @@ Cambridge, MA 02139, USA.  */
 
 /* Return the square root of X.  */
 double
-DEFUN(sqrt, (x), double x)
+DEFUN(__ieee754_sqrt, (x), double x)
 {
   register double result;
   asm("fsqrtd %1, %0" : "=f" (result) : "f" (x));
diff --git a/sysdeps/stub/cbrt.c b/sysdeps/stub/cbrt.c
deleted file mode 100644
index a330b051e5..0000000000
--- a/sysdeps/stub/cbrt.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright (C) 1992, 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <errno.h>
-#include <math.h>
-
-/* Return the cube root of X.  */
-double
-DEFUN(cbrt, (x), double x)
-{
-  errno = ENOSYS;
-  return 0.0;
-}
-
-
-stub_warning (cbrt)
diff --git a/sysdeps/stub/cos.c b/sysdeps/stub/cos.c
deleted file mode 100644
index 81cf1b603f..0000000000
--- a/sysdeps/stub/cos.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright (C) 1991, 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <errno.h>
-#include <math.h>
-
-/* Return the cosine of X.  */
-double
-DEFUN(cos, (x), double x)
-{
-  errno = ENOSYS;
-  return(0.0);
-}
-
-
-stub_warning (cos)
diff --git a/sysdeps/stub/drem.c b/sysdeps/stub/drem.c
deleted file mode 100644
index e4c7ceaa73..0000000000
--- a/sysdeps/stub/drem.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright (C) 1992, 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <errno.h>
-#include <math.h>
-
-/* Return the remainder of X/Y.  */
-double
-DEFUN(__drem, (x, y),
-      double x AND double y)
-{
-  errno = ENOSYS;
-  return 0.0;
-}
-
-stub_warning (drem)
-weak_alias (__drem, drem)
diff --git a/sysdeps/stub/isinf.c b/sysdeps/stub/isinf.c
deleted file mode 100644
index aa02eb19e3..0000000000
--- a/sysdeps/stub/isinf.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright (C) 1991, 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <math.h>
-
-/* Return 0 if VALUE is finite or NaN, +1 if it
-   is +Infinity, -1 if it is -Infinity.  */
-int
-DEFUN(__isinf, (value), double value)
-{
-  return 0;
-}
-weak_alias (__isinf, isinf)
-
-stub_warning (__isinf)
diff --git a/sysdeps/stub/isinfl.c b/sysdeps/stub/isinfl.c
deleted file mode 100644
index 71065c77fa..0000000000
--- a/sysdeps/stub/isinfl.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <math.h>
-
-#undef __isinfl
-#undef isinfl
-
-
-/* Return 0 if VALUE is finite or NaN, +1 if it
-   is +Infinity, -1 if it is -Infinity.  */
-int
-__isinfl (long double value)
-{
-  return 0;
-}
-
-weak_alias (__isinfl, isinfl);
diff --git a/sysdeps/stub/isnanl.c b/sysdeps/stub/isnanl.c
deleted file mode 100644
index c785b351b8..0000000000
--- a/sysdeps/stub/isnanl.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <math.h>
-
-#undef __isnanl
-#undef isnanl
-
-
-/* Return nonzero if VALUE is not a number.  */
-
-int
-__isnanl (long double value)
-{
-  return 0;
-}
-
-weak_alias (__isnanl, isnanl);
diff --git a/sysdeps/stub/logb.c b/sysdeps/stub/logb.c
deleted file mode 100644
index f5af6bfa05..0000000000
--- a/sysdeps/stub/logb.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright (C) 1992, 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <math.h>
-#include <errno.h>
-
-/* Return the base 2 signed integral exponent of X.  */
-double
-DEFUN(__logb, (x), double x)
-{
-  errno = ENOSYS;
-  return 0.0;
-}
-stub_warning (logb)
-weak_alias (__logb, logb)
diff --git a/sysdeps/stub/sin.c b/sysdeps/stub/sin.c
deleted file mode 100644
index 7100661dbb..0000000000
--- a/sysdeps/stub/sin.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright (C) 1991, 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <errno.h>
-#include <math.h>
-
-/* Return the sine of X.  */
-double
-DEFUN(sin, (x), double x)
-{
-  errno = ENOSYS;
-  return(0.0);
-}
-
-
-stub_warning (sin)
diff --git a/sysdeps/stub/sqrt.c b/sysdeps/stub/sqrt.c
deleted file mode 100644
index 8ca345972e..0000000000
--- a/sysdeps/stub/sqrt.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright (C) 1991, 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#include <errno.h>
-#include <math.h>
-
-/* Return the square root of X.  */
-double
-DEFUN(sqrt, (x), double x)
-{
-  errno = ENOSYS;
-  return(0.0);
-}
-
-
-stub_warning (sqrt)
diff --git a/sysdeps/tahoe/log10.c b/sysdeps/tahoe/log10.c
deleted file mode 100644
index 2cf2cee58b..0000000000
--- a/sysdeps/tahoe/log10.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Copyright (C) 1991 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#define	FPCONST(hi0, lo0, hi1, lo1)	{ (hi0), (lo0), (hi1), (lo1) }
-
-#include <../sysdeps/vax/log10.c>
-
diff --git a/sysdeps/unix/sysv/linux/alpha/Dist b/sysdeps/unix/sysv/linux/alpha/Dist
index d898d041a2..d79f1f2970 100644
--- a/sysdeps/unix/sysv/linux/alpha/Dist
+++ b/sysdeps/unix/sysv/linux/alpha/Dist
@@ -4,3 +4,4 @@ ioperm.c
 init-first.h
 clone.S
 sys/io.h
+llseek.S
diff --git a/sysdeps/unix/sysv/linux/i386/init-first.h b/sysdeps/unix/sysv/linux/i386/init-first.h
deleted file mode 100644
index 4c61f1b41e..0000000000
--- a/sysdeps/unix/sysv/linux/i386/init-first.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* The job of this fragment it to find argc and friends for INIT.
-   This is done in one of two ways: either in the stack context
-   of program start, or having dlopen pass them in.  */
-
-#define SYSDEP_CALL_INIT(NAME, INIT)					      \
-void NAME (void *arg)							      \
-{									      \
-  int argc;								      \
-  char **argv, **envp;							      \
-									      \
-  __libc_multiple_libcs = &_dl_starting_up && !_dl_starting_up;		      \
-									      \
-  if (!__libc_multiple_libcs)						      \
-    {									      \
-      argc = (int) arg;							      \
-      argv = (char **) &arg + 1;					      \
-      envp = &argv[argc+1];						      \
-    }									      \
-  else									      \
-    {									      \
-      argc = (int) arg;							      \
-      argv = ((char ***) &arg)[1];					      \
-      envp = ((char ***) &arg)[2];					      \
-    }									      \
-									      \
-  INIT (argc, argv, envp);						      \
-}
diff --git a/sysdeps/unix/sysv/linux/m68k/init-first.h b/sysdeps/unix/sysv/linux/m68k/init-first.h
deleted file mode 100644
index 7d8c320b0a..0000000000
--- a/sysdeps/unix/sysv/linux/m68k/init-first.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/* This fragment is invoked in the stack context of program start.
-   Its job is to set up a pointer to argc as an argument, pass
-   control to `INIT', and, if necessary, clean up after the call
-   to leave the stack in the same condition it was found in.  */
-
-#define SYSDEP_CALL_INIT(NAME, INIT)	\
-    asm(".globl " #NAME "\n\t"		\
-	#NAME ":\n\t"			\
-	"pea %sp@(4)\n\t"		\
-	"jbsr " #INIT "\n\t"		\
-	"addq #4,%sp\n\t"		\
-	"rts");
diff --git a/sysdeps/vax/Dist b/sysdeps/vax/Dist
index 9830be29a4..22a693094a 100644
--- a/sysdeps/vax/Dist
+++ b/sysdeps/vax/Dist
@@ -1 +1,2 @@
 DEFS.h
+fl.h
diff --git a/sysdeps/vax/bcmp.s b/sysdeps/vax/bcmp.s
deleted file mode 100644
index d980feb8e4..0000000000
--- a/sysdeps/vax/bcmp.s
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 1983 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by the University of
- *	California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-	.asciz "@(#)bcmp.s	5.6 (Berkeley) 6/1/90"
-#endif /* LIBC_SCCS and not lint */
-
-/* bcmp(s1, s2, n) */
-
-#include "DEFS.h"
-
-ENTRY(bcmp, 0)
-	movl	4(ap),r1
-	movl	8(ap),r3
-	movl	12(ap),r4
-1:
-	movzwl	$65535,r0
-	cmpl	r4,r0
-	jleq	2f
-	subl2	r0,r4
-	cmpc3	r0,(r1),(r3)
-	jeql	1b
-	addl2	r4,r0
-	ret
-2:
-	cmpc3	r4,(r1),(r3)
-	ret
diff --git a/sysdeps/vax/index.s b/sysdeps/vax/index.s
deleted file mode 100644
index e599b276f0..0000000000
--- a/sysdeps/vax/index.s
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 1980 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by the University of
- *	California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-	.asciz "@(#)index.s	5.6 (Berkeley) 6/1/90"
-#endif /* LIBC_SCCS and not lint */
-
-/*
- * Find the first occurence of c in the string cp.
- * Return pointer to match or null pointer.
- *
- * char *
- * index(cp, c)
- *	char *cp, c;
- */
-#include "DEFS.h"
-
-ENTRY(index, 0)
-	movq	4(ap),r1	# r1 = cp; r2 = c
-	tstl	r2		# check for special case c == '\0'
-	bneq	2f
-1:
-	locc	$0,$65535,(r1)	# just find end of string
-	beql	1b		# still looking
-	movl	r1,r0		# found it
-	ret
-2:
-	moval	tbl,r3		# r3 = address of table
-	bbss	$0,(r3),5f	# insure not reentering
-	movab	(r3)[r2],r5	# table entry for c
-	incb	(r5)
-	movzwl	$65535,r4	# fast access
-3:
-	scanc	r4,(r1),(r3),$1	# look for c or '\0'
-	beql	3b		# still looking
-	movl	r1,r0		# return pointer to char
-	tstb	(r0)		#    if have found '\0'
-	bneq	4f
-	clrl	r0		# else return 0
-4:
-	clrb	(r5)		# clean up table
-	clrb	(r3)
-	ret
-
-	.data
-tbl:	.space	256
-	.text
-
-/*
- * Reentrant, but slower version of index
- */
-5:
-	movl	r1,r3
-6:
-	locc	$0,$65535,(r3)	# look for '\0'
-	bneq	7f
-	locc	r2,$65535,(r3)	# look for c
-	bneq	8f
-	movl	r1,r3		# reset pointer and ...
-	jbr	6b		# ... try again
-7:
-	subl3	r3,r1,r4	# length of short block
-	incl	r4		# +1 for '\0'
-	locc	r2,r4,(r3)	# look for c
-	bneq	8f
-	ret
-8:
-	movl	r1,r0		# return pointer to char
-	ret
diff --git a/sysdeps/vax/infnan.c b/sysdeps/vax/infnan.c
deleted file mode 100644
index 62ec9dca0f..0000000000
--- a/sysdeps/vax/infnan.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Copyright (C) 1991, 1992, 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#ifndef	__GNUC__
-  #error This file uses GNU C extensions; you must compile with GCC.
-#else
-
-#include <ansidecl.h>
-#include <errno.h>
-#include <math.h>
-
-/* Deal with an infinite or NaN result.
-   If ERROR is ERANGE, result is +Inf;
-   if ERROR is - ERANGE, result is -Inf;
-   otherwise result is NaN.
-   This will set `errno' to either ERANGE or EDOM,
-   and may return an infinity or NaN, or may do something else.  */
-double
-DEFUN(__infnan, (error), int error)
-{
-  switch (error)
-    {
-    case ERANGE:
-      errno = ERANGE;
-      break;
-
-    case - ERANGE:
-      errno = ERANGE;
-      break;
-
-    default:
-      errno = EDOM;
-      break;
-    }
-
-  /* Trigger a reserved operand fault.  */
-  {
-    double result;
-    asm volatile("emodd %1, %1, %2, %0, %0" : "=r" (result) :
-		 "i" (0), "i" (0x8000));
-    return result;
-  }
-}
-
-#endif
-
-weak_alias (__infnan, infnan)
diff --git a/sysdeps/vax/log10.c b/sysdeps/vax/log10.c
deleted file mode 100644
index 08741779eb..0000000000
--- a/sysdeps/vax/log10.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Copyright (C) 1991 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-
-#ifndef	FPCONST
-#define	FPCONST(hi0, lo0, hi1, lo1)	{ (lo0), (hi0), (lo1), (hi1) }
-#endif
-
-static CONST short int ln10[] = FPCONST(0x4113, 0x5d8d, 0xddaa, 0xa8ac);
-#define	LN10	(*(CONST double *) ln10)
-
-#include <../sysdeps/generic/log10.c>
diff --git a/sysdeps/vax/memcmp.s b/sysdeps/vax/memcmp.s
index 3854fd8e4a..f7e47ded46 100644
--- a/sysdeps/vax/memcmp.s
+++ b/sysdeps/vax/memcmp.s
@@ -59,3 +59,5 @@ ENTRY(memcmp, 0)
 	cmpc3	r5,(r1),(r3)
 	jeql	0b		/* loop if same */
 	jbr	1b
+
+weak_alias (memcmp, bcmp)
diff --git a/sysdeps/vax/rindex.s b/sysdeps/vax/rindex.s
deleted file mode 100644
index 76d7e29597..0000000000
--- a/sysdeps/vax/rindex.s
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (c) 1983 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by the University of
- *	California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-	.asciz "@(#)rindex.s	5.6 (Berkeley) 6/1/90"
-#endif /* LIBC_SCCS and not lint */
-
-/*
- * Find the last occurence of c in the string cp.
- * Return pointer to match or null pointer.
- *
- * char *
- * rindex(cp, c)
- *	char *cp, c;
- */
-#include "DEFS.h"
-
-ENTRY(rindex, 0)
-	movq	4(ap),r1	# r1 = cp; r2 = c
-	tstl	r2		# check for special case c == '\0'
-	bneq	2f
-1:
-	locc	$0,$65535,(r1)	# just find end of string
-	beql	1b		# still looking
-	movl	r1,r0		# found it
-	ret
-2:
-	moval	tbl,r3		# r3 = address of table
-	bbss	$0,(r3),5f	# insure not reentering
-	movab	(r3)[r2],r5	# table entry for c
-	incb	(r5)
-	clrl	r4		# last found
-3:
-	scanc	$65535,(r1),(r3),$1	# look for c or '\0'
-	beql	3b		# keep looking
-	tstb	(r1)		# if have found '\0'
-	beql	4f		#    we are done
-	movl	r1,r4		# save most recently found
-	incl	r1		# skip over character
-	jbr	3b		# keep looking
-4:
-	movl	r4,r0		# return last found (if any)
-	clrb	(r5)		# clean up table
-	clrb	(r3)
-	ret
-
-	.data
-tbl:	.space	256
-	.text
-
-/*
- * Reentrant, but slower version of rindex
- */
-5:
-	movl	r1,r3
-	clrl	r4		# r4 = pointer to last match
-6:
-	locc	$0,$65535,(r3)	# look for '\0'
-	bneq	8f
-	decw	r0		# r0 = 65535
-1:
-	locc	r2,r0,(r3)	# look for c
-	bneq	7f
-	movl	r1,r3		# reset pointer and ...
-	jbr	6b		# ... try again
-7:
-	movl	r1,r4		# stash pointer ...
-	addl3	$1,r1,r3	# ... skip over match and ...
-	decl	r0		# ... decrement count
-	jbr	6b		# ... try again
-8:
-	subl3	r3,r1,r0	# length of short block
-	incl	r0		# +1 for '\0'
-9:
-	locc	r2,r0,(r3)	# look for c
-	beql	0f
-	movl	r1,r4		# stash pointer ...
-	addl3	$1,r1,r3	# ... skip over match ...
-	decl	r0		# ... adjust count and ...
-	jbr	9b		# ... try again
-0:
-	movl	r4,r0		# return stashed pointer
-	ret
diff --git a/sysdeps/vax/strchr.s b/sysdeps/vax/strchr.s
index 18b53838ec..1683f564e2 100644
--- a/sysdeps/vax/strchr.s
+++ b/sysdeps/vax/strchr.s
@@ -103,3 +103,5 @@ Lreent:
 	beql	2f		/* not found: return NULL */
 	movl	r1,r0
 2:	ret
+
+weak_alias (strchr, index)
diff --git a/sysdeps/vax/strrchr.s b/sysdeps/vax/strrchr.s
index f292eaceab..dffcddaef0 100644
--- a/sysdeps/vax/strrchr.s
+++ b/sysdeps/vax/strrchr.s
@@ -112,3 +112,5 @@ Lreent:
 3:
 	movl	r5,r0		/* return stashed pointer */
 	ret
+
+weak_alias (strrchr, rindex)
diff --git a/time/africa b/time/africa
index d55b598912..110f540064 100644
--- a/time/africa
+++ b/time/africa
@@ -1,10 +1,10 @@
-# @(#)africa	7.13
+# @(#)africa	7.14
 
 # 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
 # tz@elsie.nci.nih.gov for general use in the future).
 
-# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+# From Paul Eggert <eggert@twinsun.com> (1996-09-03):
 #
 # A good source for time zone historical data outside the U.S. is
 # Thomas G. Shanks, The International Atlas (3rd edition),
@@ -61,64 +61,95 @@
 #	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.
+# For time zone abbreviations like `EST' I used the following rules,
+# in decreasing order of importance:
+#
+#	Use abbreviations that consist of 3 or more upper-case Ascii letters,
+#		except use "___" for locations while uninhabited.
+#		Posix.1 requires at least 3 characters, and the restriction to
+#		upper-case Ascii letters follows most traditions.
+#		Previous editions of this database also used characters like
+#		' ' and '?', but these characters have a special meaning to
+#		the shell and cause commands like
+#			set `date`
+#		to have unexpected effects.  In theory, the character set could
+#		be !%./@A-Z^_a-z{}, but these tables use only upper-case
+#		Ascii letters (and "___").
+#	Use abbreviations that are in common use among English-speakers,
+#		e.g. `EST' for Eastern Standard Time in North America.
+#		We assume that applications translate them to other languages
+#		as part of the normal localization process; for example,
+#		a French application might translate `EST' to `HNE'.
+#	For zones whose times are taken from a city's longitude, use the
+#		traditional xMT notation, e.g. `PMT' for Paris Mean Time.
+#		The only name like this in current use is `GMT'.
+#	If there is no common English abbreviation, abbreviate the English
+#		translation of the usual phrase used by native speakers.
+#		If this is not available or is a phrase mentioning the country
+#		(e.g. ``Cape Verde Time''), then:
+#
+#		When a country has a single or principal time zone region,
+#			append `T' to the country's ISO	code, e.g. `CVT' for
+#			Cape Verde Time.  For summer time append `ST';
+#			for double summer time append `DST'; etc.
+#		When a country has multiple time zones, take the first three
+#			letters of an English place name identifying each zone
+#			and then append `T', `ST', etc. as before;
+#			e.g. `MOSST' for MOScow Summer Time.
 #
-# I made up the following time zone abbreviations; corrections are welcome!
+#
+# For Africa I invented the following time zone abbreviations.
 #		LMT	Local Mean Time
-#	-2:00	CVT	Cape Verde Time (no longer used)
-#	-1:00	AAT	Atlantic Africa Time
+#	-1:00	AAT	Atlantic Africa Time (no longer used)
 #	 0:00	WAT	West Africa Time
 #	 1:00	CAT	Central Africa Time
 #	 2:00	SAT	South Africa Time
 #	 3:00	EAT	East Africa Time
-#	 4:00	SMT	Seychelles and Mascarene Time
 # The final `T' is replaced by `ST' for summer time, e.g. `SAST'.
 # BEAT is British East Africa Time, which was 2:30 before 1948 and 2:45 after.
 
 
 # Algeria
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Algeria	1916	only	-	Jun	14	23:00s	1:00	" DST"
+Rule	Algeria	1916	only	-	Jun	14	23:00s	1:00	S
 Rule	Algeria	1916	1919	-	Oct	Sun<=7	23:00s	0	-
-Rule	Algeria	1917	only	-	Mar	24	23:00s	1:00	" DST"
-Rule	Algeria	1918	only	-	Mar	 9	23:00s	1:00	" DST"
-Rule	Algeria	1919	only	-	Mar	 1	23:00s	1:00	" DST"
-Rule	Algeria	1920	only	-	Feb	14	23:00s	1:00	" DST"
+Rule	Algeria	1917	only	-	Mar	24	23:00s	1:00	S
+Rule	Algeria	1918	only	-	Mar	 9	23:00s	1:00	S
+Rule	Algeria	1919	only	-	Mar	 1	23:00s	1:00	S
+Rule	Algeria	1920	only	-	Feb	14	23:00s	1:00	S
 Rule	Algeria	1920	only	-	Oct	23	23:00s	0	-
-Rule	Algeria	1921	only	-	Mar	14	23:00s	1:00	" DST"
+Rule	Algeria	1921	only	-	Mar	14	23:00s	1:00	S
 Rule	Algeria	1921	only	-	Jun	21	23:00s	0	-
-Rule	Algeria	1939	only	-	Sep	11	23:00s	1:00	" DST"
+Rule	Algeria	1939	only	-	Sep	11	23:00s	1:00	S
 Rule	Algeria	1939	only	-	Nov	19	 1:00	0	-
-Rule	Algeria	1944	1945	-	Apr	Mon<=7	 2:00	1:00	" DST"
+Rule	Algeria	1944	1945	-	Apr	Mon<=7	 2:00	1:00	S
 Rule	Algeria	1944	only	-	Oct	 8	 2:00	0	-
 Rule	Algeria	1945	only	-	Sep	16	 1:00	0	-
-Rule	Algeria	1971	only	-	Apr	25	23:00s	1:00	" DST"
+Rule	Algeria	1971	only	-	Apr	25	23:00s	1:00	S
 Rule	Algeria	1971	only	-	Sep	26	23:00s	0	-
-Rule	Algeria	1977	only	-	May	 6	 0:00	1:00	" DST"
+Rule	Algeria	1977	only	-	May	 6	 0:00	1:00	S
 Rule	Algeria	1977	only	-	Oct	21	 0:00	0	-
-Rule	Algeria	1978	only	-	Mar	24	 1:00	1:00	" DST"
+Rule	Algeria	1978	only	-	Mar	24	 1:00	1:00	S
 Rule	Algeria	1978	only	-	Sep	22	 3:00	0	-
-Rule	Algeria	1980	only	-	Apr	25	 0:00	1:00	" DST"
+Rule	Algeria	1980	only	-	Apr	25	 0:00	1:00	S
 Rule	Algeria	1980	only	-	Oct	31	 2:00	0	-
 # Shanks gives 0:09 for Paris Mean Time; go with Howse's more precise 0:09:21.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Algiers	0:12:12 -	LMT	1891 Mar 15 0:01
 			0:09:21	-	PMT	1911 Mar 11    # Paris Mean Time
-			0:00	Algeria	WET%s	1940 Feb 25 2:00
-			1:00	Algeria	MET%s	1946 Oct  7
+			0:00	Algeria	WE%sT	1940 Feb 25 2:00
+			1:00	Algeria	CE%sT	1946 Oct  7
 			0:00	-	WET	1956 Jan 29
-			1:00	-	MET	1963 Apr 14
-			0:00	Algeria	WET%s	1977 Oct 21
-			1:00	Algeria	MET%s	1979 Oct 26
-			0:00	Algeria	WET%s	1981 May
-			1:00	-	MET
+			1:00	-	CET	1963 Apr 14
+			0:00	Algeria	WE%sT	1977 Oct 21
+			1:00	Algeria	CE%sT	1979 Oct 26
+			0:00	Algeria	WE%sT	1981 May
+			1:00	-	CET
 
 # Angola
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Luanda	0:52:56	-	LMT	1892
-			0:52	-	LMT	1911 May 26 # Luanda Mean Time
+			0:52:04	-	LMT	1911 May 26 # Luanda Mean Time?
 			1:00	-	CAT
 
 # Bassas da India
@@ -160,7 +191,7 @@ Zone Atlantic/Cape_Verde -1:34:04 -	LMT	1907			# Praia
 			-2:00	-	CVT	1942 Sep
 			-2:00	1:00	CVST	1945 Oct 15
 			-2:00	-	CVT	1975 Nov 25 2:00
-			-1:00	-	AAT
+			-1:00	-	CVT
 
 # Central African Republic
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -211,28 +242,28 @@ Zone	Africa/Djibouti	2:52:36 -	LMT	1911 Jul
 
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Egypt	1940	only	-	Jul	15	0:00	1:00	" DST"
+Rule	Egypt	1940	only	-	Jul	15	0:00	1:00	S
 Rule	Egypt	1940	only	-	Oct	 1	0:00	0	-
-Rule	Egypt	1941	only	-	Apr	15	0:00	1:00	" DST"
+Rule	Egypt	1941	only	-	Apr	15	0:00	1:00	S
 Rule	Egypt	1941	only	-	Sep	16	0:00	0	-
-Rule	Egypt	1942	1944	-	Apr	 1	0:00	1:00	" DST"
+Rule	Egypt	1942	1944	-	Apr	 1	0:00	1:00	S
 Rule	Egypt	1942	only	-	Oct	27	0:00	0	-
 Rule	Egypt	1943	1945	-	Nov	 1	0:00	0	-
-Rule	Egypt	1945	only	-	Apr	16	0:00	1:00	" DST"
-Rule	Egypt	1957	only	-	May	10	0:00	1:00	" DST"
+Rule	Egypt	1945	only	-	Apr	16	0:00	1:00	S
+Rule	Egypt	1957	only	-	May	10	0:00	1:00	S
 Rule	Egypt	1957	1958	-	Oct	 1	0:00	0	-
-Rule	Egypt	1958	only	-	May	 1	0:00	1:00	" DST"
-Rule	Egypt	1959	1981	-	May	 1	1:00	1:00	" DST"
+Rule	Egypt	1958	only	-	May	 1	0:00	1:00	S
+Rule	Egypt	1959	1981	-	May	 1	1:00	1:00	S
 Rule	Egypt	1959	1965	-	Sep	30	3:00	0	-
 Rule	Egypt	1966	max	-	Oct	 1	3:00	0	-
-Rule	Egypt	1982	only	-	Jul	25	1:00	1:00	" DST"
-Rule	Egypt	1983	only	-	Jul	12	1:00	1:00	" DST"
-Rule	Egypt	1984	1988	-	May	 1	1:00	1:00	" DST"
-Rule	Egypt	1989	only	-	May	 6	1:00	1:00	" DST"
-Rule	Egypt	1990	max	-	May	 1	1:00	1:00	" DST"
+Rule	Egypt	1982	only	-	Jul	25	1:00	1:00	S
+Rule	Egypt	1983	only	-	Jul	12	1:00	1:00	S
+Rule	Egypt	1984	1988	-	May	 1	1:00	1:00	S
+Rule	Egypt	1989	only	-	May	 6	1:00	1:00	S
+Rule	Egypt	1990	max	-	May	 1	1:00	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Cairo	2:05:00 -	LMT	1900 Oct
-			2:00	Egypt	EET%s
+			2:00	Egypt	EE%sT
 
 # Equatorial Guinea
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -243,14 +274,14 @@ Zone	Africa/Malabo	0:35:08 -	LMT	1912
 # Eritrea
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Asmera	2:35:32 -	LMT	1870
-			2:36	-	AMT	1890	      # Asmera Mean Time
-			2:35	-	AAMT	1936 May 5    # Addis Ababa MT
+			2:35:32	-	AMT	1890	      # Asmera Mean Time
+			2:35:20	-	AAMT	1936 May 5    # Addis Ababa MT?
 			3:00	-	EAT
 
 # Ethiopia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Africa/Addis_Ababa	2:34:48 -	LMT	1870
-			2:35	-	AAMT	1936 May 5    # Addis Ababa MT
+			2:35:20	-	AAMT	1936 May 5    # Addis Ababa MT?
 			3:00	-	EAT
 
 # Europa Island
@@ -264,17 +295,17 @@ Zone Africa/Libreville	0:37:48 -	LMT	1912
 # Gambia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Banjul	-1:06:36 -	LMT	1912
-			-1:07	-	BMT	1935	# Banjul Mean Time
+			-1:06:36 -	BMT	1935	# Banjul Mean Time
 			-1:00	-	AAT	1964
 			 0:00	-	WAT
 
 # Ghana
-# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
-# WATDT is my invention for ``West Africa one-Third Daylight Time''.
+# From Paul Eggert <eggert@twinsun.com> (1996-09-03):
+# WATST is my invention for ``West Africa one-Third Summer Time''.
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 # Whitman says DST was observed from 1931 to ``the present''; go with Shanks.
-Rule	Ghana	1936	1942	-	Sep	 1	0:00	0:20	WATDT
+Rule	Ghana	1936	1942	-	Sep	 1	0:00	0:20	WATST
 Rule	Ghana	1936	1942	-	Dec	31	0:00	0	WAT
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Accra	-0:00:52 -	LMT	1918
@@ -329,7 +360,7 @@ Zone	Africa/Maseru	1:50:00 -	LMT	1903 Mar
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Monrovia	-0:43:08 -	LMT	1882
 			-0:43:08 -	MMT	1919 Mar # Monrovia Mean Time
-			-0:44:30 -	LST	1972 May # Liberia Standard Time
+			-0:44:30 -	LRT	1972 May # Liberia Time
 			 0:00	-	WAT
 
 ###############################################################################
@@ -345,28 +376,28 @@ Zone	Africa/Monrovia	-0:43:08 -	LMT	1882
 
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Libya	1951	only	-	Oct	14	2:00	1:00	" DST"
+Rule	Libya	1951	only	-	Oct	14	2:00	1:00	S
 Rule	Libya	1952	only	-	Jan	 1	0:00	0	-
-Rule	Libya	1953	only	-	Oct	 9	2:00	1:00	" DST"
+Rule	Libya	1953	only	-	Oct	 9	2:00	1:00	S
 Rule	Libya	1954	only	-	Jan	 1	0:00	0	-
-Rule	Libya	1955	only	-	Sep	30	0:00	1:00	" DST"
+Rule	Libya	1955	only	-	Sep	30	0:00	1:00	S
 Rule	Libya	1956	only	-	Jan	 1	0:00	0	-
-Rule	Libya	1982	1984	-	Apr	 1	0:00	1:00	" DST"
+Rule	Libya	1982	1984	-	Apr	 1	0:00	1:00	S
 Rule	Libya	1982	1985	-	Oct	 1	0:00	0	-
-Rule	Libya	1985	only	-	Apr	 6	0:00	1:00	" DST"
-Rule	Libya	1986	only	-	Apr	 4	0:00	1:00	" DST"
+Rule	Libya	1985	only	-	Apr	 6	0:00	1:00	S
+Rule	Libya	1986	only	-	Apr	 4	0:00	1:00	S
 Rule	Libya	1986	only	-	Oct	 3	0:00	0	-
-Rule	Libya	1987	1989	-	Apr	 1	0:00	1:00	" DST"
+Rule	Libya	1987	1989	-	Apr	 1	0:00	1:00	S
 Rule	Libya	1987	1990	-	Oct	 1	0:00	0	-
-Rule	Libya	1990	only	-	May	 4	0:00	1:00	" DST"
+Rule	Libya	1990	only	-	May	 4	0:00	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Tripoli	0:52:44 -	LMT	1920
-			1:00	Libya	MET%s	1959
+			1:00	Libya	CE%sT	1959
 			2:00	-	EET	1982
 # From Paul Eggert <eggert@twinsun.com> (1995-12-19):
 # usno1995 (from OAG) says Libya uses 2:00 all year, as they did before 1982.
 # We don't know when they switched back.  We'll guess 1991.
-			1:00	Libya	MET%s	1991
+			1:00	Libya	CE%sT	1991
 			2:00	-	EET
 
 # Madagascar
@@ -401,7 +432,7 @@ Zone Africa/Nouakchott	-1:03:48 -	LMT	1912
 # Mauritius
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Indian/Mauritius	3:50:00 -	LMT	1907		# Port Louis
-			4:00	-	SMT
+			4:00	-	MUT	# Mauritius Time
 # Agalega Is, Rodriguez
 # no information; probably like Indian/Mauritius
 
@@ -411,29 +442,31 @@ Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
 			3:00	-	EAT
 
 # Morocco
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Morocco	1939	only	-	Sep	12	 0:00	1:00	" DST"
+# rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+Rule	Morocco	1939	only	-	Sep	12	 0:00	1:00	S
 Rule	Morocco	1939	only	-	Nov	19	 0:00	0	-
-Rule	Morocco	1940	only	-	Feb	25	 0:00	1:00	" DST"
+Rule	Morocco	1940	only	-	Feb	25	 0:00	1:00	S
 Rule	Morocco	1945	only	-	Nov	18	 0:00	0	-
-Rule	Morocco	1950	only	-	Jun	11	 0:00	1:00	" DST"
+Rule	Morocco	1950	only	-	Jun	11	 0:00	1:00	S
 Rule	Morocco	1950	only	-	Oct	29	 0:00	0	-
-Rule	Morocco	1967	only	-	Jun	 3	12:00	1:00	" DST"
+Rule	Morocco	1967	only	-	Jun	 3	12:00	1:00	S
 Rule	Morocco	1967	only	-	Oct	 1	 0:00	0	-
-Rule	Morocco	1974	only	-	Jun	24	 0:00	1:00	" DST"
+Rule	Morocco	1974	only	-	Jun	24	 0:00	1:00	S
 Rule	Morocco	1974	only	-	Sep	 1	 0:00	0	-
-Rule	Morocco	1976	1977	-	May	 1	 0:00	1:00	" DST"
+Rule	Morocco	1976	1977	-	May	 1	 0:00	1:00	S
 Rule	Morocco	1976	only	-	Aug	 1	 0:00	0	-
 Rule	Morocco	1977	only	-	Sep	28	 0:00	0	-
-Rule	Morocco	1978	only	-	Jun	 1	 0:00	1:00	" DST"
+Rule	Morocco	1978	only	-	Jun	 1	 0:00	1:00	S
 Rule	Morocco	1978	only	-	Aug	 4	 0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Africa/Casablanca	-0:30:20 -	LMT	1913 Oct 26
-			 0:00	Morocco	WET%s	1984 Mar 16
-			 1:00	-	MET	1986
+			 0:00	Morocco	WE%sT	1984 Mar 16
+			 1:00	-	CET	1986
+			 0:00	-	WET
+# Western Sahara
+Zone Africa/El_Aaiun	-0:52:48 -	LMT	1934 Jan
+			-1:00	-	AAT	1976 Apr 14
 			 0:00	-	WET
-# The following are controlled by Spain, and are like Europe/Madrid:
-# Alboran, Alhucemas Is, Ceuta, Chafarinas Is, Melilla.
 
 # Mozambique
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -463,7 +496,7 @@ Zone	Africa/Lagos	0:13:36 -	LMT	1919 Sep
 # Reunion
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Indian/Reunion	3:41:52 -	LMT	1911 Jun	# Saint-Denis
-			4:00	-	SMT
+			4:00	-	RET	# Reunion Time
 
 # Rwanda
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -473,7 +506,7 @@ Zone	Africa/Kigali	2:00:16 -	LMT	1935 Jun
 # St Helena
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Atlantic/St_Helena	-0:22:48 -	LMT	1890		# Jamestown
-			-0:06	-	?MT	1951	# a typo in Shanks?
+			-0:06	-	SHT	1951	# St Helena Time (?)
 			 0:00	-	GMT
 # The other parts of the St Helena territory are similar:
 #	Tristan da Cunha: on GMT, says Whitman
@@ -483,7 +516,7 @@ Zone Atlantic/St_Helena	-0:22:48 -	LMT	1890		# Jamestown
 # Sao Tome and Principe
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Sao_Tome	 0:26:56 -	LMT	1884
-			-0:37	-	?MT	1912	# a typo in Shanks?
+			-0:36:32 -	LMT	1912	# Lisbon Mean Time
 			 0:00	-	WAT
 
 # Senegal
@@ -495,7 +528,7 @@ Zone	Africa/Dakar	-1:09:44 -	LMT	1912
 # Seychelles
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Indian/Mahe	3:41:48 -	LMT	1906 Jun	# Victoria
-			4:00	-	SMT
+			4:00	-	SCT	# Seychelles Time
 
 # Sierra Leone
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -506,7 +539,7 @@ Rule	SL	1957	1962	-	Jun	 1	0:00	1:00	S
 Rule	SL	1957	1962	-	Sep	 1	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Freetown	-0:53:00 -	LMT	1882
-			-0:53	-	FMT	1913 Jun
+			-0:53:00 -	FMT	1913 Jun # Freetown Mean Time
 			-1:00	SL	AA%sT	1957
 			 0:00	SL	WA%sT
 
@@ -537,13 +570,13 @@ Zone Africa/Johannesburg 1:52:00 -	LMT	1892 Feb 8
 # I verified this today by telephone with the Sudan Mission to the
 # United Nations: 212-573-6033
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Sudan	1970	only	-	May	 1	0:00	1:00	" DST"
+Rule	Sudan	1970	only	-	May	 1	0:00	1:00	S
 Rule	Sudan	1970	1985	-	Oct	15	0:00	0	-
-Rule	Sudan	1971	only	-	Apr	30	0:00	1:00	" DST"
-Rule	Sudan	1972	1985	-	Apr	lastSun	0:00	1:00	" DST"
+Rule	Sudan	1971	only	-	Apr	30	0:00	1:00	S
+Rule	Sudan	1972	1985	-	Apr	lastSun	0:00	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Khartoum	2:10:08 -	LMT	1931
-			2:00	Sudan	EET%s
+			2:00	Sudan	EE%sT
 
 # Swaziland
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -567,34 +600,34 @@ Zone	Africa/Lome	0:04:52 -	LMT	1893
 
 # Tunisia
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Tunisia	1939	only	-	Apr	15	23:00s	1:00	" DST"
+Rule	Tunisia	1939	only	-	Apr	15	23:00s	1:00	S
 Rule	Tunisia	1939	only	-	Nov	18	23:00s	0	-
-Rule	Tunisia	1940	only	-	Feb	25	23:00s	1:00	" DST"
+Rule	Tunisia	1940	only	-	Feb	25	23:00s	1:00	S
 Rule	Tunisia	1941	only	-	Oct	 6	 0:00	0	-
-Rule	Tunisia	1942	only	-	Mar	 9	 0:00	1:00	" DST"
+Rule	Tunisia	1942	only	-	Mar	 9	 0:00	1:00	S
 Rule	Tunisia	1942	only	-	Nov	 2	 3:00	0	-
-Rule	Tunisia	1943	only	-	Mar	29	 2:00	1:00	" DST"
+Rule	Tunisia	1943	only	-	Mar	29	 2:00	1:00	S
 Rule	Tunisia	1943	only	-	Apr	17	 2:00	0	-
-Rule	Tunisia	1943	only	-	Apr	25	 2:00	1:00	" DST"
+Rule	Tunisia	1943	only	-	Apr	25	 2:00	1:00	S
 Rule	Tunisia	1943	only	-	Oct	 4	 2:00	0	-
-Rule	Tunisia	1944	1945	-	Apr	Mon>=1	 2:00	1:00	" DST"
+Rule	Tunisia	1944	1945	-	Apr	Mon>=1	 2:00	1:00	S
 Rule	Tunisia	1944	only	-	Oct	 8	 0:00	0	-
 Rule	Tunisia	1945	only	-	Sep	16	 0:00	0	-
-Rule	Tunisia	1977	only	-	Apr	30	 0:00s	1:00	" DST"
+Rule	Tunisia	1977	only	-	Apr	30	 0:00s	1:00	S
 Rule	Tunisia	1977	only	-	Sep	24	 0:00s	0	-
-Rule	Tunisia	1978	only	-	May	 1	 0:00s	1:00	" DST"
+Rule	Tunisia	1978	only	-	May	 1	 0:00s	1:00	S
 Rule	Tunisia	1978	only	-	Oct	 1	 0:00s	0	-
-Rule	Tunisia	1988	only	-	Jun	 1	 0:00s	1:00	" DST"
+Rule	Tunisia	1988	only	-	Jun	 1	 0:00s	1:00	S
 Rule	Tunisia	1988	max	-	Sep	lastSun	 0:00s	0	-
-Rule	Tunisia	1989	only	-	Mar	26	 0:00s	1:00	" DST"
-Rule	Tunisia	1990	only	-	May	 1	 0:00s	1:00	" DST"
-Rule	Tunisia	1991	max	-	Mar	lastSun	 0:00s	1:00	" DST"
+Rule	Tunisia	1989	only	-	Mar	26	 0:00s	1:00	S
+Rule	Tunisia	1990	only	-	May	 1	 0:00s	1:00	S
+Rule	Tunisia	1991	max	-	Mar	lastSun	 0:00s	1:00	S
 # Shanks gives 0:09 for Paris Mean Time; go with Howse's more precise 0:09:21.
 # Shanks says the 1911 switch occurred on Mar 9; go with Howse's Mar 11.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Tunis	0:40:44 -	LMT	1881 May 12
 			0:09:21	-	PMT	1911 Mar 11    # Paris Mean Time
-			1:00	Tunisia	MET%s
+			1:00	Tunisia	CE%sT
 
 # Uganda
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -608,7 +641,7 @@ Zone	Africa/Kampala	2:09:40 -	LMT	1928 Jul
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Africa/Kinshasa	1:01:12 -	LMT	1897 Nov 9
 			1:00	-	CAT
-Zone Africa/Lumumbashi	1:49:52 -	LMT	1897 Nov 9
+Zone Africa/Lubumbashi	1:49:52 -	LMT	1897 Nov 9
 			2:00	-	SAT
 
 # Zambia
diff --git a/time/antarctica b/time/antarctica
index 3c46c1576c..0c78eb6826 100644
--- a/time/antarctica
+++ b/time/antarctica
@@ -1,25 +1,151 @@
-# @(#)antarctica	7.3
+# @(#)antarctica	7.4
 
-# From Arthur David Olson (February 13, 1988):
-# No data available.
+# From Paul Eggert (1996-09-03):
+# To keep things manageable, we list only locations occupied year-round;
+# see <URL:http://earth.agu.org/amen/nations.html> (1996-05-24).
+# Unless otherwise specified, we have no time zone information.
+#
+# I made up all time zone abbreviations mentioned here; corrections welcome!
+# FORMAT is `___' and GMTOFF is 0 for locations while uninhabited.
 
-# Balleny Is
 
-# British Antarctic Territories include
-#	South Orkney Is
-#	South Shetland Is
+# Argentina - 6 year-round bases
+# General Belgrano II
+# 5 others
 
-# Bouvet
-# uninhabited
+# Australia - territories
+# Heard Island, McDonald Islands
+#
+# year-round bases
+# Casey, Bailey Peninsula, since 1969
+# Davis, Vestfold Hills, since 1957-01-13 (except 1965-01 -  1969-02)
+# Mawson, Holme Bay, since 1954-02-13
+# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+Zone Antarctica/Casey	0	-	___	1969
+			8:00	-	WST	# Western (Aus) Standard Time
+#Zone Antartica/Davis	unknown
+Zone Antarctica/Mawson	0	-	___	1954 Feb 13
+			6:00	-	MAWT	# Mawson Time
+# References:
+# <URL:http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html> (1996-07-15)
+# <URL:http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html> (1996-04-19)
 
-# French Southern and Antarctic Lands (no indigenous inhabitants) include
-#	Amsterdam Island
-#	Crozet Is
-#	Kerguelen Is
-#	St Paul Island
+# Brazil - year-round base
+# Ferraz, King George Island, since 1983/4
 
-# Heard Island, McDonald Is
-# uninhabited
+# Chile - 4 year-round bases
 
-# Peter I Island
+# China - year-round bases
+# Great Wall, King George Island, since 1985-02-20
+# Zhongshan, Larsemann Hills, Prydz Bay, since 1989-02-26
+
+# Finland - year-round base
+# Aboa, Queen Maud Land, since 1988
+
+# France
+#
+# French Southern Territories with year-round inhabitants
+# Amsterdam Island
+# Crozet Islands
+# Kerguelen Islands
+# St Paul Island
+#
+# year-round base
+# Dumont d'Urville, Adelie Land, since IGY
+
+# Germany - year-round base
+# Georg von Neumayer
+
+# India - year-round base
+# Dakshin Gangotri
+
+# Japan - year-round bases
+# Dome Fuji
+# Syowa
+
+# S Korea - year-round base
+# King Sejong, King George Island, since 1988
+
+# New Zealand - claims
+# Balleny Islands
 # Scott Island
+#
+# year-round base
+# Scott, Ross Island, since 1957-01, is like Antarctica/McMurdo.
+#
+# These rules for New Zealand are stolen from the `australasia' file.
+# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+Rule	NZAQ	1974	only	-	Nov	 3	2:00s	1:00	D
+Rule	NZAQ	1975	1988	-	Oct	lastSun	2:00s	1:00	D
+Rule	NZAQ	1989	only	-	Oct	 8	2:00s	1:00	D
+Rule	NZAQ	1990	max	-	Oct	Sun>=1	2:00s	1:00	D
+Rule	NZAQ	1975	only	-	Feb	23	2:00s	0	S
+Rule	NZAQ	1976	1989	-	Mar	Sun>=1	2:00s	0	S
+Rule	NZAQ	1990	max	-	Mar	Sun>=15	2:00s	0	S
+
+# Norway - territories
+# Bouvet (uninhabited)
+#
+# claims
+# Peter I Island (uninhabited)
+
+# Poland - year-round base
+# Arctowski, King George Island, since 1977
+
+# Russia - year-round bases
+# Bellingshausen, King George Island
+# Mirny
+# Molodezhnaya
+# Novolazarevskaya
+# Vostok
+
+# S Africa - year-round bases
+# Marion Island
+# Sanae
+
+# UK
+#
+# British Antarctic Territories (BAT) claims
+# South Orkney Islands
+# South Shetland Islands
+#
+# year-round bases
+# Halley, Coates Land, -7535-2619, since 1956-01-06
+# Rothera, Adelaide Island, -6734-6808, since 1976-12-01
+
+# Uruguay - year round base
+# Artigas, King George Island
+
+# USA - year-round bases
+#
+# Palmer, Anvers Island
+#
+# McMurdo, Ross Island, since 1956
+# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+Zone Antarctica/McMurdo	0	-	___	1956
+			12:00	NZAQ	NZ%sT
+#
+# Amundsen-Scott, South Pole, since 1957-01-23
+# From Paul Eggert (1996-09-03):
+# Normally it wouldn't have a separate entry, since it's like the
+# larger Antarctica/McMurdo since 1970, but it's too famous to omit.
+#
+# From Chris Carrier <72157.3334@CompuServe.COM> (1996-06-27):
+# Siple, the first commander of the South Pole station,
+# stated that he would have liked to have kept GMT at the station,
+# but that he found it more convenient to keep GMT+12
+# as supplies for the station were coming from McMurdo Sound,
+# which was on GMT+12 because New Zealand was on GMT+12 all year
+# at that time (1957).  (Source: Siple's book 90 degrees SOUTH.)
+#
+# From Susan Smith <URL:http://www.cybertours.com/whs/pole10.html>
+# (1995-11-13 16:24:56 +1300): We use the same time as McMurdo does.
+# And they use the same time as Christchurch, NZ does....
+# One last quirk about South Pole time.
+# All the electric clocks are usually wrong.
+# Something about the generators running at 60.1hertz or something
+# makes all of the clocks run fast.  So every couple of days,
+# we have to go around and set them back 5 minutes or so.
+# Maybe if we let them run fast all of the time, we'd get to leave here sooner!!
+#
+Link	Antarctica/McMurdo	Antarctica/South_Pole
diff --git a/time/asia b/time/asia
index a5d0ab59f5..2cc414f1df 100644
--- a/time/asia
+++ b/time/asia
@@ -1,10 +1,10 @@
-# @(#)asia	7.23
+# @(#)asia	7.24
 
 # 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
 # tz@elsie.nci.nih.gov for general use in the future).
 
-# From Paul Eggert <eggert@twinsun.com> (1995-12-19):
+# From Paul Eggert <eggert@twinsun.com> (1995-07-24):
 #
 # A good source for time zone historical data outside the U.S. is
 # Thomas G. Shanks, The International Atlas (3rd edition),
@@ -25,42 +25,20 @@
 #		std dst
 #		LMT	Local Mean Time
 #		LST	Local Star Time (Russian ``mestnoe zvezdnoe vremya'')
-#	2:00	EET  EET DST	Eastern European Time
+#	2:00	EET EEST Eastern European Time
 #	2:00	IST IDT	Israel
 #	3:00	AST ADT	Arabia*
-#	3:00	BSK BSD	Baku (was 4:00)*
-#	3:30	IST IDT	Iran
-#	4:00	AMST AMDT Armenia (was 3:00) (was YSK, YSD)*
-#	4:00	TBSK TBSD Tbilisi (was 3:00)*
-#	4:00	GST GDT	Gulf*
-#	4:30	AFT	Afghanistan*
-#	5:00	ASK ASD	Aktau (was SHSK, SHSD)*
-#	5:00	ASK ASD	Ashkhabad (was 4:00)*
-#	5:00	BSK BSD Bishkek (was 6:00) (was FSK, FSD)*
-#	5:00	PKT	Pakistan*
-#	5:00	TSK TSD	Tashkent (was 6:00)*
-#	5:30	IST IST	India
-#	5:45	NPT	Nepal*
-#	6:00	AASK AASD Alma-Ata (was 5:00)*
-#	6:00	BGT	Bengal, Bangladesh*
-#	6:00	DSK DSD	Dushanbe (was 5:00)*
-#	6:30	BMT	Burma*
+#	4:00	GST	Gulf*
+#	5:30	IST	India
 #	7:00	ICT	Indochina*
-#	7:00	JVT	Java*
-#	8:00	BNT	Borneo, Brunei*
-#	8:00	CST CDT	China
-#	8:00	HKT HKST Hong Kong
-#	8:00	PST PDT	Philippines*
-#	8:00	SGT	Singapore
-#	8:00	UST UDT	Ulan Bator*
-#	9:00	JST JDT	Japan
-#	9:00	KST KDT	Korea
-#	9:00	MLT	Moluccas*
-#	9:30	CST	Australian Central Standard Time
+#	8:00	CST	China
+#	9:00	JST	Japan
+#	9:00	KST	Korea
+#	9:30	CST	(Australian) Central Standard Time
 #
 # See the `europe' file for Russia and Turkey in Asia.
 #
-# See the `africa' file for Zone naming conventions.
+# See the `africa' file for time zone naming and abbreviation conventions.
 
 # From Guy Harris:
 # Incorporates data for Singapore from Robert Elz' asia 1.1, as well as
@@ -72,15 +50,15 @@
 
 # These rules for Russia are stolen from the `europe' file.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule RussiaAsia 1981	1984	-	Apr	1	0:00	1:00	D
-Rule RussiaAsia 1981	1983	-	Oct	1	0:00	0	K
-Rule RussiaAsia 1984	max	-	Sep	lastSun	2:00s	0	K
-Rule RussiaAsia 1985	max	-	Mar	lastSun	2:00s	1:00	D
+Rule RussiaAsia 1981	1984	-	Apr	1	0:00	1:00	S
+Rule RussiaAsia 1981	1983	-	Oct	1	0:00	0	-
+Rule RussiaAsia 1984	max	-	Sep	lastSun	2:00s	0	-
+Rule RussiaAsia 1985	max	-	Mar	lastSun	2:00s	1:00	S
 
 # Afghanistan
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Kabul	4:36:48 -	LMT	1890
-			4:00	-	GST	1945
+			4:00	-	AFT	1945
 			4:30	-	AFT
 
 # Armenia
@@ -90,30 +68,27 @@ Zone	Asia/Kabul	4:36:48 -	LMT	1890
 # <edd@AIC.NET> reported today that Yerevan probably won't use DST this year,
 # though it did use DST in 1995.  We guess Yerevan stayed in sync with Moscow
 # between 1990 and 1995, but stopped using DST in 1996.
-# Der-Danieliantz also asked for a better abbreviation than `YSK'
-# after independence.  Apparently no abbreviation is in common use;
-# use `AMST/AMDT' since `AM' is the ISO country code for Armenia.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Armenia	1992	1995	-	Sep	lastSun	2:00s	0	S
-Rule	Armenia	1992	1995	-	Mar	lastSun	2:00s	1:00	D
+Rule	Armenia	1991	1995	-	Mar	lastSun	2:00s	1:00	S
+Rule	Armenia	1991	1995	-	Sep	lastSun	2:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Yerevan	2:58:00 -	LMT	1924 May  2
-			3:00	-	YSK	1957 Mar
-			4:00 RussiaAsia YS%s	1991 Mar 31 2:00s
-			3:00	1:00	YSD	1991 Sep 29 2:00s
-			3:00	-	AMST	1992 Jan 19 2:00s
-			4:00	Armenia	AM%sT	1996
-			4:00	-	AMST
+			3:00	-	YERT	1957 Mar    # Yerevan Time
+			4:00 RussiaAsia YER%sT	1991 Mar 31 2:00s
+			3:00	1:00	YERST	1991 Sep 23 # independence
+			3:00	Armenia	AM%sT	1992 Jan 19 2:00s # Armenia Time
+			4:00	Armenia	AM%sT
 
 # Azerbaijan
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Baku	3:19:24 -	LMT	1924 May  2
-			3:00	-	BSK	1957 Mar
-			4:00 RussiaAsia BS%s	1991 Mar 31 2:00s
-			3:00	1:00	BSD	1991 Sep 29 2:00s
-			3:00	-	BSK
+			3:00	-	BAKT	1957 Mar    # Baku Time
+			4:00 RussiaAsia BAK%sT	1991 Mar 31 2:00s
+			3:00	1:00	BAKST	1991 Aug 30 # independence
+			3:00 RussiaAsia	AZ%sT	1992	    # Azerbaijan Time
+			3:00	-	AZT
 # Shanks has Baku using Russian DST rules after 1991,
-# but usno1995 has Azerbaijan with no DST.  Go with usno1995.
+# but usno1995 has Azerbaijan with no DST.  Guess no DST after 1991.
 
 # Bahrain
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -124,22 +99,23 @@ Zone	Asia/Bahrain	3:22:20 -	LMT	1920		# Al-Manamah
 # Bangladesh
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Dacca	6:01:40 -	LMT	1890
-			5:53	-	CMT	1941 Oct    # Calcutta Mean Time
-			6:30	-	BMT	1942 May 15
+			5:53:20	-	HMT	1941 Oct    # Howrah Mean Time?
+			6:30	-	BURT	1942 May 15 # Burma Time
 			5:30	-	IST	1942 Sep
-			6:30	-	BMT	1951 Sep 30
-			6:00	-	BGT
+			6:30	-	BURT	1951 Sep 30
+			6:00	-	DACT	1971 Mar 26 # Dacca Time
+			6:00	-	BDT	# Bangladesh Time
 
 # Bhutan
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Thimbu	5:58:36 -	LMT	1947 Aug 15
 			5:30	-	IST	1987 Oct
-			6:00	-	BGT
+			6:00	-	BTT	# Bhutan Time
 
 # British Indian Ocean Territory
 # From Whitman:
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Indian/Chagos	5:00	-	PKT
+Zone	Indian/Chagos	5:00	-	IOT	# BIOT Time
 
 # Brunei
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -150,15 +126,15 @@ Zone	Asia/Brunei	7:39:40 -	LMT	1926 Mar   # Bandar Seri Begawan
 # Burma / Myanmar
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Rangoon	6:24:40 -	LMT	1880		# or Yangon
-			6:25	-	RMT	1920
-			6:30	-	BMT	1942 May
+			6:24:36	-	RMT	1920	   # Rangoon Mean Time?
+			6:30	-	BURT	1942 May   # Burma Time
 			9:00	-	JST	1945 May 3
-			6:30	-	BMT
+			6:30	-	MMT		   # Myanmar Time
 
 # Cambodia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Phnom_Penh	6:59:40 -	LMT	1906 Jun  9
-			7:06	-	SMT	1911 Mar 11 0:01     # Saigon MT
+			7:06:20	-	SMT	1911 Mar 11 0:01 # Saigon MT?
 			7:00	-	ICT	1912 May
 			8:00	-	ICT	1931 May
 			7:00	-	ICT
@@ -187,8 +163,7 @@ Zone	Asia/Phnom_Penh	6:59:40 -	LMT	1906 Jun  9
 # CHINA               9 H  AHEAD OF UTC  APR 17 - SEP 10
 
 # From Paul Eggert <eggert@twinsun.com> (1995-12-19):
-# Shanks writes that China switched from the Chinese calendar on 1912 Feb 12.
-# He also writes that China has had a single time zone since 1980 May 1,
+# Shanks writes that China has had a single time zone since 1980 May 1,
 # observing summer DST from 1986 through 1991; this contradicts Devine's
 # note about Time magazine, though apparently _something_ happened in 1986.
 # Go with Shanks for now.  I made up names for the other pre-1980 time zones.
@@ -204,23 +179,23 @@ Rule	PRC	1986	1991	-	Sep	Sun>=11	0:00	0	S
 Rule	PRC	1987	1991	-	Apr	Sun>=10	0:00	1:00	D
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Harbin	8:26:44	-	LMT	1928
-			8:30	-	MAT	1932 Mar    # Manchuria
+			8:30	-	HART	1932 Mar # Harbin Time
 			8:00	-	CST	1940
-			9:00	-	KST	1966 May
-			8:30	-	MAT	1980 May
+			9:00	-	HART	1966 May
+			8:30	-	HART	1980 May
 			8:00	PRC	C%sT
 Zone	Asia/Shanghai	8:05:52	-	LMT	1928
 			8:00	Shang	C%sT	1949
 			8:00	PRC	C%sT
 Zone	Asia/Chungking	7:06:20	-	LMT	1928
-			7:00	-	ICT	1980 May
+			7:00	-	CHUT	1980 May # Chungking Time
 			8:00	PRC	C%sT
 Zone	Asia/Urumqi	5:50:20	-	LMT	1928
-			6:00	-	URT	1980 May    # Urumqi
+			6:00	-	URUT	1980 May # Urumqi Time
 			8:00	PRC	C%sT
 Zone	Asia/Kashgar	5:03:56	-	LMT	1928
-			5:30	-	ETT	1940	    # Eastern Turkestan
-			5:00	-	ETT	1980 May
+			5:30	-	KAST	1940	 # Kashgar Time
+			5:00	-	KAST	1980 May
 			8:00	PRC	C%sT
 
 ###############################################################################
@@ -263,45 +238,47 @@ Rule	HK	1979	1980	-	May	Sun>=8	3:30	1:00	S
 Rule	HK	1979	1980	-	Oct	Sun>=16	3:30	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Hong_Kong	7:36:36 -	LMT	1904 Oct 30
-			8:00	HK	HK%sT
+			8:00	HK	HK%sT	1997 Jul  1 # return to China
+			8:00	PRC	C%sT
 
 # Macao
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Macao	1961	1962	-	Mar	Sun>=16	3:30	1:00	D
-Rule	Macao	1961	1964	-	Nov	Sun>=1	3:30	0	S
-Rule	Macao	1963	only	-	Mar	Sun>=16	0:00	1:00	D
-Rule	Macao	1964	only	-	Mar	Sun>=16	3:30	1:00	D
-Rule	Macao	1965	only	-	Mar	Sun>=16	0:00	1:00	D
-Rule	Macao	1965	only	-	Oct	31	0:00	0	S
-Rule	Macao	1966	1971	-	Apr	Sun>=16	3:30	1:00	D
-Rule	Macao	1966	1971	-	Oct	Sun>=16	3:30	0	S
-Rule	Macao	1972	1974	-	Apr	Sun>=15	0:00	1:00	D
-Rule	Macao	1972	1973	-	Oct	Sun>=15	0:00	0	S
-Rule	Macao	1974	1977	-	Oct	Sun>=15	3:30	0	S
-Rule	Macao	1975	1977	-	Apr	Sun>=15	3:30	1:00	D
-Rule	Macao	1978	1980	-	Apr	Sun>=15	0:00	1:00	D
-Rule	Macao	1978	1980	-	Oct	Sun>=15	0:00	0	S
+Rule	Macao	1961	1962	-	Mar	Sun>=16	3:30	1:00	S
+Rule	Macao	1961	1964	-	Nov	Sun>=1	3:30	0	-
+Rule	Macao	1963	only	-	Mar	Sun>=16	0:00	1:00	S
+Rule	Macao	1964	only	-	Mar	Sun>=16	3:30	1:00	S
+Rule	Macao	1965	only	-	Mar	Sun>=16	0:00	1:00	S
+Rule	Macao	1965	only	-	Oct	31	0:00	0	-
+Rule	Macao	1966	1971	-	Apr	Sun>=16	3:30	1:00	S
+Rule	Macao	1966	1971	-	Oct	Sun>=16	3:30	0	-
+Rule	Macao	1972	1974	-	Apr	Sun>=15	0:00	1:00	S
+Rule	Macao	1972	1973	-	Oct	Sun>=15	0:00	0	-
+Rule	Macao	1974	1977	-	Oct	Sun>=15	3:30	0	-
+Rule	Macao	1975	1977	-	Apr	Sun>=15	3:30	1:00	S
+Rule	Macao	1978	1980	-	Apr	Sun>=15	0:00	1:00	S
+Rule	Macao	1978	1980	-	Oct	Sun>=15	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Macao	7:34:20 -	LMT	1912
-			8:00	Macao	C%sT
+			8:00	Macao	MO%sT	1999 Dec 20 # return to China
+			8:00	PRC	C%sT
 
 
 ###############################################################################
 
 # Cyprus
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Cyprus	1975	only	-	Apr	13	0:00	1:00	" DST"
+Rule	Cyprus	1975	only	-	Apr	13	0:00	1:00	S
 Rule	Cyprus	1975	only	-	Oct	12	0:00	0	-
-Rule	Cyprus	1976	only	-	May	15	0:00	1:00	" DST"
+Rule	Cyprus	1976	only	-	May	15	0:00	1:00	S
 Rule	Cyprus	1976	only	-	Oct	11	0:00	0	-
-Rule	Cyprus	1977	1980	-	Apr	Sun>=1	0:00	1:00	" DST"
+Rule	Cyprus	1977	1980	-	Apr	Sun>=1	0:00	1:00	S
 Rule	Cyprus	1977	only	-	Sep	25	0:00	0	-
 Rule	Cyprus	1978	only	-	Oct	2	0:00	0	-
 Rule	Cyprus	1979	max	-	Sep	lastSun	0:00	0	-
-Rule	Cyprus	1981	max	-	Mar	lastSun	0:00	1:00	" DST"
+Rule	Cyprus	1981	max	-	Mar	lastSun	0:00	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Nicosia	2:13:28 -	LMT	1921 Nov 14
-			2:00	Cyprus	EET%s
+			2:00	Cyprus	EE%sT
 
 # Georgia
 # From Paul Eggert <eggert@twinsun.com> (1994-11-19):
@@ -316,18 +293,18 @@ Zone	Asia/Nicosia	2:13:28 -	LMT	1921 Nov 14
 # Most likely we're still missing some rule changes between 1991 and 1994.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Tbilisi	2:59:16 -	LMT	1880
-			2:59	-	LST	1924 May  2
-			3:00	-	TBSK	1957 Mar
-			4:00 RussiaAsia TBS%s	1991 Mar 31 2:00s
-			3:00	1:00	TBSD	1991 Sep 29 2:00s
-			3:00 RussiaAsia TBS%s	1994 Sep 25 2:00s
-			4:00	-	TBSK
+			2:59:16	-	TBMT	1924 May  2 # Tbilisi Mean Time
+			3:00	-	TBIT	1957 Mar    # Tbilisi Time
+			4:00 RussiaAsia TBI%sT	1991 Mar 31 2:00s
+			3:00	1:00	TBIST	1991 Apr  9 # independence
+			3:00 RussiaAsia GE%sT	1994 Sep 25 2:00s # Georgia Time
+			4:00	-	GET
 
 # India
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Calcutta	5:53:28 -	LMT	1880
-			5:53	-	CMT	1941 Oct    # Calcutta Mean Time
-			6:30	-	BMT	1942 May 15
+			5:53:20	-	HMT	1941 Oct    # Howrah Mean Time?
+			6:30	-	BURT	1942 May 15 # Burma Time
 			5:30	-	IST	1942 Sep
 			5:30	1:00	IST	1945 Oct 15
 			5:30	-	IST
@@ -339,36 +316,36 @@ Zone	Asia/Calcutta	5:53:28 -	LMT	1880
 # Indonesia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Asia/Jakarta	7:07:12 -	LMT	1867 Aug 10
-			7:07	-	JMT	1924 Jan  1 0:13
-			7:20	-	JVT	1932 Nov
-			7:30	-	JVT	1942 Mar 23
+			7:07:12	-	JMT	1924 Jan  1 0:13 # Jakarta MT
+			7:20	-	JAVT	1932 Nov	 # Java Time
+			7:30	-	JAVT	1942 Mar 23
 			9:00	-	JST	1945 Aug
-			7:30	-	JVT	1948 May
-			8:00	-	JVT	1950 May
-			7:30	-	JVT	1964
-			7:00	-	JVT
+			7:30	-	JAVT	1948 May
+			8:00	-	JAVT	1950 May
+			7:30	-	JAVT	1964
+			7:00	-	JAVT
 Zone Asia/Ujung_Pandang 7:57:36 -	LMT	1920
-			7:58	-	MMT	1932 Nov    # Macassar Mean Time
-			8:00	-	BNT	1942 Feb  9
+			7:57:36	-	MMT	1932 Nov    # Macassar MT
+			8:00	-	BORT	1942 Feb  9 # Borneo Time
 			9:00	-	JST	1945 Aug
-			8:00	-	BNT
+			8:00	-	BORT
 Zone Asia/Jayapura	9:22:48 -	LMT	1932 Nov
-			9:00	-	MLT	1944
+			9:00	-	JAYT	1944	    # Jayapura Time
 			9:30	-	CST	1964
-			9:00	-	MLT
+			9:00	-	JAYT
 
 # Iran
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Iran	1978	1980	-	Mar	21	0:00	1:00	D
-Rule	Iran	1978	only	-	Oct	21	0:00	0	S
-Rule	Iran	1979	only	-	Sep	19	0:00	0	S
-Rule	Iran	1980	only	-	Sep	23	0:00	0	S
+Rule	Iran	1978	1980	-	Mar	21	0:00	1:00	S
+Rule	Iran	1978	only	-	Oct	21	0:00	0	-
+Rule	Iran	1979	only	-	Sep	19	0:00	0	-
+Rule	Iran	1980	only	-	Sep	23	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Tehran	3:25:44	-	LMT	1916
-			3:26	-	TMT	1946
-			3:30	-	IST	1977 Nov
-			4:00	Iran	G%sT	1979
-			3:30	Iran	I%sT
+			3:25:44	-	TMT	1946	# Tehran Mean Time
+			3:30	-	IRT	1977 Nov
+			4:00	Iran	IR%sT	1979
+			3:30	Iran	IR%sT
 
 # Iraq
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -380,7 +357,7 @@ Rule	Iraq	1985	max	-	Sep	lastSun	1:00s	0	S
 Rule	Iraq	1986	max	-	Mar	lastSun	1:00s	1:00	D
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Baghdad	2:57:40	-	LMT	1890
-			2:58	-	BMT	1918	    # Baghdad Mean Time
+			2:57:36	-	BMT	1918	    # Baghdad Mean Time?
 			3:00	-	AST	1982 May
 			3:00	Iraq	A%sT
 
@@ -440,12 +417,6 @@ Rule	Zion	1987	only	-	Apr	15	0:00	1:00	D
 Rule	Zion	1987	only	-	Sep	13	0:00	0	S
 Rule	Zion	1988	only	-	Apr	 9	0:00	1:00	D
 Rule	Zion	1988	only	-	Sep	 3	0:00	0	S
-#Rule	Zion	1989	only	-	Apr	29	0:00	1:00	D
-#Rule	Zion	1989	only	-	Sep	 2	0:00	0	S
-#Rule	Zion	1990	only	-	Mar	25	0:00	1:00	D
-#Rule	Zion	1990	only	-	Aug	26	0:00	0	S
-#Rule	Zion	1991	only	-	Mar	10	0:00	1:00	D
-#Rule	Zion	1991	only	-	Sep	 1	0:00	0	S
 
 # From Ephraim Silverberg (1996-01-02):
 #
@@ -466,25 +437,25 @@ Rule	Zion	1988	only	-	Sep	 3	0:00	0	S
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Zion	1989	only	-	Apr	30	0:00	1:00	D
-Rule	Zion	1989	only	-	Sep	 3	0:00	0:00	S
+Rule	Zion	1989	only	-	Sep	 3	0:00	0	S
 Rule	Zion	1990	only	-	Mar	25	0:00	1:00	D
-Rule	Zion	1990	only	-	Aug	26	0:00	0:00	S
+Rule	Zion	1990	only	-	Aug	26	0:00	0	S
 Rule	Zion	1991	only	-	Mar	24	0:00	1:00	D
-Rule	Zion	1991	only	-	Sep	 1	0:00	0:00	S
+Rule	Zion	1991	only	-	Sep	 1	0:00	0	S
 Rule	Zion	1992	only	-	Mar	29	0:00	1:00	D
-Rule	Zion	1992	only	-	Sep	 6	0:00	0:00	S
+Rule	Zion	1992	only	-	Sep	 6	0:00	0	S
 Rule	Zion	1993	only	-	Apr	 2	0:00	1:00	D
-Rule	Zion	1993	only	-	Sep	 5	0:00	0:00	S
+Rule	Zion	1993	only	-	Sep	 5	0:00	0	S
 
 # The dates for 1994-1995 were obtained from Office of the Spokeswoman for the
 # Ministry of Interior, Jerusalem, Israel.  The spokeswoman can be reached by
 # calling the switchboard at 972-2-701411 and asking for the spokeswoman.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule    Zion    1994    only    -       Apr      1      0:00    1:00    D
-Rule    Zion    1994    only    -       Aug     28      0:00    0:00    S
-Rule    Zion    1995    only    -       Mar     31      0:00    1:00    D
-Rule    Zion    1995    only    -       Sep      3      0:00    0:00    S
+Rule	Zion	1994	only	-	Apr	 1	0:00	1:00	D
+Rule	Zion	1994	only	-	Aug	28	0:00	0	S
+Rule	Zion	1995	only	-	Mar	31	0:00	1:00	D
+Rule	Zion	1995	only	-	Sep	 3	0:00	0	S
 
 # The dates for 1996-1998 were also obtained from Office of the Spokeswoman
 # for the Ministry of Interior, Jerusalem, Israel.  The official announcement
@@ -504,12 +475,12 @@ Rule    Zion    1995    only    -       Sep      3      0:00    0:00    S
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Zion	1996	1998	-	Mar	Fri>=14	0:00	1:00	D
-Rule	Zion	1996	only	-	Sep	16	0:00	0:00	S
-Rule	Zion	1997	1998	-	Oct	Sun>=14	0:00	0:00	S
+Rule	Zion	1996	only	-	Sep	16	0:00	0	S
+Rule	Zion	1997	1998	-	Oct	Sun>=14	0:00	0	S
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Jerusalem	2:20:56 -	LMT	1880
-			2:21	-	JMT	1918
+			2:20:40	-	JMT	1918	# Jerusalem Mean Time?
 			2:00	Zion	I%sT
 
 
@@ -531,29 +502,12 @@ Zone	Asia/Jerusalem	2:20:56 -	LMT	1880
 #Rule	Japan	1950	1951	-	May	Sun>=1	2:00	1:00	D
 # but the only locations using it were US military bases.
 # We go with Shanks and omit daylight saving in those years for Asia/Tokyo.
-#
-# The same news article also reports that Japan is likely to go on DST in 1996
-# as follows, where I've guessed the AT and LETTER/S columns:
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-#Rule	Japan	1996	max	-	Apr	Sun>=1	2:00	1:00	D
-#Rule	Japan	1996	max	-	Oct	lastSun	2:00	0	S
 
-# From Shanks (1991):
-# Japan switched from the Japanese calendar on 1893 Jan 1.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Tokyo	9:19:04	-	LMT	1896
 			9:00	-	JST
-# If Japan adopts DST in 1996, replace the above line with the following lines:
-#			9:00	-	JST	1996
-#			9:00	Japan	J%sT
-# and uncomment the two `Rule' lines commented out above.
-
-# From Paul Eggert <eggert@twinsun.com> (1995-12-19):
-# Shanks says that the far southern Ryukyu Is (Nansei-Shoto) are 8:00,
-# but we haven't confirmed this.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-#Zone	Asia/Ishigaki	8:16:36	-	LMT	1896
-#			8:00	-	CST
+Zone	Asia/Ishigaki	8:16:36	-	LMT	1896
+			8:00	-	CST
 # There is no information for Marcus.
 # Other Japanese possessions are probably like Asia/Tokyo.
 
@@ -562,26 +516,26 @@ Zone	Asia/Tokyo	9:19:04	-	LMT	1896
 # Most likely Shanks is merely guessing dates from 1992 on.
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule    Jordan	1973	only	-	Jun	6	0:00	1:00	" DST"
+Rule    Jordan	1973	only	-	Jun	6	0:00	1:00	S
 Rule    Jordan	1973	1975	-	Oct	1	0:00	0	-
-Rule    Jordan	1974	1977	-	May	1	0:00	1:00	" DST"
+Rule    Jordan	1974	1977	-	May	1	0:00	1:00	S
 Rule    Jordan	1976	only	-	Nov	1	0:00	0	-
 Rule    Jordan	1977	only	-	Oct	1	0:00	0	-
-Rule    Jordan	1978	only	-	Apr	30	0:00	1:00	" DST"
+Rule    Jordan	1978	only	-	Apr	30	0:00	1:00	S
 Rule    Jordan	1978	only	-	Sep	30	0:00	0	-
-Rule    Jordan	1985	only	-	Apr	1	0:00	1:00	" DST"
+Rule    Jordan	1985	only	-	Apr	1	0:00	1:00	S
 Rule    Jordan	1985	only	-	Oct	1	0:00	0	-
-Rule    Jordan	1986	1988	-	Apr	Fri>=1	0:00	1:00	" DST"
+Rule    Jordan	1986	1988	-	Apr	Fri>=1	0:00	1:00	S
 Rule    Jordan	1986	1990	-	Oct	Fri>=1	0:00	0	-
-Rule    Jordan	1989	only	-	May	8	0:00	1:00	" DST"
-Rule    Jordan	1990	only	-	Apr	27	0:00	1:00	" DST"
-Rule    Jordan	1991	only	-	Apr	19	0:00	1:00	" DST"
+Rule    Jordan	1989	only	-	May	8	0:00	1:00	S
+Rule    Jordan	1990	only	-	Apr	27	0:00	1:00	S
+Rule    Jordan	1991	only	-	Apr	19	0:00	1:00	S
 Rule    Jordan	1991	only	-	Sep	27	0:00	0	-
-Rule    Jordan	1992	max	-	Apr	Fri>=1	0:00	1:00	" DST"
+Rule    Jordan	1992	max	-	Apr	Fri>=1	0:00	1:00	S
 Rule    Jordan	1992	max	-	Oct	Fri>=1	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Amman	2:23:44 -	LMT	1931
-			2:00	Jordan	EET%s
+			2:00	Jordan	EE%sT
 
 # Kazakhstan
 # From Paul Eggert (1996-04-19):
@@ -590,25 +544,25 @@ Zone	Asia/Amman	2:23:44 -	LMT	1931
 # in western Kazakhstan.  Follow Shanks before 1991, Evtichov afterwards.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Alma-Ata	5:07:48 -	LMT	1924 May  2 # or Almaty
-			5:00	-	AASK	1957 Mar
-			6:00 RussiaAsia AAS%s	1991 Mar 31 2:00s
-			5:00	1:00	AASD	1991 Sep 29 2:00s
-			5:00	-	AASK	1992 Jan 19 2:00s
-			6:00 RussiaAsia AAS%s
+			5:00	-	ALMT	1957 Mar # Alma-Ata Time
+			6:00 RussiaAsia ALM%sT	1991 Mar 31 2:00s
+			5:00	1:00	ALMST	1991 Sep 29 2:00s
+			5:00	-	ALMT	1992 Jan 19 2:00s
+			6:00 RussiaAsia ALM%sT
 Zone	Asia/Aktau	3:21:04	-	LMT	1924 May  2 # or Aqtau
-			4:00	-	SHSK	1957 Mar # Fort Shevchenko
-			5:00 RussiaAsia SHS%s	1991 Mar 31 2:00s
-			4:00	1:00	ASD	1991 Sep 29 2:00s
-			4:00	-	ASK	1992 Jan 19 2:00s
-			5:00 RussiaAsia AS%s
+			4:00	-	SHET	1957 Mar # Fort Shevchenko Time
+			5:00 RussiaAsia SHE%sT	1991 Mar 31 2:00s
+			4:00	1:00	AKTST	1991 Sep 29 2:00s
+			4:00	-	AKTT	1992 Jan 19 2:00s # Aktau Time
+			5:00 RussiaAsia AKT%sT
 
 # Kirgizstan
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Bishkek	4:58:24 -	LMT	1924 May  2
-			5:00	-	FSK	1957 Mar	# Frunze
-			6:00 RussiaAsia FS%s	1991 Mar 31 2:00s
-			5:00	1:00	FSD	1991 Sep 29 2:00s
-			5:00 RussiaAsia BS%s
+			5:00	-	FRUT	1957 Mar    # Frunze Time
+			6:00 RussiaAsia FRU%sT	1991 Mar 31 2:00s
+			5:00	1:00	FRUST	1991 Aug 31 # independence
+			5:00 RussiaAsia KG%sT		    # Kirgizstan Time
 
 ###############################################################################
 
@@ -653,81 +607,90 @@ Zone	Asia/Kuwait	3:11:56 -	LMT	1950
 # Laos
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Vientiane	6:50:24 -	LMT	1906 Jun  9
-			7:06	-	SMT	1911 Mar 11 0:01     # Saigon MT
+			7:06:20	-	SMT	1911 Mar 11 0:01 # Saigon MT?
 			7:00	-	ICT	1912 May
 			8:00	-	ICT	1931 May
 			7:00	-	ICT
 
 # Lebanon
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Lebanon	1920	only	-	Mar	28	0:00	1:00	" DST"
+Rule	Lebanon	1920	only	-	Mar	28	0:00	1:00	S
 Rule	Lebanon	1920	only	-	Oct	25	0:00	0	-
-Rule	Lebanon	1921	only	-	Apr	3	0:00	1:00	" DST"
+Rule	Lebanon	1921	only	-	Apr	3	0:00	1:00	S
 Rule	Lebanon	1921	only	-	Oct	3	0:00	0	-
-Rule	Lebanon	1922	only	-	Mar	26	0:00	1:00	" DST"
+Rule	Lebanon	1922	only	-	Mar	26	0:00	1:00	S
 Rule	Lebanon	1922	only	-	Oct	8	0:00	0	-
-Rule	Lebanon	1923	only	-	Apr	22	0:00	1:00	" DST"
+Rule	Lebanon	1923	only	-	Apr	22	0:00	1:00	S
 Rule	Lebanon	1923	only	-	Sep	16	0:00	0	-
-Rule	Lebanon	1957	1961	-	May	1	0:00	1:00	" DST"
+Rule	Lebanon	1957	1961	-	May	1	0:00	1:00	S
 Rule	Lebanon	1957	1961	-	Oct	1	0:00	0	-
-Rule	Lebanon	1972	only	-	Jun	22	0:00	1:00	" DST"
+Rule	Lebanon	1972	only	-	Jun	22	0:00	1:00	S
 Rule	Lebanon	1972	1977	-	Oct	1	0:00	0	-
-Rule	Lebanon	1973	1977	-	May	1	0:00	1:00	" DST"
-Rule	Lebanon	1978	only	-	Apr	30	0:00	1:00	" DST"
+Rule	Lebanon	1973	1977	-	May	1	0:00	1:00	S
+Rule	Lebanon	1978	only	-	Apr	30	0:00	1:00	S
 Rule	Lebanon	1978	only	-	Sep	30	0:00	0	-
-Rule	Lebanon	1984	1987	-	May	1	0:00	1:00	" DST"
+Rule	Lebanon	1984	1987	-	May	1	0:00	1:00	S
 Rule	Lebanon	1984	max	-	Oct	16	0:00	0	-
-Rule	Lebanon	1988	only	-	Jun	1	0:00	1:00	" DST"
-Rule	Lebanon	1989	only	-	May	10	0:00	1:00	" DST"
-Rule	Lebanon	1990	max	-	May	1	0:00	1:00	" DST"
+Rule	Lebanon	1988	only	-	Jun	1	0:00	1:00	S
+Rule	Lebanon	1989	only	-	May	10	0:00	1:00	S
+Rule	Lebanon	1990	max	-	May	1	0:00	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Beirut	2:22:00 -	LMT	1880
-			2:00	Lebanon	EET%s
+			2:00	Lebanon	EE%sT
 
 # Malaysia
+# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+Rule	NBorneo	1935	1941	-	Sep	14	0:00	0:20	TS
+Rule	NBorneo	1935	1941	-	Dec	14	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Asia/Kuala_Lumpur	6:46:48 -	LMT	1880
-			6:55	-	SMT	1905 Jun
-			7:00	-	SGT	1933
-			7:20	-	SGT	1942 Feb 15
+			6:55:24	-	SMT	1905 Jun # Singapore Mean Time
+			7:00	-	MALT	1933	 # Malaya Time
+			7:20	-	MALT	1942 Feb 15
 			9:00	-	JST	1945 Sep 2
-			7:20	-	SGT	1950
-			7:30	-	SGT	1982 May
-			8:00	-	SGT
+			7:20	-	MALT	1950
+			7:30	-	MALT	1982 May
+			8:00	-	MYT	# Malaysia Time
+Zone Asia/Kuching	7:21:20	-	LMT	1926 Mar
+			7:30	-	BORT	1933	# Borneo Time
+			8:00	NBorneo	BOR%sT	1942
+			9:00	-	JST	1945 Sep 2
+			8:00	-	BORT	1982 May
+			8:00	-	MYT
 
 # Maldives
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Indian/Maldives	4:54:00 -	LMT	1880			# Male
-			4:54	-	MMT	1960
-			5:00	-	PKT
+Zone	Indian/Maldives	4:54:00 -	LMT	1880	# Male
+			4:54:00	-	MMT	1960	# Male Mean Time
+			5:00	-	MVT		# Maldives Time
 
 # Mongolia
-# Shanks says that Mongolia has three time zones,
-# but usno1995 and http://www.odci.gov/cia/publications/95fact/802389h.gif
+# Shanks says that Mongolia has three time zones, but usno1995 and
+# <URL:http://www.odci.gov/cia/publications/95fact/802389h.gif> (1995)
 # both say that it has just one.
 # Let's comment out the western and eastern Mongolian time zones
 # till we know what their principal towns are.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Mongol	1981	1984	-	Apr	1	0:00	1:00	T
-Rule	Mongol	1981	1984	-	Oct	1	0:00	0	S
-Rule	Mongol	1985	max	-	Mar	lastSun	2:00	1:00	T
-Rule	Mongol	1985	max	-	Sep	lastSun	3:00	0	S
+Rule	Mongol	1981	1984	-	Apr	1	0:00	1:00	S
+Rule	Mongol	1981	1984	-	Oct	1	0:00	0	-
+Rule	Mongol	1985	max	-	Mar	lastSun	2:00	1:00	S
+Rule	Mongol	1985	max	-	Sep	lastSun	3:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 #Zone	Asia/Dariv	6:14:32 -	LMT	1905 Aug
-#			6:00	-	DST	1978
-#			7:00	Mongol	D%sT
+#			6:00	-	DART	1978	# Dariv Time
+#			7:00	Mongol	DAR%sT
 Zone	Asia/Ulan_Bator	7:07:32 -	LMT	1905 Aug
-			7:00	-	UST	1978
-			8:00	Mongol	U%sT
+			7:00	-	ULAT	1978	# Ulan Bator Time
+			8:00	Mongol	ULA%sT
 #Zone Asia/Baruun-Urt	7:33:00 -	LMT	1905 Aug
-#			8:00	-	BST	1978
-#			9:00	Mongol	B%sT
+#			8:00	-	BART	1978	# Baruun-Urt Time
+#			9:00	Mongol	BAR%sT
 
 # Nepal
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Katmandu	5:41:16 -	LMT	1920
 			5:30	-	IST	1986
-			5:45	-	NPT
+			5:45	-	NPT	# Nepal Time
 
 # Oman
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -740,23 +703,23 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
 			5:30	-	IST	1942 Sep
 			5:30	1:00	IST	1945 Oct 15
 			5:30	-	IST	1951 Sep 30
-			5:00	-	PKT
+			5:00	-	KART	1971 Mar 26 # Karachi Time
+			5:00	-	PKT	# Pakistan Time
 
 # Palestine
 # These rules for Egypt are stolen from the `africa' file.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule EgyptAsia	1957	only	-	May	10	0:00	1:00	" DST"
+Rule EgyptAsia	1957	only	-	May	10	0:00	1:00	S
 Rule EgyptAsia	1957	1958	-	Oct	 1	0:00	0	-
-Rule EgyptAsia	1958	only	-	May	 1	0:00	1:00	" DST"
-Rule EgyptAsia	1959	1981	-	May	 1	1:00	1:00	" DST"
+Rule EgyptAsia	1958	only	-	May	 1	0:00	1:00	S
+Rule EgyptAsia	1959	1981	-	May	 1	1:00	1:00	S
 Rule EgyptAsia	1959	1965	-	Sep	30	3:00	0	-
 Rule EgyptAsia	1966	max	-	Oct	 1	3:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Gaza	2:17:52	-	LMT	1900 Oct
 			2:00	-	EET	1957 May 10
-			2:00 EgyptAsia	EET%s	1967 Jun 30
+			2:00 EgyptAsia	EE%sT	1967 Jun 30
 			2:00	Zion	I%sT
-# This will undoubtedly change soon.
 
 # Paracel Is
 # no information
@@ -765,18 +728,18 @@ Zone	Asia/Gaza	2:17:52	-	LMT	1900 Oct
 # Howse writes (p 162) that until 1844 the Philippines kept American date.
 # The rest of this data is from Shanks.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Phil	1936	only	-	Nov	1	0:00	1:00	D
-Rule	Phil	1937	only	-	Feb	1	0:00	0	S
-Rule	Phil	1954	only	-	Apr	12	0:00	1:00	D
-Rule	Phil	1954	only	-	Jul	1	0:00	0	S
-Rule	Phil	1978	only	-	Mar	22	0:00	1:00	D
-Rule	Phil	1978	only	-	Sep	21	0:00	0	S
+Rule	Phil	1936	only	-	Nov	1	0:00	1:00	S
+Rule	Phil	1937	only	-	Feb	1	0:00	0	-
+Rule	Phil	1954	only	-	Apr	12	0:00	1:00	S
+Rule	Phil	1954	only	-	Jul	1	0:00	0	-
+Rule	Phil	1978	only	-	Mar	22	0:00	1:00	S
+Rule	Phil	1978	only	-	Sep	21	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Manila	-15:56:00 -	LMT	1844
 			8:04:00 -	LMT	1899 May 11
-			8:00	Phil	P%sT	1942 May
+			8:00	Phil	PH%sT	1942 May
 			9:00	-	JST	1944 Nov
-			8:00	Phil	P%sT
+			8:00	Phil	PH%sT
 
 # Qatar
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -792,78 +755,93 @@ Zone	Asia/Riyadh	3:06:52 -	LMT	1950
 # Singapore
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Singapore	6:55:24 -	LMT	1880
-			6:55	-	SMT	1905 Jun
-			7:00	-	SGT	1933
-			7:20	-	SGT	1942 Feb 15
+			6:55:24	-	SMT	1905 Jun # Singapore Mean Time
+			7:00	-	MALT	1933	 # Malaya Time
+			7:20	-	MALT	1942 Feb 15
 			9:00	-	JST	1945 Sep  2
-			7:20	-	SGT	1950
-			7:30	-	SGT	1982 May
+			7:20	-	MALT	1950
+			7:30	-	MALT	1965 Aug  9 # independence
+			7:30	-	SGT	1982 May # Singapore Time
 			8:00	-	SGT
 
 # Spratly Is
 # no information
 
 # Sri Lanka
+# From Paul Eggert (1996-09-03):
+# <URL:http://www.virtual-pc.com/lankaweb/news/items/240596-2.html> (1996-05-24)
+# reported ``the country's standard time will be put forward by one hour at
+# midnight Friday (1830 GMT) `in the light of the present power crisis'.''
+# Transitions before 1996 are from Shanks (1991).
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Colombo	5:19:24 -	LMT	1880
-			5:20	-	JMT	1906
+			5:20	-	CEYT	1906	# Ceylon Time
 			5:30	-	IST	1942 Jan  5
 			5:30	0:30	IHST	1942 Sep
 			5:30	1:00	IST	1945 Oct 16 2:00
-			5:30	-	IST
+			5:30	-	IST	1996 May 25 0:00
+			6:30	-	LKT	# Sri Lanka Time
 
 # Syria
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Syria	1920	1923	-	Apr	Sun>=15	2:00	1:00	" DST"
+Rule	Syria	1920	1923	-	Apr	Sun>=15	2:00	1:00	S
 Rule	Syria	1920	1923	-	Oct	Sun>=1	2:00	0	-
-Rule	Syria	1962	only	-	Apr	29	2:00	1:00	" DST"
+Rule	Syria	1962	only	-	Apr	29	2:00	1:00	S
 Rule	Syria	1962	only	-	Oct	1	2:00	0	-
-Rule	Syria	1963	1965	-	May	1	2:00	1:00	" DST"
+Rule	Syria	1963	1965	-	May	1	2:00	1:00	S
 Rule	Syria	1963	only	-	Sep	30	2:00	0	-
 Rule	Syria	1964	only	-	Oct	1	2:00	0	-
 Rule	Syria	1965	only	-	Sep	30	2:00	0	-
-Rule	Syria	1966	only	-	Apr	24	2:00	1:00	" DST"
+Rule	Syria	1966	only	-	Apr	24	2:00	1:00	S
 Rule	Syria	1966	1976	-	Oct	1	2:00	0	-
-Rule	Syria	1967	1978	-	May	1	2:00	1:00	" DST"
+Rule	Syria	1967	1978	-	May	1	2:00	1:00	S
 Rule	Syria	1977	1978	-	Sep	1	2:00	0	-
-Rule	Syria	1983	1984	-	Apr	9	2:00	1:00	" DST"
+Rule	Syria	1983	1984	-	Apr	9	2:00	1:00	S
 Rule	Syria	1983	1984	-	Oct	1	2:00	0	-
-Rule	Syria	1986	only	-	Feb	16	2:00	1:00	" DST"
+Rule	Syria	1986	only	-	Feb	16	2:00	1:00	S
 Rule	Syria	1986	only	-	Oct	9	2:00	0	-
-Rule	Syria	1987	only	-	Mar	1	2:00	1:00	" DST"
+Rule	Syria	1987	only	-	Mar	1	2:00	1:00	S
 Rule	Syria	1987	1988	-	Oct	31	2:00	0	-
-Rule	Syria	1988	only	-	Mar	15	2:00	1:00	" DST"
-Rule	Syria	1989	only	-	Mar	31	2:00	1:00	" DST"
+Rule	Syria	1988	only	-	Mar	15	2:00	1:00	S
+Rule	Syria	1989	only	-	Mar	31	2:00	1:00	S
 Rule	Syria	1989	only	-	Oct	1	2:00	0	-
-Rule	Syria	1990	max	-	Apr	1	2:00	1:00	" DST"
+Rule	Syria	1990	max	-	Apr	1	2:00	1:00	S
 Rule	Syria	1990	max	-	Sep	30	2:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Damascus	2:25:12 -	LMT	1920
-			2:00	Syria	EET%s
+			2:00	Syria	EE%sT
 
 # Tajikistan
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Dushanbe	4:35:12 -	LMT	1924 May  2
-			5:00	-	DSK	1957 Mar
-			6:00 RussiaAsia DS%s	1991
-			6:00	-	DSK
-# Shanks has Dushanbe at 5:00 (6:00 summer) after 1991 Sep 29 3:00,
-# but usno1995 has it at 6:00.  Go with usno1995.
+			5:00	-	DUST	1957 Mar    # Dushanbe Time
+			6:00 RussiaAsia DUS%sT	1991 Mar 31 2:00s
+			5:00	1:00	DUSST	1991 Sep  9 # independence
+			5:00 RussiaAsia	TJ%sT	1992
+			5:00	-	TJT		    # Tajikistan Time
+# Shanks has Dushanbe at 5:00 (6:00 summer) after 1991,
+# but a cable from the American Embassy at Dushanbe
+# <URL:http://www.itaiep.doc.gov/bisnis/cables/960703ti.html> (1996-07-02)
+# says that Tajikistan is at 5:00.  Guess no DST after 1991.
 
 # Thailand
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Bangkok	6:42:04	-	LMT	1880
-			6:42	-	BMT	1920 Apr
+			6:42:04	-	BMT	1920 Apr # Bangkok Mean Time
 			7:00	-	ICT
 
 # Turkmenistan
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Ashkhabad	3:53:32 -	LMT	1924 May  2
-			4:00	-	ASK	1957 Mar
-			5:00 RussiaAsia AS%s	1991
-			5:00	-	ASK
-# Shanks has Ashkhabad at 4:00 (5:00 summer) after 1991 Sep 20 3:00,
-# but usno has it at 5:00.  Go with usno1995.
+Zone	Asia/Ashkhabad	3:53:32 -	LMT	1924 May  2 # or Ashgabat
+			4:00	-	ASHT	1957 Mar    # Ashkhabad Time
+			5:00 RussiaAsia ASH%sT	1991 Mar 31 2:00s
+			4:00	1:00	ASHST	1991 Oct 27 # independence
+			4:00 RussiaAsia	TM%sT	1992	    # Turkmenistan Time
+			4:00	-	TMT
+# Shanks has Ashkhabad at 4:00 (5:00 summer) after 1991, but
+# DHL <URL:http://www.dhl.com/dhlinfo/country/turkmeni.html> (1996-07-26)
+# reports 4:00.  Guess no DST after 1991.
 
 # United Arab Emirates
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -873,14 +851,16 @@ Zone	Asia/Dubai	3:41:12 -	LMT	1920
 # Uzbekistan
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Tashkent	4:37:12 -	LMT	1924 May  2
-			5:00	-	TSK	1957 Mar
-			6:00 RussiaAsia TS%s	1991 Mar 31 2:00s
-			5:00	1:00	TSD	1991 Sep 29 2:00s
-			5:00	-	TSK
+			5:00	-	TAST	1957 Mar    # Tashkent Time
+			6:00 RussiaAsia TAS%sT	1991 Mar 31 2:00s
+			5:00	1:00	TASST	1991 Sep 29 2:00s
+			5:00	-	UZT		    # Uzbekistan Time
 # Shanks has Tashkent using DST after 1991, but usno1995 says they don't.
-# Go with usno1995.
-# http://www.odci.gov/cia/publications/95fact/802389h.gif claims that
-# Uzbekistan has two time zones, but we lack data about this.
+# Guess no DST after 1991.
+# <URL:http://www.odci.gov/cia/publications/95fact/802389h.gif> (1995)
+# says that Uzbekistan has two time zones, but a cable
+# <URL:http://www.itaiep.doc.gov/bisnis/cables/960510uz.html> (1996-05-10)
+# from the American Embassy in Tashkent implies that they have just one.
 
 # Vietnam
 # From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
@@ -889,7 +869,7 @@ Zone	Asia/Tashkent	4:37:12 -	LMT	1924 May  2
 # From Shanks (1991):
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Saigon	7:06:40 -	LMT	1906 Jun  9
-			7:06	-	SMT	1911 Mar 11 0:01     # Saigon MT
+			7:06:20	-	SMT	1911 Mar 11 0:01 # Saigon MT?
 			7:00	-	ICT	1912 May
 			8:00	-	ICT	1931 May
 			7:00	-	ICT
diff --git a/time/australasia b/time/australasia
index 960f9e3f55..e65546feb8 100644
--- a/time/australasia
+++ b/time/australasia
@@ -1,4 +1,4 @@
-# @(#)australasia	7.27
+# @(#)australasia	7.28
 # This file also includes Pacific islands.
 
 # Notes are at the end of this file
@@ -143,7 +143,7 @@ Zone Australia/Lord_Howe 10:36:20 -	LMT	1895 Feb
 # Australian miscellany
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Indian/Christmas	7:02:52 -	LMT	1895 Feb
-			7:00	-	JVT
+			7:00	-	CXT	# Christmas Island Time
 #
 # Ashmore Is, Cartier
 # no indigenous inhabitants; only seasonal caretakers
@@ -159,32 +159,32 @@ Zone Indian/Christmas	7:02:52 -	LMT	1895 Feb
 
 # Cook Is
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Cook	1978	only	-	Nov	12	0:00	0:30	HD
-Rule	Cook	1979	max	-	Mar	Sun>=1	0:00	0	H
-Rule	Cook	1979	max	-	Oct	lastSun	0:00	0:30	HD
+Rule	Cook	1978	only	-	Nov	12	0:00	0:30	HS
+Rule	Cook	1979	max	-	Mar	Sun>=1	0:00	0	-
+Rule	Cook	1979	max	-	Oct	lastSun	0:00	0:30	HS
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Rarotonga	-10:39:04 -	LMT	1901		# Avarua
-			-10:30	-	CIST	1978 Nov 12	# Cook Is ST
-			-10:00	Cook	T%sT
+			-10:30	-	CKT	1978 Nov 12	# Cook Is Time
+			-10:00	Cook	CK%sT
 
 # Cocos
 # From USNO (1989):
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Indian/Cocos	6:30	-	CCT
+Zone	Indian/Cocos	6:30	-	CCT	# Cocos Islands Time
 
 # Fiji
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Fiji	11:53:40 -	LMT	1915 Oct 26	# Suva
-			12:00	-	NZST
+			12:00	-	FJT	# Fiji Time
 
 # French Polynesia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Gambier	 -8:59:48 -	LMT	1912 Oct	# Rikitea
-			 -9:00	-	GBT
+			 -9:00	-	GAMT	# Gambier Time
 Zone	Pacific/Marquesas -9:18:00 -	LMT	1912 Oct
-			 -9:30	-	MQT
+			 -9:30	-	MART	# Marquesas Time
 Zone	Pacific/Tahiti	 -9:58:16 -	LMT	1912 Oct	# Papeete
-			-10:00	-	THT
+			-10:00	-	TAHT	# Tahiti Time
 
 # Guam
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -209,57 +209,57 @@ Zone Pacific/Johnston	-10:00	-	HST
 # Kiribati
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Tarawa	 11:32:04 -	LMT	1901		# Bairiki
-			 12:00	-	NZST
+			 12:00	-	GILT		 # Gilbert Is Time
 Zone Pacific/Enderbury	-11:24:20 -	LMT	1901
-			-12:00	-	KJT	1979 Oct
-			-11:00	-	SST	1995
-			 13:00	-	TGT
+			-12:00	-	PHOT	1979 Oct # Phoenix Is Time
+			-11:00	-	PHOT	1995
+			 13:00	-	PHOT
 Zone Pacific/Kiritimati	-10:29:20 -	LMT	1901
-			-10:40	-	LIT	1979 Oct	# Line Is Time
-			-10:00	-	THT	1995
-			 14:00	-	KRT
+			-10:40	-	LINT	1979 Oct # Line Is Time
+			-10:00	-	LINT	1995
+			 14:00	-	LINT
 
 # N Mariana Is
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Saipan	 9:43:00 -	LMT	1901
-			 9:00	-	PLT	1969 Oct
-			10:00	-	GST
+			 9:00	-	MPT	1969 Oct # N Mariana Is Time
+			10:00	-	MPT
 
 # Marshall Is
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Majuro	11:24:48 -	LMT	1901
-			11:00	-	NCST	1969 Oct
-			12:00	-	NZST
+			11:00	-	MHT	1969 Oct # Marshall Islands Time
+			12:00	-	MHT
 Zone Pacific/Kwajalein	11:09:20 -	LMT	1901
-			11:00	-	NCST	1969 Oct
-			-12:00	-	KJT	1993 Aug 20
-			12:00	-	NZST
+			11:00	-	MHT	1969 Oct
+			-12:00	-	KWAT	1993 Aug 20	# Kwajalein Time
+			12:00	-	MHT
 
 # Micronesia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Yap	9:12:32	-	LMT	1901		# Colonia
-			9:00	-	PLT	1969 Oct
-			10:00	-	GST
+			9:00	-	YAPT	1969 Oct	# Yap Time
+			10:00	-	YAPT
 Zone Pacific/Truk	10:07:08 -	LMT	1901
-			10:00	-	GST
+			10:00	-	TRUT			# Truk Time
 Zone Pacific/Ponape	10:32:52 -	LMT	1901		# Kolonia
-			11:00	-	NCST
+			11:00	-	PONT			# Ponape Time
 Zone Pacific/Kosrae	10:51:56 -	LMT	1901
-			11:00	-	NCST	1969 Oct
-			12:00	-	NZST
+			11:00	-	PONT	1969 Oct
+			12:00	-	KOST			# Kosrae Time
 
 # Nauru
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Nauru	11:07:40 -	LMT	1921 Jan 15	# Uaobe
-			11:30	-	NST	1942 Mar 15
+			11:30	-	NRT	1942 Mar 15	# Nauru Time
 			9:00	-	JST	1944 Aug 15
-			11:30	-	NST	1979 May
-			12:00	-	NZST
+			11:30	-	NRT	1979 May
+			12:00	-	NRT
 
 # New Caledonia
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	NC	1977	1978	-	Dec	Sun>=1	0:00	1:00	D
-Rule	NC	1978	1979	-	Feb	27	0:00	0	S
+Rule	NC	1977	1978	-	Dec	Sun>=1	0:00	1:00	S
+Rule	NC	1978	1979	-	Feb	27	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Noumea	11:05:48 -	LMT	1912 Jan 13
 			11:00	NC	NC%sT
@@ -293,11 +293,11 @@ Rule	NZ	1990	max	-	Mar	Sun>=15	2:00s	0	S
 Zone Pacific/Auckland	11:39:04 -	LMT	1868
 			11:30	NZ	NZ%sT	1940 Sep 29 2:00
 			12:00	NZ	NZ%sT
-Zone Pacific/Chatham	12:45	NZ	CH%sT
+Zone Pacific/Chatham	12:45	NZ	CHA%sT
 
 
 # Antipodes Is, Kermadec Is
-# no information; probably like Pacific/Auckland
+# uninhabited except by research personnel; probably like Pacific/Auckland
 
 ###############################################################################
 
@@ -305,20 +305,20 @@ Zone Pacific/Chatham	12:45	NZ	CH%sT
 # Niue
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Niue	-11:19:40 -	LMT	1901		# Alofi
-			-11:20	-	NIT	1951	    # Niue I Time
-			-11:30	-	NIT	1978 Oct 1
-			-11:00	-	SST
+			-11:20	-	NUT	1951	# Niue Time
+			-11:30	-	NUT	1978 Oct 1
+			-11:00	-	NUT
 
 # Norfolk
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Norfolk	11:11:52 -	LMT	1901		# Kingston
-			11:12	-	NMT	1951
-			11:30	-	NRFT
+			11:12	-	NMT	1951	# Norfolk Mean Time
+			11:30	-	NFT		# Norfolk Time
 
 # Palau
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Palau	8:57:56 -	LMT	1901		# Koror
-			9:00	-	PLT
+			9:00	-	PWT	# Palau Time
 
 # Palmyra
 # uninhabited since World War II; was probably like Pacific/Kiritmati
@@ -326,18 +326,18 @@ Zone Pacific/Palau	8:57:56 -	LMT	1901		# Koror
 # Papua New Guinea
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Port_Moresby 9:48:40 -	LMT	1880
-			9:49	-	PMMT	1895
-			10:00	-	EST
+			9:48:40	-	PMMT	1895	# Port Moresby Mean Time
+			10:00	-	PGT		# Papua New Guinea Time
 
 # Pitcairn
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Pitcairn	-8:40:20 -	LMT	1901		# Adamstown
-			-8:30	-	PIT
+			-8:30	-	PNT	# Pitcairn Time
 
 # American Samoa
 Zone Pacific/Pago_Pago	 12:37:12 -	LMT	1879 Jul  5
 			-11:22:48 -	LMT	1911
-			-11:30	-	SST	1950
+			-11:30	-	SAMT	1950		# Samoa Time
 			-11:00	-	NST	1967 Apr	# N=Nome
 			-11:00	-	BST	1983 Nov 30	# B=Bering
 			-11:00	-	SST			# S=Samoa
@@ -345,52 +345,52 @@ Zone Pacific/Pago_Pago	 12:37:12 -	LMT	1879 Jul  5
 # W Samoa
 Zone Pacific/Apia	 12:33:04 -	LMT	1879 Jul  5
 			-11:26:56 -	LMT	1911
-			-11:30	-	SST	1950
-			-11:00	-	SST
+			-11:30	-	SAMT	1950		# Samoa Time
+			-11:00	-	WST			# W Samoa Time
 
 # Solomon Is
 # excludes Bougainville, for which see Papua New Guinea
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Guadalcanal 10:39:48 -	LMT	1912 Oct	# Honiara
-			11:00	-	NCST
+			11:00	-	SBT	# Solomon Is Time
 
 # Tokelau Is
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Fakaofo	-11:24:56 -	LMT	1901
-			-10:00	-	THT
+			-10:00	-	TKT	# Tokelau Time
 
 # Tonga
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Tongatapu	12:19:20 -	LMT	1901
-			12:20	-	TMT	1968 Oct
-			13:00	-	TGT
+			12:20	-	TOT	1968 Oct # Tonga Time
+			13:00	-	TOT
 
 # Tuvalu
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Funafuti	11:56:52 -	LMT	1901
-			12:00	-	NZST
+			12:00	-	TVT	# Tuvalu Time
 
 # Vanuatu
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Vanuatu	1983	only	-	Sep	25	0:00	1:00	D
-Rule	Vanuatu	1984	1991	-	Mar	Sun>=23	0:00	0	S
-Rule	Vanuatu	1984	only	-	Oct	23	0:00	1:00	D
-Rule	Vanuatu	1985	1990	-	Sep	Sun>=23	0:00	1:00	D
-Rule	Vanuatu	1991	max	-	Sep	lastSun	0:00	1:00	D
-Rule	Vanuatu	1992	max	-	Mar	lastSun	0:00	0	S
+Rule	Vanuatu	1983	only	-	Sep	25	0:00	1:00	S
+Rule	Vanuatu	1984	1991	-	Mar	Sun>=23	0:00	0	-
+Rule	Vanuatu	1984	only	-	Oct	23	0:00	1:00	S
+Rule	Vanuatu	1985	1990	-	Sep	Sun>=23	0:00	1:00	S
+Rule	Vanuatu	1991	max	-	Sep	lastSun	0:00	1:00	S
+Rule	Vanuatu	1992	max	-	Mar	lastSun	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Efate	11:13:16 -	LMT	1912 Jan 13		# Vila
-			11:00	-	NCST
+			11:00	Vanuatu	VU%sT	# Vanuatu Time
 
 # Wake
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Wake	11:06:28 -	LMT	1901
-			12:00	-	NZST
+			12:00	-	WAKT	# Wake Time
 
 # Wallis and Futuna
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Wallis	12:15:20 -	LMT	1901
-			12:00	-	NZST
+			12:00	-	WFT	# Wallis & Futuna Time
 
 ###############################################################################
 
@@ -419,34 +419,21 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # Corrections are welcome!
 #		std dst
 #		LMT	Local Mean Time
-#	  6:30	CCT	Cocos*
-#	  7:00	JVT	Java*
 #	  8:00	WST WST	Western Australia
 #	  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:00	GST	Guam
 #	 10:30	LHST LHST Lord Howe*
-#	 11:00	NCST NCDT New Caledonia*
-#	 11:30	NRFT	Norfolk*
 #	 12:00	NZST NZDT New Zealand
-#	 12:45	CHST CHDT Chatham*
-#	 13:00	TGT	Tongatapu*
-#	 14:00	KRT	Kiritimati*
-#	-12:00	KJT	Kwajalein (no longer used)*
+#	 12:45	CHAST CHADT Chatham*
 #	-11:00	SST	Samoa
-#	-10:40	LIT	Line Is (no longer used)*
-#	-10:00	THT	Tahiti*
 #	-10:00	HST	Hawaii
-#	- 9:30	MQT	Marquesas*
-#	- 9:00	GBT	Gambier*
-#	- 8:30	PIT	Pitcairn*
 #
 # See the `northamerica' file for Hawaii.
 # See the `southamerica' file for Easter I and the Galapagos Is.
 #
-# See the `africa' file for Zone naming conventions.
+# See the `africa' file for time zone naming and abbreviation conventions.
 
 ###############################################################################
 
diff --git a/time/europe b/time/europe
index ce66e8ab58..73fa55c410 100644
--- a/time/europe
+++ b/time/europe
@@ -1,10 +1,10 @@
-# @(#)europe	7.38
+# @(#)europe	7.39
 
 # 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
 # tz@elsie.nci.nih.gov for general use in the future).
 
-# From Paul Eggert <eggert@twinsun.com> (1995-12-19):
+# From Paul Eggert <eggert@twinsun.com> (1996-09-03):
 # A good source for time zone historical data outside the U.S. is
 # Thomas G. Shanks, The International Atlas (3rd edition),
 # San Diego: ACS Publications, Inc. (1991).
@@ -16,43 +16,24 @@
 #
 # I invented the abbreviations marked `*' in the following table;
 # the rest are from earlier versions of this file, or from other sources.
-# The starred Russian names are dubious.  Corrections are welcome!
+# Corrections are welcome!
 #		std dst
 #		LMT	Local Mean Time
-#		LST	Local Star Time (Russian ``mestnoe zvezdnoe vremya'')
 #	-4:00	AST	Atlantic
-#	-3:00	WGT+DST	Western Greenland*
-#	-2:00	MGT+DST	Middle Greenland*
-#	-1:00	EGT+DST	Eastern Greenland*
-#	-1:00	ACT+DST	Azores and Canaries*
-#	-1:00	IST IDT	Iceland (no longer used)*
+#	-3:00	WGT WGST Western Greenland*
+#	-1:00	EGT EGST Eastern Greenland*
 #	 0:00	GMT BST Greenwich, British Summer
-#	 0:00	WET+DST Western Europe
-#	 1:00	MET+DST Middle Europe
-#	 2:00	EET+DST Eastern Europe
-#	 3:00	MSK MSD	Moscow
-#	 3:00	TUR+DST	Turkey (no longer used)*
-#	 4:00	KSK KSD	Kuybyshev (was 3:00)*
-#	 5:00	ESK ESD	Yekaterinburg (was 4:00) (was SSK, SSD)*
-#	 6:00	OSK OSD	Omsk (was 5:00)*
-#	 6:00	NSK NSD	Novosibirsk (was 7:00)
-#	 7:00	KRSK KRSD Krasnoyarsk (was 6:00)
-#	 8:00	ISK ISD	Irkutsk (was 7:00)*
-#	 9:00	YSK YSD	Yakutsk (was 8:00)*
-#	10:00	VSK VSD	Vladivostok (was 9:00)*
-#	11:00	MSK MSD	Magadan (was 10:00)*
-#	12:00	PSK PSD	Petropavlovsk-Kamchatski (was 11:00)*
-#	13:00	ASK ASD	Anadyr (was 12:00)*
-#
-# See the `africa' file for Zone naming conventions.
+#	 0:00	GMT IST Greenwich, Irish Summer
+#	 0:00	WET WEST Western Europe
+#	 1:00	CET CEST Central Europe
+#	 2:00	EET EEST Eastern Europe
+#
+# See the `africa' file for time zone naming and abbreviation conventions.
 #
 # A reliable and entertaining source about time zones, especially in Britain,
 # is Derek Howse, Greenwich time and the discovery of the longitude,
 # Oxford University Press (1980).
 
-# 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]: Belgium, France, (West) Germany, Italy,
 # Luxembourg, the Netherlands.
@@ -74,9 +55,11 @@
 # different end date for the UK and Ireland, and this was always allowed
 # in the Directive.
 
+
 ###############################################################################
 
 # United Kingdom
+# The UK and its colonies adopted the Gregorian calendar on 1752-09-14.
 
 # From Peter Ilieve <peter@memex.co.uk> (July 6, 1994):
 #
@@ -134,6 +117,12 @@
 # but it met with ridicule and opposition, especially from farming interests.
 # One-hour Summer Time was eventually adopted as a wartime measure in 1916.
 
+# From Paul Eggert (1996-09-03):
+# The OED Supplement says that the English originally said ``Daylight Saving''
+# when they were debating the adoption of DST in 1908; but by 1916 this
+# term appears only in quotes taken from DST's opponents, whereas the
+# proponents (who eventually won the argument) are quoted as using ``Summer''.
+
 # From Arthur David Olson (January 19, 1989):
 #
 # A source at the British Information Office in New York avers that it's
@@ -194,6 +183,12 @@
 # Sunday, but in the night of Sunday- Monday so that it will operate from
 # Monday, 2nd April.'
 
+# From Chris Carrier <72157.3334@CompuServe.COM> (1996-06-14):
+# I remember reading in various wartime issues of the London Times the
+# acronym BDST for British Double Summer Time.  Look for the published
+# time of sunrise and sunset in The Times, when BDST was in effect, and
+# if you find a zone reference it will say, "All times B.D.S.T."
+
 # From Peter Ilieve <peter@memex.co.uk> (September 3, 1993):
 #
 # > # Current rules
@@ -719,18 +714,18 @@ Rule	GB-Eire	1939	only	-	Apr	Sun>=16	2:00s	1:00	BST
 # 1939 end to 1947--irregular, and with double summer time
 Rule	GB-Eire	1939	only	-	Nov	19	2:00s	0	GMT
 Rule	GB-Eire	1940	only	-	Feb	25	2:00s	1:00	BST
-Rule	GB-Eire	1941	only	-	May	Sun>=2	1:00s	2:00	DST
+Rule	GB-Eire	1941	only	-	May	Sun>=2	1:00s	2:00	BDST
 Rule	GB-Eire	1941	1943	-	Aug	Sun>=9	1:00s	1:00	BST
-Rule	GB-Eire	1942	1944	-	Apr	Sun>=2	1:00s	2:00	DST
+Rule	GB-Eire	1942	1944	-	Apr	Sun>=2	1:00s	2:00	BDST
 Rule	GB-Eire	1944	only	-	Sep	Sun>=16	1:00s	1:00	BST
 # Double daylight starts on a Monday in 1945--see above.
-Rule	GB-Eire	1945	only	-	Apr	 2	1:00s	2:00	DST
+Rule	GB-Eire	1945	only	-	Apr	 2	1:00s	2:00	BDST
 Rule	GB-Eire	1945	only	-	Jul	15	1:00s	1:00	BST
 Rule	GB-Eire	1945	only	-	Oct	 7	2:00s	0	GMT
 Rule	GB-Eire	1946	only	-	Apr	14	2:00s	1:00	BST
 Rule	GB-Eire	1946	only	-	Oct	 6	2:00s	0	GMT
 Rule	GB-Eire	1947	only	-	Mar	16	2:00s	1:00	BST
-Rule	GB-Eire	1947	only	-	Apr	13	1:00s	2:00	DST
+Rule	GB-Eire	1947	only	-	Apr	13	1:00s	2:00	BDST
 Rule	GB-Eire	1947	only	-	Aug	10	1:00s	1:00	BST
 Rule	GB-Eire	1947	only	-	Nov	 2	2:00s	0	GMT
 # So much for double saving time.  1948 and 1949, irregular.
@@ -768,15 +763,15 @@ Zone	Europe/London	-0:01:15 -	LMT	1847 Sep 22
 			 0:00	EU	GMT/BST
 Zone	Europe/Belfast	-0:23:40 -	LMT	1880 Aug  2
 			-0:25:21 -	DMT	1916 May 21 2:00    # Dublin MT
-			-0:25:21 1:00	DST	1916 Oct  1 3:00
+			-0:25:21 1:00	IST	1916 Oct  1 3:00    # Irish Summer Time
 			 0:00	GB-Eire	%s	1968 Oct 27
 			 1:00	-	BST	1971 Oct 31 2:00u
 			 0:00	GB-Eire	%s	1996
 			 0:00	EU	GMT/BST
 Zone	Europe/Dublin	-0:25:21 -	LMT	1880 Aug  2
 			-0:25:21 -	DMT	1916 May 21 2:00    # Dublin MT
-			-0:25:21 1:00	DST	1916 Oct  1 3:00
-			 0:00	GB-Eire	%s	1921 Dec  6
+			-0:25:21 1:00	IST	1916 Oct  1 3:00
+			 0:00	GB-Eire	%s	1921 Dec  6 # independence
 			 0:00	GB-Eire	GMT/IST	1940 Feb 25 2:00
 			 0:00	1:00	IST	1946 Oct  6 2:00
 			 0:00	-	GMT	1947 Mar 16 2:00
@@ -795,259 +790,278 @@ Zone	Europe/Dublin	-0:25:21 -	LMT	1880 Aug  2
 # Common Market, etc.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	EU	1977	1980	-	Apr	Sun>=1	 1:00u	1:00	" DST"
+Rule	EU	1977	1980	-	Apr	Sun>=1	 1:00u	1:00	S
 Rule	EU	1977	only	-	Sep	lastSun	 1:00u	0	-
 Rule	EU	1978	only	-	Oct	 1	 1:00u	0	-
 Rule	EU	1979	1995	-	Sep	lastSun	 1:00u	0	-
-Rule	EU	1981	max	-	Mar	lastSun	 1:00u	1:00	" DST"
+Rule	EU	1981	max	-	Mar	lastSun	 1:00u	1:00	S
 Rule	EU	1996	max	-	Oct	lastSun	 1:00u	0	-
 
 # W-Eur differs from EU only in that W-Eur uses standard time.
-Rule	W-Eur	1977	1980	-	Apr	Sun>=1	 1:00s	1:00	" DST"
+Rule	W-Eur	1977	1980	-	Apr	Sun>=1	 1:00s	1:00	S
 Rule	W-Eur	1977	only	-	Sep	lastSun	 1:00s	0	-
 Rule	W-Eur	1978	only	-	Oct	 1	 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	1981	max	-	Mar	lastSun	 1:00s	1:00	S
 Rule	W-Eur	1996	max	-	Oct	lastSun	 1:00s	0	-
 
-# Older M-Eur rules are for convenience in the tables.
-# From 1977 on, M-Eur differs from EU only in that M-Eur uses standard time.
-Rule	M-Eur	1916	only	-	Apr	30	23:00	1:00	" DST"
-Rule	M-Eur	1916	only	-	Oct	 1	 1:00	0	-
-Rule	M-Eur	1917	1918	-	Apr	Mon>=15	 2:00s	1:00	" DST"
-Rule	M-Eur	1917	1918	-	Sep	Mon>=15	 2:00s	0	-
-Rule	M-Eur	1940	only	-	Apr	 1	 2:00s	1:00	" DST"
+# Older C-Eur rules are for convenience in the tables.
+# From 1977 on, C-Eur differs from EU only in that C-Eur uses standard time.
+Rule	C-Eur	1916	only	-	Apr	30	23:00	1:00	S
+Rule	C-Eur	1916	only	-	Oct	 1	 1:00	0	-
+Rule	C-Eur	1917	1918	-	Apr	Mon>=15	 2:00s	1:00	S
+Rule	C-Eur	1917	1918	-	Sep	Mon>=15	 2:00s	0	-
+Rule	C-Eur	1940	only	-	Apr	 1	 2:00s	1:00	S
 # Whitman says 1941 DST was only from Feb 25 to Oct 5; go with Shanks.
-Rule	M-Eur	1942	only	-	Nov	 2	 2:00s	0	-
-Rule	M-Eur	1943	only	-	Mar	29	 2:00s	1:00	" DST"
-Rule	M-Eur	1943	only	-	Oct	 4	 2:00s	0	-
-Rule	M-Eur	1944	only	-	Apr	 3	 2:00s	1:00	" DST"
+Rule	C-Eur	1942	only	-	Nov	 2	 2:00s	0	-
+Rule	C-Eur	1943	only	-	Mar	29	 2:00s	1:00	S
+Rule	C-Eur	1943	only	-	Oct	 4	 2:00s	0	-
+Rule	C-Eur	1944	only	-	Apr	 3	 2:00s	1:00	S
 # Whitman gives 1944 Oct 7; go with Shanks.
-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	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	C-Eur	1944	only	-	Oct	 2	 2:00s	0	-
+Rule	C-Eur	1977	1980	-	Apr	Sun>=1	 2:00s	1:00	S
+Rule	C-Eur	1977	only	-	Sep	lastSun	 2:00s	0	-
+Rule	C-Eur	1978	only	-	Oct	 1	 2:00s	0	-
+Rule	C-Eur	1979	1995	-	Sep	lastSun	 2:00s	0	-
+Rule	C-Eur	1981	max	-	Mar	lastSun	 2:00s	1:00	S
+Rule	C-Eur	1996	max	-	Oct	lastSun	 2:00s	0	-
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Russia	1917	only	-	Jul	 1	23:00	1:00	" DST"
-Rule	Russia	1917	only	-	Dec	28	 0:00	0	-
-Rule	Russia	1918	only	-	May	31	22:00	2:00	" DDST"
-Rule	Russia	1918	only	-	Sep	17	 0:00	1:00	" DST"
-Rule	Russia	1919	only	-	May	31	23:00	2:00	" DDST"
-Rule	Russia	1919	only	-	Jul	 1	 2:00	1:00	D
-Rule	Russia	1919	only	-	Aug	16	 0:00	0	K
-Rule	Russia	1921	only	-	Feb	14	23:00	1:00	D
+Rule	Russia	1917	only	-	Jul	 1	23:00	1:00	MST	# Moscow Summer Time
+Rule	Russia	1917	only	-	Dec	28	 0:00	0	MMT	# Moscow Mean Time
+Rule	Russia	1918	only	-	May	31	22:00	2:00	MDST	# Moscow Double Summer Time
+Rule	Russia	1918	only	-	Sep	17	 0:00	1:00	MST
+Rule	Russia	1919	only	-	May	31	23:00	2:00	MDST
+Rule	Russia	1919	only	-	Jul	 1	 2:00	1:00	S
+Rule	Russia	1919	only	-	Aug	16	 0:00	0	-
+Rule	Russia	1921	only	-	Feb	14	23:00	1:00	S
 # Shanks gives 1921 Mar 21 for the following transition.
 # From Andrew A. Chernov <ache@astral.msk.su> (November 12, 1993):
 # My sources says, that it is Mar 20, not 21.
-Rule	Russia	1921	only	-	Mar	20	23:00	2:00	DD
-Rule	Russia	1921	only	-	Sep	 1	 0:00	1:00	D
-Rule	Russia	1921	only	-	Oct	 1	 0:00	0	K
-Rule	Russia	1981	1984	-	Apr	 1	 0:00	1:00	D
-Rule	Russia	1981	1983	-	Oct	 1	 0:00	0	K
-Rule	Russia	1984	max	-	Sep	lastSun	 2:00s	0	K
-Rule	Russia	1985	max	-	Mar	lastSun	 2:00s	1:00	D
+Rule	Russia	1921	only	-	Mar	20	23:00	2:00	DS
+Rule	Russia	1921	only	-	Sep	 1	 0:00	1:00	S
+Rule	Russia	1921	only	-	Oct	 1	 0:00	0	-
+Rule	Russia	1981	1984	-	Apr	 1	 0:00	1:00	S
+Rule	Russia	1981	1983	-	Oct	 1	 0:00	0	-
+Rule	Russia	1984	max	-	Sep	lastSun	 2:00s	0	-
+Rule	Russia	1985	max	-	Mar	lastSun	 2:00s	1:00	S
 
 # These are for backward compatibility with older versions.
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	WET		0:00	EU	WET%s
-Zone	MET		1:00	M-Eur	MET%s
-Zone	EET		2:00	EU	EET%s
+Zone	WET		0:00	EU	WE%sT
+Zone	CET		1:00	C-Eur	CE%sT
+Zone	MET		1:00	C-Eur	ME%sT
+Zone	EET		2:00	EU	EE%sT
 
-# Tom Hoffman says that MET is also known as Central European Time
+# Previous editions of this database used abbreviations like MET DST
+# for Central European Summer Time, but this didn't agree with common usage.
+
+# From Markus Kuhn <mskuhn@unrza3.dialin.rrze.uni-erlangen.de> (1996-07-12):
+# The official German names ... are
+#
+#	Mitteleuropaeische Zeit (MEZ)         = UTC+01:00
+#	Mitteleuropaeische Sommerzeit (MESZ)  = UTC+02:00
+#
+# as defined in the German Time Act (Gesetz ueber die Zeitbestimmung (ZeitG),
+# 1978-07-25, Bundesgesetzblatt, Jahrgang 1978, Teil I, S. 1110-1111)....
+# I wrote ... to the German Federal Physical-Technical Institution
+#
+#	Physikalisch-Technische Bundesanstalt (PTB)
+#	Laboratorium 4.41 "Zeiteinheit"
+#	Postfach 3345
+#	D-38023 Braunschweig
+#	phone: +49 531 592-0
+#
+# ... I received today an answer letter from Dr. Peter Hetzel, head of the PTB
+# department for time and frequency transmission.  He explained that the
+# PTB translates MEZ and MESZ into English as
+#
+#	Central European Time (CET)         = UTC+01:00
+#	Central European Summer Time (CEST) = UTC+02:00
 
-Link	MET	CET
 
 # Albania
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Albania	1940	only	-	Jun	16	0:00	1:00	" DST"
+Rule	Albania	1940	only	-	Jun	16	0:00	1:00	S
 Rule	Albania	1942	only	-	Nov	 2	3:00	0	-
-Rule	Albania	1943	only	-	Mar	29	2:00	1:00	" DST"
+Rule	Albania	1943	only	-	Mar	29	2:00	1:00	S
 Rule	Albania	1943	only	-	Apr	10	3:00	0	-
-Rule	Albania	1974	only	-	May	 4	0:00	1:00	" DST"
+Rule	Albania	1974	only	-	May	 4	0:00	1:00	S
 Rule	Albania	1974	only	-	Oct	 2	0:00	0	-
-Rule	Albania	1975	only	-	May	 1	0:00	1:00	" DST"
+Rule	Albania	1975	only	-	May	 1	0:00	1:00	S
 Rule	Albania	1975	only	-	Oct	 2	0:00	0	-
-Rule	Albania	1976	only	-	May	 2	0:00	1:00	" DST"
+Rule	Albania	1976	only	-	May	 2	0:00	1:00	S
 Rule	Albania	1976	only	-	Oct	 3	0:00	0	-
-Rule	Albania	1977	only	-	May	 8	0:00	1:00	" DST"
+Rule	Albania	1977	only	-	May	 8	0:00	1:00	S
 Rule	Albania	1977	only	-	Oct	 2	0:00	0	-
-Rule	Albania	1978	only	-	May	 6	0:00	1:00	" DST"
+Rule	Albania	1978	only	-	May	 6	0:00	1:00	S
 Rule	Albania	1978	only	-	Oct	 1	0:00	0	-
-Rule	Albania	1979	only	-	May	 5	0:00	1:00	" DST"
+Rule	Albania	1979	only	-	May	 5	0:00	1:00	S
 Rule	Albania	1979	only	-	Sep	30	0:00	0	-
-Rule	Albania	1980	only	-	May	 3	0:00	1:00	" DST"
+Rule	Albania	1980	only	-	May	 3	0:00	1:00	S
 Rule	Albania	1980	only	-	Oct	 4	0:00	0	-
-Rule	Albania	1981	only	-	Apr	26	0:00	1:00	" DST"
+Rule	Albania	1981	only	-	Apr	26	0:00	1:00	S
 Rule	Albania	1981	only	-	Sep	27	0:00	0	-
-Rule	Albania	1982	only	-	May	 2	0:00	1:00	" DST"
+Rule	Albania	1982	only	-	May	 2	0:00	1:00	S
 Rule	Albania	1982	only	-	Oct	 3	0:00	0	-
-Rule	Albania	1983	only	-	Apr	18	0:00	1:00	" DST"
+Rule	Albania	1983	only	-	Apr	18	0:00	1:00	S
 Rule	Albania	1983	only	-	Oct	 1	0:00	0	-
-Rule	Albania	1984	only	-	Apr	 1	0:00	1:00	" DST"
+Rule	Albania	1984	only	-	Apr	 1	0:00	1:00	S
 Rule	Albania	1984	only	-	Oct	 1	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 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 `EU' soon.
+			1:00	-	CET	1940 Jun 16
+			1:00	Albania	CE%sT	1985 Mar 31 1:00
+			1:00	W-Eur	CE%sT
 
 # Andorra
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Andorra	0:06:04 -	LMT	1901
 			0:00	-	WET	1946 Sep 30
-			1:00	-	MET	1985 Mar 31 2:00
-			1:00	EU	MET%s
+			1:00	-	CET	1985 Mar 31 2:00
+			1:00	EU	CE%sT
 
 # Austria
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Austria	1920	only	-	Apr	 5	2:00s	1:00	" DST"
+Rule	Austria	1920	only	-	Apr	 5	2:00s	1:00	S
 Rule	Austria	1920	only	-	Sep	13	2:00s	0	-
-Rule	Austria	1945	only	-	Apr	 2	2:00s	1:00	" DST"
+Rule	Austria	1945	only	-	Apr	 2	2:00s	1:00	S
 Rule	Austria	1945	only	-	Nov	18	2:00s	0	-
-Rule	Austria	1946	only	-	Apr	14	2:00s	1:00	" DST"
+Rule	Austria	1946	only	-	Apr	14	2:00s	1:00	S
 Rule	Austria	1946	1948	-	Oct	Sun>=1	2:00s	0	-
-Rule	Austria	1947	only	-	Apr	 6	2:00s	1:00	" DST"
-Rule	Austria	1948	only	-	Apr	18	2:00s	1:00	" DST"
+Rule	Austria	1947	only	-	Apr	 6	2:00s	1:00	S
+Rule	Austria	1948	only	-	Apr	18	2:00s	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Vienna	1:05:20 -	LMT	1893 Apr
-			1:00	M-Eur	MET%s	1918 Jun 16 3:00
-			1:00	Austria	MET%s	1940 Apr  1 2:00
-			1:00	M-Eur	MET%s	1945 Apr  2 2:00
-			1:00	Austria	MET%s	1981
-			1:00	EU	MET%s
+			1:00	C-Eur	CE%sT	1918 Jun 16 3:00
+			1:00	Austria	CE%sT	1940 Apr  1 2:00
+			1:00	C-Eur	CE%sT	1945 Apr  2 2:00
+			1:00	Austria	CE%sT	1981
+			1:00	EU	CE%sT
 
 # Belarus
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Minsk	1:50:16 -	LMT	1880
-			2:31	Russia	LST%s	1919 Jul 1 2:00
-			3:00	Russia	MS%s	1922 Oct
+			2:30:20	Russia	%s	1919 Jul 1 2:00
+			3:00	Russia	MOS%sT	1922 Oct # Moscow Time
 			2:00	-	EET	1930 Jun 21
-			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 `EU' soon.
+			3:00	Russia	MOS%sT	1991 Mar 31 2:00s
+			2:00	1:00	EEST	1991 Sep 29 2:00s
+			2:00	C-Eur	EE%sT
 
 # Belgium
 # Whitman and Shanks disagree; go with Shanks, usually.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 # From Whitman:
-Rule	Belgium	1919	only	-	Mar	 1	23:00s	1:00	" DST"
+Rule	Belgium	1919	only	-	Mar	 1	23:00s	1:00	S
 Rule	Belgium	1919	only	-	Oct	 4	23:00s	0	-
 # Shanks gives 1920 Feb 14 23:00s; go with Whitman.
-Rule	Belgium	1920	1921	-	Mar	14	23:00s	1:00	" DST"
+Rule	Belgium	1920	1921	-	Mar	14	23:00s	1:00	S
 Rule	Belgium	1920	only	-	Oct	23	23:00s	0	-
 Rule	Belgium	1921	only	-	Oct	25	23:00s	0	-
-Rule	Belgium	1922	only	-	Mar	25	23:00s	1:00	" DST"
+Rule	Belgium	1922	only	-	Mar	25	23:00s	1:00	S
 # Whitman gives 1927 Oct 1 2:00s and 1928 Oct 7 2:00s; go with Shanks.
 Rule	Belgium	1922	1928	-	Oct	Sat>=1	23:00s	0	-
-Rule	Belgium	1923	only	-	Apr	21	23:00s	1:00	" DST"
-Rule	Belgium	1924	only	-	Mar	29	23:00s	1:00	" DST"
-Rule	Belgium	1925	only	-	Apr	 4	23:00s	1:00	" DST"
-Rule	Belgium	1926	only	-	Apr	17	23:00s	1:00	" DST"
-Rule	Belgium	1927	only	-	Apr	 9	23:00s	1:00	" DST"
-Rule	Belgium	1928	only	-	Apr	14	23:00s	1:00	" DST"
-Rule	Belgium	1929	only	-	Apr	21	 2:00s	1:00	" DST"
+Rule	Belgium	1923	only	-	Apr	21	23:00s	1:00	S
+Rule	Belgium	1924	only	-	Mar	29	23:00s	1:00	S
+Rule	Belgium	1925	only	-	Apr	 4	23:00s	1:00	S
+Rule	Belgium	1926	only	-	Apr	17	23:00s	1:00	S
+Rule	Belgium	1927	only	-	Apr	 9	23:00s	1:00	S
+Rule	Belgium	1928	only	-	Apr	14	23:00s	1:00	S
+Rule	Belgium	1929	only	-	Apr	21	 2:00s	1:00	S
 Rule	Belgium	1929	1938	-	Oct	Sun>=2	 2:00s	0	-
-Rule	Belgium	1930	only	-	Apr	13	 2:00s	1:00	" DST"
-Rule	Belgium	1931	only	-	Apr	19	 2:00s	1:00	" DST"
-Rule	Belgium	1932	only	-	Apr	17	 2:00s	1:00	" DST"
-Rule	Belgium	1933	only	-	Mar	26	 2:00s	1:00	" DST"
-Rule	Belgium	1934	only	-	Apr	 8	 2:00s	1:00	" DST"
-Rule	Belgium	1935	only	-	Mar	31	 2:00s	1:00	" DST"
-Rule	Belgium	1936	only	-	Apr	19	 2:00s	1:00	" DST"
+Rule	Belgium	1930	only	-	Apr	13	 2:00s	1:00	S
+Rule	Belgium	1931	only	-	Apr	19	 2:00s	1:00	S
+Rule	Belgium	1932	only	-	Apr	17	 2:00s	1:00	S
+Rule	Belgium	1933	only	-	Mar	26	 2:00s	1:00	S
+Rule	Belgium	1934	only	-	Apr	 8	 2:00s	1:00	S
+Rule	Belgium	1935	only	-	Mar	31	 2:00s	1:00	S
+Rule	Belgium	1936	only	-	Apr	19	 2:00s	1:00	S
 # Whitman says 1937 Apr 18 2:00s; go with Shanks.
-Rule	Belgium	1937	only	-	Apr	 4	 2:00s	1:00	" DST"
+Rule	Belgium	1937	only	-	Apr	 4	 2:00s	1:00	S
 # Whitman says 1938 Apr 10 2:00s; go with Shanks.
-Rule	Belgium	1938	only	-	Mar	27	 2:00s	1:00	" DST"
-Rule	Belgium	1939	only	-	Apr	16	 2:00s	1:00	" DST"
+Rule	Belgium	1938	only	-	Mar	27	 2:00s	1:00	S
+Rule	Belgium	1939	only	-	Apr	16	 2:00s	1:00	S
 Rule	Belgium	1939	only	-	Nov	19	 2:00s	0	-
-Rule	Belgium	1945	only	-	Apr	 2	 2:00s	1:00	" DST"
+Rule	Belgium	1945	only	-	Apr	 2	 2:00s	1:00	S
 Rule	Belgium	1945	only	-	Sep	16	 2:00s	0	-
-Rule	Belgium	1946	only	-	May	19	 2:00s	1:00	" DST"
+Rule	Belgium	1946	only	-	May	19	 2:00s	1:00	S
 Rule	Belgium	1946	only	-	Oct	 7	 2:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Brussels	0:17:20 -	LMT	1880
-			0:17	-	BST	1892 May  1 12:00
+			0:17:20	-	BMT	1892 May  1 12:00 # Brussels MT
 			0:00	-	WET	1914 Aug  4
-			1:00	M-Eur	MET%s	1919 Mar  1 23:00
-			0:00	Belgium	WET%s	1940 Feb 24 23:00
-			1:00	M-Eur	MET%s	1945 Apr  2  2:00
-			1:00	Belgium	MET%s	1977
-			1:00	EU	MET%s
+			1:00	C-Eur	CE%sT	1919 Mar  1 23:00
+			0:00	Belgium	WE%sT	1940 Feb 24 23:00
+			1:00	C-Eur	CE%sT	1945 Apr  2  2:00
+			1:00	Belgium	CE%sT	1977
+			1:00	EU	CE%sT
 
 # Bosnia and Herzegovina
-# They switched from the Julian to the Gregorian calendar on 1918 Mar 18.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Sarajevo	1:13:40	-	LMT	1884
-			1:00	-	MET	1941 Apr 18 23:00
-			1:00	M-Eur	MET%s	1945 May  8  2:00s
-			1:00	1:00  "MET DST"	1945 Sep 16  2:00s
-			1:00	-	MET	1983
-			1:00	EU	MET%s
+			1:00	-	CET	1941 Apr 18 23:00
+			1:00	C-Eur	CE%sT	1945 May  8  2:00s
+			1:00	1:00	CEST	1945 Sep 16  2:00s
+			1:00	-	CET	1983
+			1:00	EU	CE%sT
 
 # Bulgaria
-# Part switched from the Julian to the Gregorian calendar on 1915 Nov 14;
-# the rest switched on 1920 Sep 17.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Bulg	1979	only	-	Mar	31	23:00	1:00	" DST"
+Rule	Bulg	1979	only	-	Mar	31	23:00	1:00	S
 Rule	Bulg	1979	only	-	Oct	 1	 1:00	0	-
-Rule	Bulg	1980	1982	-	Apr	Sat<=7	23:00	1:00	" DST"
+Rule	Bulg	1980	1982	-	Apr	Sat<=7	23:00	1:00	S
 Rule	Bulg	1980	only	-	Sep	29	 1:00	0	-
 Rule	Bulg	1981	only	-	Sep	27	 2:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Sofia	1:33:16 -	LMT	1880
-			1:57	-	TST	1894 Nov 30
+			1:56:56	-	IMT	1894 Nov 30 # Istanbul MT?
 			2:00	-	EET	1942 Nov  2  3:00
-			1:00	M-Eur	MET%s	1945 Apr  2  3:00
+			1:00	C-Eur	CE%sT	1945 Apr  2  3:00
 			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 `EU' soon.
+			2:00	Bulg	EE%sT	1982 Sep 26  2:00
+			2:00	C-Eur	EE%sT
 
 # Croatia
-# They switched from the Julian to the Gregorian calendar on 1918 Mar 18.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Zagreb	1:03:52	-	LMT	1884
-			1:00	-	MET	1941 Apr 18 23:00
-			1:00	M-Eur	MET%s	1945 May  8  2:00s
-			1:00	1:00  "MET DST"	1945 Sep 16  2:00s
-			1:00	-	MET	1983
-			1:00	EU	MET%s
+			1:00	-	CET	1941 Apr 18 23:00
+			1:00	C-Eur	CE%sT	1945 May  8  2:00s
+			1:00	1:00	CEST	1945 Sep 16  2:00s
+			1:00	-	CET	1983
+			1:00	EU	CE%sT
 
 # Czech Republic
+# Gregorian calendar adopted 1584-01-17.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Czech	1945	only	-	Apr	 8	2:00s	1:00	" DST"
+Rule	Czech	1945	only	-	Apr	 8	2:00s	1:00	S
 Rule	Czech	1945	only	-	Nov	18	2:00s	0	-
-Rule	Czech	1946	only	-	May	 6	2:00s	1:00	" DST"
+Rule	Czech	1946	only	-	May	 6	2:00s	1:00	S
 Rule	Czech	1946	1949	-	Oct	Sun>=1	2:00s	0	-
-Rule	Czech	1947	only	-	Apr	20	2:00s	1:00	" DST"
-Rule	Czech	1948	only	-	Apr	18	2:00s	1:00	" DST"
-Rule	Czech	1949	only	-	Apr	 9	2:00s	1:00	" DST"
+Rule	Czech	1947	only	-	Apr	20	2:00s	1:00	S
+Rule	Czech	1948	only	-	Apr	18	2:00s	1:00	S
+Rule	Czech	1949	only	-	Apr	 9	2:00s	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Prague	0:57:44 -	LMT	1850
-			0:58	-	PMT	1891 Oct     # Prague Mean Time
-			1:00	M-Eur	MET%s	1944 Sep 17 2:00s
-			1:00	Czech	MET%s	1979
-			1:00	EU	MET%s
+			0:57:44	-	PMT	1891 Oct     # Prague Mean Time
+			1:00	C-Eur	CE%sT	1944 Sep 17 2:00s
+			1:00	Czech	CE%sT	1979
+			1:00	EU	CE%sT
 
 # Denmark
+# Gregorian calendar adopted 1700-03-01.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Denmark	1916	only	-	May	14	23:00	1:00	" DST"
+Rule	Denmark	1916	only	-	May	14	23:00	1:00	S
 Rule	Denmark	1916	only	-	Sep	30	23:00	0	-
-Rule	Denmark	1940	only	-	May	15	 0:00	1:00	" DST"
-Rule	Denmark	1945	only	-	Apr	 2	 2:00s	1:00	" DST"
+Rule	Denmark	1940	only	-	May	15	 0:00	1:00	S
+Rule	Denmark	1945	only	-	Apr	 2	 2:00s	1:00	S
 Rule	Denmark	1945	only	-	Aug	15	 2:00s	0	-
-Rule	Denmark	1946	only	-	May	 1	 2:00s	1:00	" DST"
+Rule	Denmark	1946	only	-	May	 1	 2:00s	1:00	S
 Rule	Denmark	1946	only	-	Sep	 1	 2:00s	0	-
-Rule	Denmark	1947	only	-	May	 4	 2:00s	1:00	" DST"
+Rule	Denmark	1947	only	-	May	 4	 2:00s	1:00	S
 Rule	Denmark	1947	only	-	Aug	10	 2:00s	0	-
-Rule	Denmark	1948	only	-	May	 9	 2:00s	1:00	" DST"
+Rule	Denmark	1948	only	-	May	 9	 2:00s	1:00	S
 Rule	Denmark	1948	only	-	Aug	 8	 2:00s	0	-
 # Whitman also gives 1949 Apr 9 to 1949 Oct 1, and disagrees in minor ways
 # about many of the above dates; go with Shanks.
@@ -1055,45 +1069,43 @@ Rule	Denmark	1948	only	-	Aug	 8	 2:00s	0	-
 # For 1894, Shanks says Jan, Whitman Apr; go with Whitman.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Copenhagen	 0:50:20 -	LMT	1890
-			 0:50	-	CMT	1894 Apr  # Copenhagen Mean Time
-			 1:00	Denmark	MET%s	1942 Nov  2 2:00s
-			 1:00	M-Eur	MET%s	1945 Apr  2 2:00
-			 1:00	Denmark	MET%s	1980
-			 1:00	EU	MET%s
+			 0:50:20 -	CMT	1894 Apr  # Copenhagen Mean Time
+			 1:00	Denmark	CE%sT	1942 Nov  2 2:00s
+			 1:00	C-Eur	CE%sT	1945 Apr  2 2:00
+			 1:00	Denmark	CE%sT	1980
+			 1:00	EU	CE%sT
 Zone Atlantic/Faeroe	-0:27:04 -	LMT	1908 Jan 11	# Torshavn
 			 0:00	-	WET	1981
-			 0:00	EU	WET%s
+			 0:00	EU	WE%sT
 Zone America/Scoresbysund -1:29:00 -	LMT	1916 Jul 28
-			-2:00	-	MGT	1980 Apr  6 2:00
-			-2:00	M-Eur	MGT%s	1981 Mar 29
-			-1:00	M-Eur	EGT%s
+			-2:00	-	CGT	1980 Apr  6 2:00
+			-2:00	C-Eur	CG%sT	1981 Mar 29
+			-1:00	C-Eur	EG%sT
 Zone America/Godthab	-3:26:56 -	LMT	1916 Jul 28
 			-3:00	-	WGT	1980 Apr  6 2:00
-			-3:00	M-Eur	WGT%s
+			-3:00	C-Eur	WG%sT
 Zone America/Thule	-4:35:08 -	LMT	1916 Jul 28
 			-4:00	-	AST
 
 # 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
-			1:00	M-Eur	MET%s	1919 Jul
-			1:39	-	LST	1921 May
+			1:39:00	-	TMT	1918 Feb # Tallinn Mean Time
+			1:00	C-Eur	CE%sT	1919 Jul
+			1:39:00	-	TMT	1921 May
 			2:00	-	EET	1940 Aug  6
-			3:00	-	MSK	1941 Sep 15
-			1:00	M-Eur	MET%s	1944 Sep 22
-			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 `EU' soon.
+			3:00	-	MOST	1941 Sep 15 # Moscow Time
+			1:00	C-Eur	CE%sT	1944 Sep 22
+			3:00	Russia	MOS%sT	1989 Mar 26 2:00s
+			2:00	1:00	EEST	1989 Sep 24 2:00s
+			2:00	C-Eur	EE%sT
 
 # Finland
+# See Sweden for when the Gregorian calendar was adopted.
 #
 # 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,
@@ -1104,61 +1116,64 @@ Zone	Europe/Tallinn	1:39:00	-	LMT	1880
 # Go with Strang instead.
 #
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Finland	1942	only	-	Apr	3	0:00	1:00	" DST"
+Rule	Finland	1942	only	-	Apr	3	0:00	1:00	S
 Rule	Finland	1942	only	-	Oct	3	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 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	EU	EET%s
+			1:39:52	-	HMT	1921 May    # Helsinki Mean Time
+			2:00	Finland	EE%sT	1981 Mar 29 2:00
+			2:00	EU	EE%sT
 
 # France
+# Gregorian calendar adopted 1582-12-20.
+# French Revolutionary calendar used 1792-09-22 - 1805-12-31.
+#
 # Shanks seems to use `24:00' ambiguously; we resolve it with Whitman.
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	France	1916	only	-	Jun	14	23:00s	1:00	" DST"
+Rule	France	1916	only	-	Jun	14	23:00s	1:00	S
 Rule	France	1916	1919	-	Oct	Sun>=1	 0:00	0	-
-Rule	France	1917	only	-	Mar	24	23:00s	1:00	" DST"
-Rule	France	1918	only	-	Mar	 9	23:00s	1:00	" DST"
-Rule	France	1919	only	-	Mar	 1	23:00s	1:00	" DST"
-Rule	France	1920	only	-	Feb	14	23:00s	1:00	" DST"
+Rule	France	1917	only	-	Mar	24	23:00s	1:00	S
+Rule	France	1918	only	-	Mar	 9	23:00s	1:00	S
+Rule	France	1919	only	-	Mar	 1	23:00s	1:00	S
+Rule	France	1920	only	-	Feb	14	23:00s	1:00	S
 Rule	France	1920	only	-	Oct	23	23:00s	0	-
-Rule	France	1921	only	-	Mar	14	23:00s	1:00	" DST"
+Rule	France	1921	only	-	Mar	14	23:00s	1:00	S
 Rule	France	1921	only	-	Oct	25	23:00s	0	-
-Rule	France	1922	only	-	Mar	25	23:00s	1:00	" DST"
+Rule	France	1922	only	-	Mar	25	23:00s	1:00	S
 Rule	France	1922	1938	-	Oct	Sat>=1	23:00s	0	-
-Rule	France	1923	only	-	May	26	23:00s	1:00	" DST"
-Rule	France	1924	only	-	Mar	29	23:00s	1:00	" DST"
-Rule	France	1925	only	-	Apr	 4	23:00s	1:00	" DST"
-Rule	France	1926	only	-	Apr	17	23:00s	1:00	" DST"
-Rule	France	1927	only	-	Apr	 9	23:00s	1:00	" DST"
-Rule	France	1928	only	-	Apr	14	23:00s	1:00	" DST"
-Rule	France	1929	only	-	Apr	20	23:00s	1:00	" DST"
-Rule	France	1930	only	-	Apr	12	23:00s	1:00	" DST"
-Rule	France	1931	only	-	Apr	18	23:00s	1:00	" DST"
-Rule	France	1932	only	-	Apr	 2	23:00s	1:00	" DST"
-Rule	France	1933	only	-	Mar	25	23:00s	1:00	" DST"
-Rule	France	1934	only	-	Apr	 7	23:00s	1:00	" DST"
-Rule	France	1935	only	-	Mar	30	23:00s	1:00	" DST"
-Rule	France	1936	only	-	Apr	18	23:00s	1:00	" DST"
-Rule	France	1937	only	-	Apr	 3	23:00s	1:00	" DST"
-Rule	France	1938	only	-	Mar	26	23:00s	1:00	" DST"
-Rule	France	1939	only	-	Apr	15	23:00s	1:00	" DST"
+Rule	France	1923	only	-	May	26	23:00s	1:00	S
+Rule	France	1924	only	-	Mar	29	23:00s	1:00	S
+Rule	France	1925	only	-	Apr	 4	23:00s	1:00	S
+Rule	France	1926	only	-	Apr	17	23:00s	1:00	S
+Rule	France	1927	only	-	Apr	 9	23:00s	1:00	S
+Rule	France	1928	only	-	Apr	14	23:00s	1:00	S
+Rule	France	1929	only	-	Apr	20	23:00s	1:00	S
+Rule	France	1930	only	-	Apr	12	23:00s	1:00	S
+Rule	France	1931	only	-	Apr	18	23:00s	1:00	S
+Rule	France	1932	only	-	Apr	 2	23:00s	1:00	S
+Rule	France	1933	only	-	Mar	25	23:00s	1:00	S
+Rule	France	1934	only	-	Apr	 7	23:00s	1:00	S
+Rule	France	1935	only	-	Mar	30	23:00s	1:00	S
+Rule	France	1936	only	-	Apr	18	23:00s	1:00	S
+Rule	France	1937	only	-	Apr	 3	23:00s	1:00	S
+Rule	France	1938	only	-	Mar	26	23:00s	1:00	S
+Rule	France	1939	only	-	Apr	15	23:00s	1:00	S
 Rule	France	1939	only	-	Nov	18	23:00s	0	-
-Rule	France	1940	only	-	Feb	25	 2:00	1:00	" DST"
+Rule	France	1940	only	-	Feb	25	 2:00	1:00	S
 # The French rules for 1941-1944 were not used in Paris,
 # but were used in other places (e.g. Monaco).
-Rule	France	1941	only	-	May	 5	 0:00	2:00	" DDST"
-Rule	France	1941	only	-	Oct	 6	 1:00	1:00	" DST"
-Rule	France	1942	only	-	Mar	 8	 0:00	2:00	" DDST"
-Rule	France	1942	only	-	Nov	 2	 3:00	1:00	" DST"
-Rule	France	1943	only	-	Mar	29	 2:00	2:00	" DDST"
-Rule	France	1943	only	-	Nov	 4	 3:00	1:00	" DST"
-Rule	France	1944	only	-	Apr	 3	 2:00	2:00	" DDST"
-Rule	France	1944	only	-	Oct	 8	 1:00	1:00	" DST"
-Rule	France	1945	only	-	Apr	 2	 2:00	2:00	" DDST"
+Rule	France	1941	only	-	May	 5	 0:00	2:00	DS
+Rule	France	1941	only	-	Oct	 6	 1:00	1:00	S
+Rule	France	1942	only	-	Mar	 8	 0:00	2:00	DS
+Rule	France	1942	only	-	Nov	 2	 3:00	1:00	S
+Rule	France	1943	only	-	Mar	29	 2:00	2:00	DS
+Rule	France	1943	only	-	Nov	 4	 3:00	1:00	S
+Rule	France	1944	only	-	Apr	 3	 2:00	2:00	DS
+Rule	France	1944	only	-	Oct	 8	 1:00	1:00	S
+Rule	France	1945	only	-	Apr	 2	 2:00	2:00	DS
 Rule	France	1945	only	-	Sep	16	 3:00	0	-
-Rule	France	1976	only	-	Mar	28	 2:00s	1:00	" DST"
+Rule	France	1976	only	-	Mar	28	 2:00s	1:00	S
 Rule	France	1976	only	-	Sep	lastSun	 2:00s	0	-
 # Shanks gives 0:09 for Paris Mean Time, and Whitman gives 0:09:05,
 # but Howse quotes the actual French legislation as saying 0:09:21.
@@ -1167,106 +1182,105 @@ Rule	France	1976	only	-	Sep	lastSun	 2:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Paris	0:09:21 -	LMT	1891 Mar 15 0:01
 			0:09:21	-	PMT	1911 Mar 11    # Paris Mean Time
-			0:00	France	WET%s	1940 Jun 14
-			1:00	M-Eur	MET%s	1944 Aug 25
-			0:00	France	WET%s	1945 Sep 16 3:00
-			1:00	France	MET%s	1977
-			1:00	EU	MET%s
+			0:00	France	WE%sT	1940 Jun 14
+			1:00	C-Eur	CE%sT	1944 Aug 25
+			0:00	France	WE%sT	1945 Sep 16 3:00
+			1:00	France	CE%sT	1977
+			1:00	EU	CE%sT
 
 # Germany
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Germany	1945	only	-	Apr	 2	2:00s	1:00	" DST"
-Rule	Germany	1945	only	-	May	24	2:00	2:00	" DDST"
-Rule	Germany	1945	only	-	Sep	24	3:00	1:00	" DST"
+Rule	Germany	1945	only	-	Apr	 2	2:00s	1:00	S
+Rule	Germany	1945	only	-	May	24	2:00	2:00	DS
+Rule	Germany	1945	only	-	Sep	24	3:00	1:00	S
 Rule	Germany	1945	only	-	Nov	18	2:00s	0	-
-Rule	Germany	1946	only	-	Apr	14	2:00s	1:00	" DST"
+Rule	Germany	1946	only	-	Apr	14	2:00s	1:00	S
 # Whitman gives 1948 Oct 31; go with Shanks.
 Rule	Germany	1946	1949	-	Oct	Sun>=1	2:00s	0	-
-Rule	Germany	1947	only	-	Apr	 6	2:00s	1:00	" DST"
-Rule	Germany	1947	only	-	May	11	2:00s	2:00	" DDST"
-Rule	Germany	1947	only	-	Jun	29	3:00	1:00	" DST"
-Rule	Germany	1948	only	-	Apr	18	2:00s	1:00	" DST"
-Rule	Germany	1949	only	-	Apr	10	2:00s	1:00	" DST"
+Rule	Germany	1947	only	-	Apr	 6	2:00s	1:00	S
+Rule	Germany	1947	only	-	May	11	2:00s	2:00	DS
+Rule	Germany	1947	only	-	Jun	29	3:00	1:00	S
+Rule	Germany	1948	only	-	Apr	18	2:00s	1:00	S
+Rule	Germany	1949	only	-	Apr	10	2:00s	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Berlin	0:53:28 -	LMT	1893 Apr
-			1:00	M-Eur	MET%s	1945 Apr 2 2:00
-			1:00	Germany	MET%s	1980
-			1:00	EU	MET%s
+			1:00	C-Eur	CE%sT	1945 Apr 2 2:00
+			1:00	Germany	CE%sT	1980
+			1:00	EU	CE%sT
 
 # Gibraltar
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Gibraltar	-0:21:24 -	LMT	1880 Aug  2
 			0:00	GB-Eire	%s	1957 Apr 14 2:00
-			1:00	-	MET	1982
-			1:00	EU	MET%s
+			1:00	-	CET	1982
+			1:00	EU	CE%sT
 
 # Greece
-# They adopted the Julian calendar in 1846.
-# Part switched to the Gregorian calendar on 1916 Jul 28.
-# The rest switched on 1920 Mar 18.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 # Whitman gives 1932 Jul 5 - Nov 1; go with Shanks.
-Rule	Greece	1932	only	-	Jul	 7	0:00	1:00	" DST"
+Rule	Greece	1932	only	-	Jul	 7	0:00	1:00	S
 Rule	Greece	1932	only	-	Sep	 1	0:00	0	-
 # Whitman gives 1941 Apr 25 - ?; go with Shanks.
-Rule	Greece	1941	only	-	Apr	 7	0:00	1:00	" DST"
+Rule	Greece	1941	only	-	Apr	 7	0:00	1:00	S
 # Whitman gives 1942 Feb 2 - ?; go with Shanks.
 Rule	Greece	1942	only	-	Nov	 2	3:00	0	-
-Rule	Greece	1943	only	-	Mar	30	0:00	1:00	" DST"
+Rule	Greece	1943	only	-	Mar	30	0:00	1:00	S
 Rule	Greece	1943	only	-	Oct	 4	0:00	0	-
 # Whitman gives 1944 Oct 3 - Oct 31; go with Shanks.
-Rule	Greece	1952	only	-	Jul	 1	0:00	1:00	" DST"
+Rule	Greece	1952	only	-	Jul	 1	0:00	1:00	S
 Rule	Greece	1952	only	-	Nov	 2	0:00	0	-
-Rule	Greece	1975	only	-	Apr	12	0:00s	1:00	" DST"
+Rule	Greece	1975	only	-	Apr	12	0:00s	1:00	S
 Rule	Greece	1975	only	-	Nov	26	0:00s	0	-
-Rule	Greece	1976	only	-	Apr	11	2:00s	1:00	" DST"
+Rule	Greece	1976	only	-	Apr	11	2:00s	1:00	S
 Rule	Greece	1976	only	-	Oct	10	2:00s	0	-
-Rule	Greece	1977	1978	-	Apr	Sun>=1	2:00s	1:00	" DST"
+Rule	Greece	1977	1978	-	Apr	Sun>=1	2:00s	1:00	S
 Rule	Greece	1977	only	-	Sep	26	2:00s	0	-
 Rule	Greece	1978	only	-	Sep	24	4:00	0	-
-Rule	Greece	1979	only	-	Apr	 1	9:00	1:00	" DST"
+Rule	Greece	1979	only	-	Apr	 1	9:00	1:00	S
 Rule	Greece	1979	only	-	Sep	29	2:00	0	-
-Rule	Greece	1980	only	-	Apr	 1	0:00	1:00	" DST"
+Rule	Greece	1980	only	-	Apr	 1	0:00	1:00	S
 Rule	Greece	1980	only	-	Sep	28	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Athens	1:34:52 -	LMT	1895 Sep 14
-			1:35	-	AMT	1916 Jul 28 0:01     # Athens MT
-			2:00	Greece	EET%s	1941 Apr 30
-			1:00	Greece	MET%s	1944 Apr  4
-			2:00	Greece	EET%s	1981
-			# Shanks says they switched to M-Eur in 1981;
+			1:34:52	-	AMT	1916 Jul 28 0:01     # Athens MT
+			2:00	Greece	EE%sT	1941 Apr 30
+			1:00	Greece	CE%sT	1944 Apr  4
+			2:00	Greece	EE%sT	1981
+			# Shanks says they switched to C-Eur in 1981;
 			# go with EU intead, since Greece joined it on Jan 1.
-			2:00	EU	EET%s
+			2:00	EU	EE%sT
 
 # Hungary
+# Gregorian calendar adopted 1587-11-01.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Hungary	1918	only	-	Apr	 1	 3:00	1:00	" DST"
+Rule	Hungary	1918	only	-	Apr	 1	 3:00	1:00	S
 Rule	Hungary	1918	only	-	Sep	29	 3:00	0	-
-Rule	Hungary	1919	only	-	Apr	15	 3:00	1:00	" DST"
+Rule	Hungary	1919	only	-	Apr	15	 3:00	1:00	S
 Rule	Hungary	1919	only	-	Sep	15	 3:00	0	-
-Rule	Hungary	1920	only	-	Apr	 5	 3:00	1:00	" DST"
+Rule	Hungary	1920	only	-	Apr	 5	 3:00	1:00	S
 Rule	Hungary	1920	only	-	Sep	30	 3:00	0	-
-Rule	Hungary	1945	only	-	May	 1	23:00	1:00	" DST"
+Rule	Hungary	1945	only	-	May	 1	23:00	1:00	S
 Rule	Hungary	1945	only	-	Nov	 3	 0:00	0	-
-Rule	Hungary	1946	only	-	Mar	31	 2:00s	1:00	" DST"
+Rule	Hungary	1946	only	-	Mar	31	 2:00s	1:00	S
 Rule	Hungary	1946	1949	-	Oct	Sun>=1	 2:00s	0	-
-Rule	Hungary	1947	1949	-	Apr	Sun>=4	 2:00s	1:00	" DST"
-Rule	Hungary	1950	only	-	Apr	17	 2:00s	1:00	" DST"
+Rule	Hungary	1947	1949	-	Apr	Sun>=4	 2:00s	1:00	S
+Rule	Hungary	1950	only	-	Apr	17	 2:00s	1:00	S
 Rule	Hungary	1950	only	-	Oct	23	 2:00s	0	-
-Rule	Hungary	1954	1955	-	May	23	 0:00	1:00	" DST"
+Rule	Hungary	1954	1955	-	May	23	 0:00	1:00	S
 Rule	Hungary	1954	1955	-	Oct	 3	 0:00	0	-
-Rule	Hungary	1956	only	-	Jun	Sun>=1	 0:00	1:00	" DST"
+Rule	Hungary	1956	only	-	Jun	Sun>=1	 0:00	1:00	S
 Rule	Hungary	1956	only	-	Sep	lastSun	 0:00	0	-
-Rule	Hungary	1957	only	-	Jun	Sun>=1	 1:00	1:00	" DST"
+Rule	Hungary	1957	only	-	Jun	Sun>=1	 1:00	1:00	S
 Rule	Hungary	1957	only	-	Sep	lastSun	 3:00	0	-
-Rule	Hungary	1980	only	-	Apr	 6	 1:00	1:00	" DST"
+Rule	Hungary	1980	only	-	Apr	 6	 1:00	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Budapest	1:16:20 -	LMT	1890 Oct
-			1:00	M-Eur	MET%s	1918
-			1:00	Hungary	MET%s	1941 Apr  6  2:00
-			1:00	M-Eur	MET%s	1945 May  1 23:00
-			1:00	Hungary	MET%s	1980 Sep 28  2:00s
-			1:00	EU	MET%s
+			1:00	C-Eur	CE%sT	1918
+			1:00	Hungary	CE%sT	1941 Apr  6  2:00
+			1:00	C-Eur	CE%sT	1945 May  1 23:00
+			1:00	Hungary	CE%sT	1980 Sep 28  2:00s
+			1:00	EU	CE%sT
 
 # Iceland
 #
@@ -1295,8 +1309,7 @@ Zone	Europe/Budapest	1:16:20 -	LMT	1890 Oct
 #	(old style), or on St. Luke's day, if a Saturday.
 # St. Luke's day ought to be traceable from ecclesiastical sources. "old style"
 # might be a reference to the Julian calendar as opposed to Gregorian, or it
-# might mean something else (???). The Gregorian calendar was not introduced
-# in Iceland until 1700.
+# might mean something else (???).
 #
 # From Paul Eggert <eggert@twinsun.com> (December 9, 1993):
 # The Iceland Almanak, Shanks and Whitman disagree on many points.
@@ -1304,37 +1317,39 @@ Zone	Europe/Budapest	1:16:20 -	LMT	1890 Oct
 # Reykavik was -1:28 from 1837 to 1908, local mean time before that.
 #
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Iceland	1917	1918	-	Feb	19	23:00	1:00	D
-Rule	Iceland	1917	only	-	Oct	21	 1:00	0	S
-Rule	Iceland	1918	only	-	Nov	16	 1:00	0	S
-Rule	Iceland	1939	only	-	Apr	29	23:00	1:00	D
-Rule	Iceland	1939	only	-	Nov	29	 2:00	0	S
-Rule	Iceland	1940	only	-	Feb	25	 2:00	1:00	D
-Rule	Iceland	1940	only	-	Nov	 3	 2:00	0	S
-Rule	Iceland	1941	only	-	Mar	 2	 1:00s	1:00	D
-Rule	Iceland	1941	only	-	Nov	 2	 1:00s	0	S
-Rule	Iceland	1942	only	-	Mar	 8	 1:00s	1:00	D
-Rule	Iceland	1942	only	-	Oct	25	 1:00s	0	S
+Rule	Iceland	1917	1918	-	Feb	19	23:00	1:00	S
+Rule	Iceland	1917	only	-	Oct	21	 1:00	0	-
+Rule	Iceland	1918	only	-	Nov	16	 1:00	0	-
+Rule	Iceland	1939	only	-	Apr	29	23:00	1:00	S
+Rule	Iceland	1939	only	-	Nov	29	 2:00	0	-
+Rule	Iceland	1940	only	-	Feb	25	 2:00	1:00	S
+Rule	Iceland	1940	only	-	Nov	 3	 2:00	0	-
+Rule	Iceland	1941	only	-	Mar	 2	 1:00s	1:00	S
+Rule	Iceland	1941	only	-	Nov	 2	 1:00s	0	-
+Rule	Iceland	1942	only	-	Mar	 8	 1:00s	1:00	S
+Rule	Iceland	1942	only	-	Oct	25	 1:00s	0	-
 # 1943-1946 - first Sunday in March until first Sunday in winter
-Rule	Iceland	1943	1946	-	Mar	Sun>=1	 1:00s	1:00	D
-Rule	Iceland	1943	1948	-	Oct	Sun>=22	 1:00s	0	S
+Rule	Iceland	1943	1946	-	Mar	Sun>=1	 1:00s	1:00	S
+Rule	Iceland	1943	1948	-	Oct	Sun>=22	 1:00s	0	-
 # 1947-1967 - first Sunday in April until first Sunday in winter
-Rule	Iceland	1947	1967	-	Apr	Sun>=1	 1:00s	1:00	D
+Rule	Iceland	1947	1967	-	Apr	Sun>=1	 1:00s	1:00	S
 # 1949 Oct transition delayed by 1 week
-Rule	Iceland	1949	only	-	Oct	30	 1:00s	0	S
-Rule	Iceland	1950	1966	-	Oct	Sun>=22	 1:00s	0	S
-Rule	Iceland	1967	only	-	Oct	29	 1:00s	0	S
+Rule	Iceland	1949	only	-	Oct	30	 1:00s	0	-
+Rule	Iceland	1950	1966	-	Oct	Sun>=22	 1:00s	0	-
+Rule	Iceland	1967	only	-	Oct	29	 1:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Atlantic/Reykjavik	-1:27:24 -	LMT	1837
-			-1:28	-	RMT	1908	   # Reykjavik Mean Time
-			-1:00	Iceland	I%sT	1968 Apr 7 1:00s
+			-1:27:48 -	RMT	1908 # Reykjavik Mean Time?
+			-1:00	Iceland	IS%sT	1968 Apr 7 1:00s
 			 0:00	-	GMT
 
 # Italy
+# Gregorian calendar adopted 1582-10-15.
+#
 # From Paul Eggert (1996-05-06):
 # For Italian DST we have three sources: Shanks, Whitman, and F. Pollastri
-# <URL:http://pisolo.cstv.to.cnr.it/toi/uk/ienitlt.html> (see `FP' below),
-# taken from a publication of the Italian National Electrotechnical Institute.
+# <URL:http://pisolo.cstv.to.cnr.it/toi/uk/ienitlt.html> (1996-03-14) (`FP'
+# below), taken from an Italian National Electrotechnical Institute publication.
 # When the three sources disagree, guess who's right, as follows:
 #
 # year	FP	Shanks (S)	Whitman (W)	Go with:
@@ -1348,186 +1363,180 @@ Zone Atlantic/Reykjavik	-1:27:24 -	LMT	1837
 #	10-04	10-04 24:00	10-04 01:00	FP; guess 24:00s
 # 1920	03-20	03-20 24:00	03-20 00:00	FP & S
 #	09-18	09-18 24:00	10-01 01:00	FP; guess 24:00s
-# 1944	04-02	04-03 02:00			S (see M-Eur)
+# 1944	04-02	04-03 02:00			S (see C-Eur)
 #	09-16	10-02 03:00			FP; guess 24:00s
 # 1945	09-14	09-16 24:00			FP; guess 24:00s
 # 1970	05-21	05-31 00:00			S
 #	09-20	09-27 00:00			S
 #
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Italy	1916	only	-	Jun	 3	0:00s	1:00	" DST"
+Rule	Italy	1916	only	-	Jun	 3	0:00s	1:00	S
 Rule	Italy	1916	only	-	Oct	 1	0:00s	0	-
-Rule	Italy	1917	only	-	Apr	 1	0:00s	1:00	" DST"
+Rule	Italy	1917	only	-	Apr	 1	0:00s	1:00	S
 Rule	Italy	1917	only	-	Sep	30	0:00s	0	-
-Rule	Italy	1918	only	-	Mar	10	0:00s	1:00	" DST"
+Rule	Italy	1918	only	-	Mar	10	0:00s	1:00	S
 Rule	Italy	1918	1919	-	Oct	Sun>=1	0:00s	0	-
-Rule	Italy	1919	only	-	Mar	 2	0:00s	1:00	" DST"
-Rule	Italy	1920	only	-	Mar	21	0:00s	1:00	" DST"
+Rule	Italy	1919	only	-	Mar	 2	0:00s	1:00	S
+Rule	Italy	1920	only	-	Mar	21	0:00s	1:00	S
 Rule	Italy	1920	only	-	Sep	19	0:00s	0	-
-Rule	Italy	1940	only	-	Jun	15	0:00s	1:00	" DST"
+Rule	Italy	1940	only	-	Jun	15	0:00s	1:00	S
 Rule	Italy	1944	only	-	Sep	17	0:00s	0	-
-Rule	Italy	1945	only	-	Apr	 2	2:00	1:00	" DST"
+Rule	Italy	1945	only	-	Apr	 2	2:00	1:00	S
 Rule	Italy	1945	only	-	Sep	15	0:00s	0	-
-Rule	Italy	1946	only	-	Mar	17	2:00s	1:00	" DST"
+Rule	Italy	1946	only	-	Mar	17	2:00s	1:00	S
 Rule	Italy	1946	only	-	Oct	 6	2:00s	0	-
-Rule	Italy	1947	only	-	Mar	16	0:00s	1:00	" DST"
+Rule	Italy	1947	only	-	Mar	16	0:00s	1:00	S
 Rule	Italy	1947	only	-	Oct	 5	0:00s	0	-
-Rule	Italy	1948	only	-	Feb	29	2:00s	1:00	" DST"
+Rule	Italy	1948	only	-	Feb	29	2:00s	1:00	S
 Rule	Italy	1948	only	-	Oct	 3	2:00s	0	-
-Rule	Italy	1966	1968	-	May	Sun>=22	0:00	1:00	" DST"
+Rule	Italy	1966	1968	-	May	Sun>=22	0:00	1:00	S
 Rule	Italy	1966	1969	-	Sep	Sun>=22	0:00	0	-
-Rule	Italy	1969	only	-	Jun	 1	0:00	1:00	" DST"
-Rule	Italy	1970	only	-	May	31	0:00	1:00	" DST"
+Rule	Italy	1969	only	-	Jun	 1	0:00	1:00	S
+Rule	Italy	1970	only	-	May	31	0:00	1:00	S
 Rule	Italy	1970	only	-	Sep	lastSun	0:00	0	-
-Rule	Italy	1971	1972	-	May	Sun>=22	0:00	1:00	" DST"
+Rule	Italy	1971	1972	-	May	Sun>=22	0:00	1:00	S
 Rule	Italy	1971	only	-	Sep	lastSun	1:00	0	-
 Rule	Italy	1972	only	-	Oct	 1	0:00	0	-
-Rule	Italy	1973	only	-	Jun	 3	0:00	1:00	" DST"
+Rule	Italy	1973	only	-	Jun	 3	0:00	1:00	S
 Rule	Italy	1973	1974	-	Sep	lastSun	0:00	0	-
-Rule	Italy	1974	only	-	May	26	0:00	1:00	" DST"
-Rule	Italy	1975	only	-	Jun	 1	0:00s	1:00	" DST"
+Rule	Italy	1974	only	-	May	26	0:00	1:00	S
+Rule	Italy	1975	only	-	Jun	 1	0:00s	1:00	S
 Rule	Italy	1975	1977	-	Sep	lastSun	0:00s	0	-
-Rule	Italy	1976	only	-	May	30	0:00s	1:00	" DST"
-Rule	Italy	1977	1979	-	May	Sun>=22	0:00s	1:00	" DST"
+Rule	Italy	1976	only	-	May	30	0:00s	1:00	S
+Rule	Italy	1977	1979	-	May	Sun>=22	0:00s	1:00	S
 Rule	Italy	1978	only	-	Oct	 1	0:00s	0	-
 Rule	Italy	1979	only	-	Sep	30	0:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Rome	0:49:56 -	LMT	1866 Sep 22
-			0:50	-	RMT	1893 Nov	# Rome Mean Time
-			1:00	Italy	MET%s	1942 Nov  2 2:00s
-			1:00	M-Eur	MET%s	1944 Jul
-			1:00	Italy	MET%s	1980
-			1:00	EU	MET%s
+			0:49:56	-	RMT	1893 Nov	# Rome Mean Time
+			1:00	Italy	CE%sT	1942 Nov  2 2:00s
+			1:00	C-Eur	CE%sT	1944 Jul
+			1:00	Italy	CE%sT	1980
+			1:00	EU	CE%sT
 
 Link	Europe/Rome	Europe/Vatican
 Link	Europe/Rome	Europe/San_Marino
 
 # Latvia
-# They switched from the Julian to the Gregorian calendar on 1918 Feb 15.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Riga	1:36:24	-	LMT	1880
-			1:36	-	LST	1918 Apr 15 2:00
-			1:36	M-Eur	LST%s	1919 Apr  1 2:00
-			1:36	1:00  "LST DST"	1919 May 22 3:00
-			1:36	-	LST	1926 May 11
+			1:36:24	-	RMT	1918 Apr 15 2:00 #Riga Mean Time
+			1:36:24	1:00	LST	1918 Sep 16 3:00 #Latvian Summer
+			1:36:24	-	RMT	1919 Apr  1 2:00
+			1:36:24	1:00	LST	1919 May 22 3:00
+			1:36:24	-	RMT	1926 May 11
 			2:00	-	EET	1940 Aug  5
-			3:00	-	MSK	1941 Jul
-			1:00	M-Eur	MET%s	1944 Aug  8
-			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 `EU' soon.
+			3:00	-	MOST	1941 Jul # Moscow Time
+			1:00	C-Eur	CE%sT	1944 Aug  8
+			3:00	Russia	MOS%sT	1991 Mar 31 2:00s
+			2:00	1:00	EEST	1991 Sep 29 2:00s
+			2:00	C-Eur	EE%sT
 
 # Liechtenstein
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Vaduz	0:38:04 -	LMT	1894 Jun
-			1:00	-	MET	1981
-			1:00	EU	MET%s
+			1:00	-	CET	1981
+			1:00	EU	CE%sT
 
 # Lithuania
-# They switched from the Julian to the Gregorian calendar on 1918 Feb 15.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Vilnius	1:41:16	-	LMT	1880
-			1:24	-	LST	1917		# Kaunas
-			1:36	-	LST	1919 Oct 10
-			1:00	-	MET	1920 Jul 12
+			1:24:00	-	WMT	1917	    # Warsaw Mean Time
+			1:35:36	-	KMT	1919 Oct 10 # Kaunas Mean Time
+			1:00	-	CET	1920 Jul 12
 			2:00	-	EET	1920 Oct  9
-			1:00	-	MET	1940 Aug  3
-			3:00	-	MSK	1941 Jun 24
-			1:00	M-Eur	MET%s	1944 Aug
-			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 `EU' soon.
+			1:00	-	CET	1940 Aug  3
+			3:00	-	MOST	1941 Jun 24 # Moscow Time
+			1:00	C-Eur	CE%sT	1944 Aug
+			3:00	Russia	MOS%sT	1991 Mar 31 2:00s
+			2:00	1:00	EEST	1991 Sep 29 2:00s
+			2:00	C-Eur	EE%sT
 
 # Luxembourg
 # Whitman disagrees with most of these dates in minor ways; go with Shanks.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Lux	1916	only	-	May	14	23:00	1:00	" DST"
+Rule	Lux	1916	only	-	May	14	23:00	1:00	S
 Rule	Lux	1916	only	-	Oct	 1	 1:00	0	-
-Rule	Lux	1917	only	-	Apr	28	23:00	1:00	" DST"
+Rule	Lux	1917	only	-	Apr	28	23:00	1:00	S
 Rule	Lux	1917	only	-	Sep	17	 1:00	0	-
-Rule	Lux	1918	only	-	Apr	Mon>=15	 2:00s	1:00	" DST"
+Rule	Lux	1918	only	-	Apr	Mon>=15	 2:00s	1:00	S
 Rule	Lux	1918	only	-	Sep	Mon>=15	 2:00s	0	-
-Rule	Lux	1919	only	-	Mar	 1	23:00	1:00	" DST"
+Rule	Lux	1919	only	-	Mar	 1	23:00	1:00	S
 Rule	Lux	1919	only	-	Oct	 5	 3:00	0	-
-Rule	Lux	1920	only	-	Feb	14	23:00	1:00	" DST"
+Rule	Lux	1920	only	-	Feb	14	23:00	1:00	S
 Rule	Lux	1920	only	-	Oct	24	 2:00	0	-
-Rule	Lux	1921	only	-	Mar	14	23:00	1:00	" DST"
+Rule	Lux	1921	only	-	Mar	14	23:00	1:00	S
 Rule	Lux	1921	only	-	Oct	26	 2:00	0	-
-Rule	Lux	1922	only	-	Mar	25	23:00	1:00	" DST"
+Rule	Lux	1922	only	-	Mar	25	23:00	1:00	S
 Rule	Lux	1922	only	-	Oct	Sun>=2	 1:00	0	-
-Rule	Lux	1923	only	-	Apr	21	23:00	1:00	" DST"
+Rule	Lux	1923	only	-	Apr	21	23:00	1:00	S
 Rule	Lux	1923	only	-	Oct	Sun>=2	 2:00	0	-
-Rule	Lux	1924	only	-	Mar	29	23:00	1:00	" DST"
+Rule	Lux	1924	only	-	Mar	29	23:00	1:00	S
 Rule	Lux	1924	1928	-	Oct	Sun>=2	 1:00	0	-
-Rule	Lux	1925	only	-	Apr	 5	23:00	1:00	" DST"
-Rule	Lux	1926	only	-	Apr	17	23:00	1:00	" DST"
-Rule	Lux	1927	only	-	Apr	 9	23:00	1:00	" DST"
-Rule	Lux	1928	only	-	Apr	14	23:00	1:00	" DST"
-Rule	Lux	1929	only	-	Apr	20	23:00	1:00	" DST"
+Rule	Lux	1925	only	-	Apr	 5	23:00	1:00	S
+Rule	Lux	1926	only	-	Apr	17	23:00	1:00	S
+Rule	Lux	1927	only	-	Apr	 9	23:00	1:00	S
+Rule	Lux	1928	only	-	Apr	14	23:00	1:00	S
+Rule	Lux	1929	only	-	Apr	20	23:00	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Luxembourg	0:24:36 -	LMT	1904 Jun
-			1:00	Lux	MET%s	1918 Nov 25
-			0:00	Lux	WET%s	1929 Oct  6 2:00s
-			0:00	Belgium	WET%s	1940 May 14 3:00
-			1:00	M-Eur	WET%s	1944 Sep 18 3:00
-			1:00	Belgium	MET%s	1977
-			1:00	EU	MET%s
+			1:00	Lux	CE%sT	1918 Nov 25
+			0:00	Lux	WE%sT	1929 Oct  6 2:00s
+			0:00	Belgium	WE%sT	1940 May 14 3:00
+			1:00	C-Eur	WE%sT	1944 Sep 18 3:00
+			1:00	Belgium	CE%sT	1977
+			1:00	EU	CE%sT
 
 # Macedonia
-# They switched from the Julian to the Gregorian calendar on 1918 Mar 18.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Skopje	1:25:44	-	LMT	1884
-			1:00	-	MET	1941 Apr 18 23:00
-			1:00	M-Eur	MET%s	1945 May  8  2:00s
-			1:00	1:00  "MET DST"	1945 Sep 16  2:00s
-			1:00	-	MET	1983
-			1:00	EU	MET%s
+			1:00	-	CET	1941 Apr 18 23:00
+			1:00	C-Eur	CE%sT	1945 May  8  2:00s
+			1:00	1:00	CEST	1945 Sep 16  2:00s
+			1:00	-	CET	1983
+			1:00	EU	CE%sT
 
 # Malta
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Malta	1973	only	-	Mar	31	0:00s	1:00	" DST"
+Rule	Malta	1973	only	-	Mar	31	0:00s	1:00	S
 Rule	Malta	1973	only	-	Sep	29	0:00s	0	-
-Rule	Malta	1974	only	-	Apr	21	0:00s	1:00	" DST"
+Rule	Malta	1974	only	-	Apr	21	0:00s	1:00	S
 Rule	Malta	1974	only	-	Sep	16	0:00s	0	-
-Rule	Malta	1975	1979	-	Apr	Sun>=15	2:00	1:00	" DST"
+Rule	Malta	1975	1979	-	Apr	Sun>=15	2:00	1:00	S
 Rule	Malta	1975	1980	-	Sep	Sun>=15	2:00	0	-
-Rule	Malta	1980	only	-	Mar	31	2:00	1:00	" DST"
+Rule	Malta	1980	only	-	Mar	31	2:00	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Malta	0:58:04 -	LMT	1893 Nov  2	# Valletta
-			1:00	Italy	MET%s	1942 Nov  2 2:00s
-			1:00	M-Eur	MET%s	1945 Apr  2 2:00s
-			1:00	Italy	MET%s	1973 Mar 31
-			1:00	Malta	MET%s	1981
-			1:00	EU	MET%s
+			1:00	Italy	CE%sT	1942 Nov  2 2:00s
+			1:00	C-Eur	CE%sT	1945 Apr  2 2:00s
+			1:00	Italy	CE%sT	1973 Mar 31
+			1:00	Malta	CE%sT	1981
+			1:00	EU	CE%sT
 
 # Moldova
-# They switched from the Julian to the Gregorian calendar on 1919 Mar 18.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Chisinau	1:55:20 -	LMT	1924 May  2
 			2:00	-	EET	1930 Jun 21
-			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 `EU' soon.
+			3:00	Russia	MOS%sT	1991 Mar 31 2:00s # Moscow Time
+			2:00	1:00	EEST	1991 Sep 29 2:00s
+			2:00	C-Eur	EE%sT
 
 # Monaco
 # Shanks gives 0:09 for Paris Mean Time; go with Howse's more precise 0:09:21.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Monaco	0:29:32 -	LMT	1891 Mar 15
 			0:09:21	-	PMT	1911 Mar 11    # Paris Mean Time
-			0:00	France	WET%s	1945 Sep 16 3:00
-			1:00	France	MET%s	1977
-			1:00	EU	MET%s
+			0:00	France	WE%sT	1945 Sep 16 3:00
+			1:00	France	CE%sT	1977
+			1:00	EU	CE%sT
 
 # Netherlands
 # Howse writes that the Netherlands' railways used GMT between 1892 and 1940,
 # but for other purposes the Netherlands used Amsterdam mean time.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 # Shanks gives 1916 May 1 0:00 and 1916 Oct 1 0:00; go with Whitman.
-Rule	Neth	1916	only	-	May	 1	2:00s	1:00	NST
-Rule	Neth	1916	only	-	Oct	 2	2:00s	0	AMT
+Rule	Neth	1916	only	-	May	 1	2:00s	1:00	NST	# Netherlands Summer Time
+Rule	Neth	1916	only	-	Oct	 2	2:00s	0	AMT	# Amsterdam Mean Time
 Rule	Neth	1917	only	-	Apr	16	2:00s	1:00	NST
 Rule	Neth	1917	only	-	Sep	17	2:00s	0	AMT
 # Whitman gives 1918 Apr 14, 1918 Oct 31, and 1921 Sep 28; go with Shanks.
@@ -1535,7 +1544,7 @@ Rule	Neth	1918	1921	-	Apr	Mon>=1	2:00s	1:00	NST
 Rule	Neth	1918	1921	-	Sep	Mon>=24	2:00s	0	AMT
 Rule	Neth	1922	only	-	Mar	26	2:00s	1:00	NST
 # Whitman gives 1939 Oct 1; go with Shanks.
-Rule	Neth	1922	1939	-	Oct	Sun>=2	2:00s	0	AMT
+Rule	Neth	1922	1936	-	Oct	Sun>=2	2:00s	0	AMT
 Rule	Neth	1923	only	-	Jun	 1	2:00s	1:00	NST
 Rule	Neth	1924	only	-	Mar	30	2:00s	1:00	NST
 # Whitman gives 1925 Apr 5; go with Shanks.
@@ -1545,363 +1554,399 @@ Rule	Neth	1926	1931	-	May	15	2:00s	1:00	NST
 Rule	Neth	1932	only	-	May	22	2:00s	1:00	NST
 Rule	Neth	1933	1936	-	May	15	2:00s	1:00	NST
 Rule	Neth	1937	only	-	May	22	2:00s	1:00	NST
+Rule	Neth	1937	only	-	Jul	 1	0:00	1:00	S
+Rule	Neth	1937	1939	-	Oct	Sun>=2	2:00s	0	-
 # Whitman gives 1939 Apr 15 and 1940 Apr 19; go with Shanks.
-Rule	Neth	1938	1939	-	May	15	2:00s	1:00	NST
-Rule	Neth	1945	only	-	Apr	 2	2:00s	1:00	" DST"
+Rule	Neth	1938	1939	-	May	15	2:00s	1:00	S
+Rule	Neth	1945	only	-	Apr	 2	2:00s	1:00	S
 Rule	Neth	1945	only	-	May	20	2:00s	0	-
 # Before 1937, Shanks says just `0:20'; we use Whitman's more precise figure.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Amsterdam	0:19:28 -	LMT	1892 May
 			0:19:28	Neth	%s	1937 Jul
-			0:20	Neth	%s	1940 May 16 0:40
-			1:00	M-Eur	MET%s	1945 Apr  2 2:00
-			1:00	Neth	MET%s	1977
-			1:00	EU	MET%s
+			0:20	Neth	NE%sT	1940 May 16 0:40
+			1:00	C-Eur	CE%sT	1945 Apr  2 2:00
+			1:00	Neth	CE%sT	1977
+			1:00	EU	CE%sT
 
 # Norway
+# Gregorian calendar adopted 1700-03-01.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 # Whitman gives 1916 May 21 - 1916 Oct 21; go with Shanks.
-Rule	Norway	1916	only	-	May	22	1:00	1:00	" DST"
+Rule	Norway	1916	only	-	May	22	1:00	1:00	S
 Rule	Norway	1916	only	-	Sep	30	0:00	0	-
 # Shanks omits the following transition; go with Whitman.
-Rule	Norway	1935	only	-	Aug	11	0:00	1:00	" DST"
+Rule	Norway	1935	only	-	Aug	11	0:00	1:00	S
 # Whitman says DST observed until 1942 Nov 1, then 1943 Mar 29 - Oct 4,
 # 1944 Apr 3 - Oct 2, and 1945 Apr 1 - Oct 1; go with Shanks after 1940.
-Rule	Norway	1945	only	-	Apr	 2	2:00s	1:00	" DST"
+Rule	Norway	1945	only	-	Apr	 2	2:00s	1:00	S
 Rule	Norway	1945	only	-	Oct	 1	2:00s	0	-
-Rule	Norway	1959	1964	-	Mar	Sun>=15	2:00s	1:00	" DST"
+Rule	Norway	1959	1964	-	Mar	Sun>=15	2:00s	1:00	S
 Rule	Norway	1959	1965	-	Sep	Sun>=15	2:00s	0	-
-Rule	Norway	1965	only	-	Apr	25	2:00s	1:00	" DST"
+Rule	Norway	1965	only	-	Apr	25	2:00s	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Oslo	0:43:00 -	LMT	1895
-			1:00	Norway	MET%s	1940 Aug 10 23:00
-			1:00	M-Eur	MET%s	1945 Apr  2  2:00
-			1:00	Norway	MET%s	1980
-			1:00	EU	MET%s
-# Svalbard is like Europe/Oslo.
+			1:00	Norway	CE%sT	1940 Aug 10 23:00
+			1:00	C-Eur	CE%sT	1945 Apr  2  2:00
+			1:00	Norway	CE%sT	1980
+			1:00	EU	CE%sT
+#
+# Svalbard
+Link	Europe/Oslo	Arctic/Longyearbyen
 #
+# Jan Mayen
 # From Whitman:
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Atlantic/Jan_Mayen	-1:00	-	EGT
 
 # Poland
-# Austrian and German Poland switched from the Julian to the Gregorian calendar
-# on 1582 Oct 15.  Russian Poland switched on 1918 Jan 14.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Poland	1918	1919	-	Sep	16	2:00s	0	-
-Rule	Poland	1919	only	-	Apr	15	2:00s	1:00	" DST"
+Rule	Poland	1919	only	-	Apr	15	2:00s	1:00	S
 # Whitman gives 1944 Nov 30; go with Shanks.
 Rule	Poland	1944	only	-	Oct	 4	2:00	0	-
 # For 1944-1948 Whitman gives the previous day; go with Shanks.
-Rule	Poland	1945	only	-	Apr	29	0:00	1:00	" DST"
+Rule	Poland	1945	only	-	Apr	29	0:00	1:00	S
 Rule	Poland	1945	only	-	Nov	 1	0:00	0	-
-Rule	Poland	1946	only	-	Apr	14	0:00	1:00	" DST"
+Rule	Poland	1946	only	-	Apr	14	0:00	1:00	S
 Rule	Poland	1946	only	-	Sep	 7	0:00	0	-
-Rule	Poland	1947	only	-	May	 4	0:00	1:00	" DST"
+Rule	Poland	1947	only	-	May	 4	0:00	1:00	S
 Rule	Poland	1947	1948	-	Oct	Sun>=1	0:00	0	-
-Rule	Poland	1948	only	-	Apr	18	0:00	1:00	" DST"
+Rule	Poland	1948	only	-	Apr	18	0:00	1:00	S
 # Whitman also gives 1949 Apr 9 - 1949 Oct 1; go with Shanks.
-Rule	Poland	1957	only	-	Jun	 2	1:00s	1:00	" DST"
+Rule	Poland	1957	only	-	Jun	 2	1:00s	1:00	S
 Rule	Poland	1957	1958	-	Sep	lastSun	1:00s	0	-
-Rule	Poland	1958	only	-	Mar	30	1:00s	1:00	" DST"
-Rule	Poland	1959	only	-	May	31	1:00s	1:00	" DST"
+Rule	Poland	1958	only	-	Mar	30	1:00s	1:00	S
+Rule	Poland	1959	only	-	May	31	1:00s	1:00	S
 Rule	Poland	1959	1961	-	Oct	Sun>=1	1:00s	0	-
-Rule	Poland	1960	only	-	Apr	 3	1:00s	1:00	" DST"
-Rule	Poland	1961	1964	-	May	Sun>=25	1:00s	1:00	" DST"
+Rule	Poland	1960	only	-	Apr	 3	1:00s	1:00	S
+Rule	Poland	1961	1964	-	May	Sun>=25	1:00s	1:00	S
 Rule	Poland	1962	1964	-	Sep	lastSun	1:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Warsaw	1:24:00 -	LMT	1880
-			1:24	-	WMT	1915 Aug  5   # Warsaw Mean Time
-			1:00	M-Eur	MET%s	1918 Sep 16 3:00
-			2:00	Poland	EET%s	1922 Jun
-			1:00	Poland	MET%s	1940 Jun 23 2:00
-			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 `EU' soon.
+			1:24:00	-	WMT	1915 Aug  5   # Warsaw Mean Time
+			1:00	C-Eur	CE%sT	1918 Sep 16 3:00
+			2:00	Poland	EE%sT	1922 Jun
+			1:00	Poland	CE%sT	1940 Jun 23 2:00
+			1:00	C-Eur	CE%sT	1944 Oct
+			1:00	Poland	CE%sT	1977 Apr  3 1:00
+			1:00	W-Eur	CE%sT
 
 # Portugal
+# Gregorian calendar adopted 1582-10-15.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Port	1916	only	-	Jun	17	23:00	1:00	" DST"
+Rule	Port	1916	only	-	Jun	17	23:00	1:00	S
 # Whitman gives 1916 Oct 31; go with Shanks.
 Rule	Port	1916	only	-	Nov	 1	 1:00	0	-
-Rule	Port	1917	only	-	Feb	28	23:00s	1:00	" DST"
+Rule	Port	1917	only	-	Feb	28	23:00s	1:00	S
 Rule	Port	1917	1921	-	Oct	14	23:00s	0	-
-Rule	Port	1918	only	-	Mar	 1	23:00s	1:00	" DST"
-Rule	Port	1919	only	-	Feb	28	23:00s	1:00	" DST"
-Rule	Port	1920	only	-	Feb	29	23:00s	1:00	" DST"
-Rule	Port	1921	only	-	Feb	28	23:00s	1:00	" DST"
-Rule	Port	1924	only	-	Apr	16	23:00s	1:00	" DST"
+Rule	Port	1918	only	-	Mar	 1	23:00s	1:00	S
+Rule	Port	1919	only	-	Feb	28	23:00s	1:00	S
+Rule	Port	1920	only	-	Feb	29	23:00s	1:00	S
+Rule	Port	1921	only	-	Feb	28	23:00s	1:00	S
+Rule	Port	1924	only	-	Apr	16	23:00s	1:00	S
 Rule	Port	1924	only	-	Oct	14	23:00s	0	-
-Rule	Port	1926	only	-	Apr	17	23:00s	1:00	" DST"
+Rule	Port	1926	only	-	Apr	17	23:00s	1:00	S
 Rule	Port	1926	1929	-	Oct	Sat>=1	23:00s	0	-
-Rule	Port	1927	only	-	Apr	 9	23:00s	1:00	" DST"
-Rule	Port	1928	only	-	Apr	14	23:00s	1:00	" DST"
-Rule	Port	1929	only	-	Apr	20	23:00s	1:00	" DST"
-Rule	Port	1931	only	-	Apr	18	23:00s	1:00	" DST"
+Rule	Port	1927	only	-	Apr	 9	23:00s	1:00	S
+Rule	Port	1928	only	-	Apr	14	23:00s	1:00	S
+Rule	Port	1929	only	-	Apr	20	23:00s	1:00	S
+Rule	Port	1931	only	-	Apr	18	23:00s	1:00	S
 # Whitman gives 1931 Oct 8; go with Shanks.
 Rule	Port	1931	1932	-	Oct	Sat>=1	23:00s	0	-
-Rule	Port	1932	only	-	Apr	 2	23:00s	1:00	" DST"
+Rule	Port	1932	only	-	Apr	 2	23:00s	1:00	S
 # Shanks gives 1934 Apr 4; go with Whitman.
-Rule	Port	1934	only	-	Apr	 7	23:00s	1:00	" DST"
+Rule	Port	1934	only	-	Apr	 7	23:00s	1:00	S
 # Whitman gives 1934 Oct 5; go with Shanks.
 Rule	Port	1934	1938	-	Oct	Sat>=1	23:00s	0	-
 # Shanks gives 1935 Apr 30; go with Whitman.
-Rule	Port	1935	only	-	Mar	30	23:00s	1:00	" DST"
-Rule	Port	1936	only	-	Apr	18	23:00s	1:00	" DST"
+Rule	Port	1935	only	-	Mar	30	23:00s	1:00	S
+Rule	Port	1936	only	-	Apr	18	23:00s	1:00	S
 # Whitman gives 1937 Apr 2; go with Shanks.
-Rule	Port	1937	only	-	Apr	 3	23:00s	1:00	" DST"
-Rule	Port	1938	only	-	Mar	26	23:00s	1:00	" DST"
-Rule	Port	1939	only	-	Apr	15	23:00s	1:00	" DST"
+Rule	Port	1937	only	-	Apr	 3	23:00s	1:00	S
+Rule	Port	1938	only	-	Mar	26	23:00s	1:00	S
+Rule	Port	1939	only	-	Apr	15	23:00s	1:00	S
 # Whitman gives 1939 Oct 7; go with Shanks.
 Rule	Port	1939	only	-	Nov	18	23:00s	0	-
-Rule	Port	1940	only	-	Feb	24	23:00s	1:00	" DST"
+Rule	Port	1940	only	-	Feb	24	23:00s	1:00	S
 # Shanks gives 1940 Oct 7; go with Whitman.
 Rule	Port	1940	1941	-	Oct	 5	23:00s	0	-
-Rule	Port	1941	only	-	Apr	 5	23:00s	1:00	" DST"
-Rule	Port	1942	1945	-	Mar	Sat>=8	23:00s	1:00	" DST"
-Rule	Port	1942	only	-	Apr	25	22:00s	2:00	" DDST"
-Rule	Port	1942	only	-	Aug	15	22:00s	1:00	" DST"
+Rule	Port	1941	only	-	Apr	 5	23:00s	1:00	S
+Rule	Port	1942	1945	-	Mar	Sat>=8	23:00s	1:00	S
+Rule	Port	1942	only	-	Apr	25	22:00s	2:00	DS
+Rule	Port	1942	only	-	Aug	15	22:00s	1:00	S
 Rule	Port	1942	1945	-	Oct	Sat>=24	23:00s	0	-
-Rule	Port	1943	only	-	Apr	17	22:00s	2:00	" DDST"
-Rule	Port	1943	1945	-	Aug	Sat>=25	22:00s	1:00	" DST"
-Rule	Port	1944	1945	-	Apr	Sat>=21	22:00s	2:00	" DDST"
-Rule	Port	1946	only	-	Apr	Sat>=1	23:00s	1:00	" DST"
+Rule	Port	1943	only	-	Apr	17	22:00s	2:00	DS
+Rule	Port	1943	1945	-	Aug	Sat>=25	22:00s	1:00	S
+Rule	Port	1944	1945	-	Apr	Sat>=21	22:00s	2:00	DS
+Rule	Port	1946	only	-	Apr	Sat>=1	23:00s	1:00	S
 Rule	Port	1946	only	-	Oct	Sat>=1	23:00s	0	-
-Rule	Port	1947	1949	-	Apr	Sun>=1	 2:00s	1:00	" DST"
+Rule	Port	1947	1949	-	Apr	Sun>=1	 2:00s	1:00	S
 Rule	Port	1947	1949	-	Oct	Sun>=1	 2:00s	0	-
 # Shanks says DST was observed in 1950; go with Whitman.
 # Whitman gives Oct lastSun for 1952 on; go with Shanks.
-Rule	Port	1951	1965	-	Apr	Sun>=1	 2:00s	1:00	" DST"
+Rule	Port	1951	1965	-	Apr	Sun>=1	 2:00s	1:00	S
 Rule	Port	1951	1965	-	Oct	Sun>=1	 2:00s	0	-
-Rule	Port	1977	only	-	Mar	27	 0:00s	1:00	" DST"
+Rule	Port	1977	only	-	Mar	27	 0:00s	1:00	S
 Rule	Port	1977	only	-	Sep	25	 0:00s	0	-
-Rule	Port	1978	1979	-	Apr	Sun>=1	 0:00s	1:00	" DST"
+Rule	Port	1978	1979	-	Apr	Sun>=1	 0:00s	1:00	S
 Rule	Port	1978	only	-	Oct	 1	 0:00s	0	-
 Rule	Port	1979	1982	-	Sep	lastSun	 1:00s	0	-
-Rule	Port	1980	only	-	Mar	lastSun	 0:00s	1:00	" DST"
-Rule	Port	1981	1982	-	Mar	lastSun	 1:00s	1:00	" DST"
-Rule	Port	1983	only	-	Mar	lastSun	 2:00s	1:00	" DST"
+Rule	Port	1980	only	-	Mar	lastSun	 0:00s	1:00	S
+Rule	Port	1981	1982	-	Mar	lastSun	 1:00s	1:00	S
+Rule	Port	1983	only	-	Mar	lastSun	 2:00s	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Lisbon	-0:36:32 -	LMT	1884
-			-0:37	-	LMT	1911 May 24   # Lisbon Mean Time
-			 0:00	Port	WET%s	1966 Apr  3 2:00
-			 1:00	-	MET	1976 Sep 26 1:00
-			 0:00	Port	WET%s	1983 Sep 25 1:00s
-			 0:00	EU	WET%s	1992 Sep 27 1:00s
+			-0:36:32 -	LMT	1911 May 24   # Lisbon Mean Time
+			 0:00	Port	WE%sT	1966 Apr  3 2:00
+			 1:00	-	CET	1976 Sep 26 1:00
+			 0:00	Port	WE%sT	1983 Sep 25 1:00s
 # From Rui Pedro Salgueiro <rps@inescca.inescc.pt> (November 12, 1992):
 # Portugal has recently (September, 27) changed timezone
 # (from WET to MET or CET) to harmonize with EEC.
-			 1:00	EU	MET%s	1996 Mar 31 1:00u
+			 0:00	EU	WE%sT	1992 Sep 27 1:00s
 # Martin Bruckmann <martin@ua.pt> (1996-02-29) reports via Peter Ilieve
 # that Portugal is reverting to 0:00 by not moving its clocks this spring.
 # The new Prime Minister was fed up with getting up in the dark in the winter.
-			 0:00	1:00  "WET DST"	1996 Oct 27 1:00u
-			 0:00	EU	WET%s
+			 1:00	EU	CE%sT	1996 Mar 31 1:00u
+			 0:00	EU	WE%sT
 # We don't know what happened to Madeira or the Azores,
 # so we'll just use Shanks for now.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Atlantic/Azores	-1:42:40 -	LMT	1884		# Ponta Delgada
 			-1:55	-	HMT	1911 May 24  # Horta Mean Time
-			-2:00	Port	ACT%s	1966 Apr  3 2:00
-			-1:00	-	ACT	1977 Mar 27
-			-1:00	-	ACT	1983 Sep 25 1:00s
-			-1:00	W-Eur	ACT%s
+			-2:00	Port	AZO%sT	1966 Apr  3 2:00 # Azores Time
+			-1:00	Port	AZO%sT	1983 Sep 25 1:00s
+			-1:00	W-Eur	AZO%sT
 Zone Atlantic/Madeira	-1:07:36 -	LMT	1884		# Funchal
 			-1:08	-	FMT	1911 May 24  # Funchal Mean Time
-			-1:00	Port	ACT%s	1966 Apr  3 2:00
-			 0:00	-	WET	1977 Mar 27
-			 0:00	Port	WET%s	1983 Sep 25 1:00s
-			 0:00	EU	WET%s
+			-1:00	Port	MAD%sT	1966 Apr  3 2:00 # Madeira Time
+			 0:00	Port	WE%sT	1983 Sep 25 1:00s
+			 0:00	EU	WE%sT
 
 # Romania
-# Catholic Romania switched from the Julian to the Gregorian calendar on
-# on 1919 Mar 18.  Greek Orthodox Romania switched on 1920 Mar 18.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Romania	1932	only	-	May	21	 0:00s	1:00	" DST"
+Rule	Romania	1932	only	-	May	21	 0:00s	1:00	S
 Rule	Romania	1932	1939	-	Oct	Sun>=1	 0:00s	0	-
-Rule	Romania	1933	1939	-	Apr	Sun>=2	 0:00s	1:00	" DST"
-Rule	Romania	1979	only	-	May	27	 0:00	1:00	" DST"
+Rule	Romania	1933	1939	-	Apr	Sun>=2	 0:00s	1:00	S
+Rule	Romania	1979	only	-	May	27	 0:00	1:00	S
 Rule	Romania	1979	only	-	Sep	lastSun	 0:00	0	-
-Rule	Romania	1980	only	-	Apr	 5	23:00	1:00	" DST"
+Rule	Romania	1980	only	-	Apr	 5	23:00	1:00	S
 Rule	Romania	1980	only	-	Sep	lastSun	 1:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 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 `EU' soon.
+			1:44:24	-	BMT	1931 Jul 24	# Bucharest MT
+			2:00	Romania	EE%sT	1981 Mar 29 2:00s
+			2:00	C-Eur	EE%sT
 
 # Russia
-# From Paul Eggert <eggert@twinsun.com> (May 28, 1994):
-# Moscow and Novosibirsk time zone names, and Moscow rules after 1991,
-# are from Andrew A. Chernov <ache@astral.msk.su>.
-# I invented the other time zone names, and (unless otherwise specified)
+# From Shanks (1991):
+# In 1929 the Soviet Union instituted a 5 day week; in 1932 it instituted
+# a 6 day week; on 1940-06-27 it returned to the Gregorian week.
+#
+# From Paul Eggert <eggert@twinsun.com> (1996-09-03):
+# Moscow rules after 1991 are from Andrew A. Chernov <ache@astral.msk.su>.
+# I invented the time zone names, and (unless otherwise specified)
 # guessed what happened after 1991; the clocks were chaotic, and we know little.
 # The rest is from Shanks.
 #
-# From Shanks (1991):
-# Western Russia switched from the Julian to the Gregorian calendar
-# on 1918 Jan 14.  Eastern Russia switched on 1920 Mar 18.
-# In 1929 the Soviet Union instituted a 5 day week; in 1932 it instituted
-# a 6 day week; on 1940 Jun 27 it returned to the Gregorian week.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Moscow	 2:30:20 -	LMT	1880
-			 2:31	Russia	LST%s	1919 Jul  1 2:00
-			 3:00	Russia	MS%s	1922 Oct
+			 2:30:20 Russia	%s	1919 Jul  1 2:00
+			 3:00	Russia	MOS%sT	1922 Oct # Moscow TIme
 			 2:00	-	EET	1930 Jun 21
-			 3:00	Russia	MS%s	1991 Mar 31 2:00s
-			 2:00	1:00  "EET DST"	1991 Sep 29 2:00s
+			 3:00	Russia	MOS%sT	1991 Mar 31 2:00s
+			 2:00	1:00	EEST	1991 Sep 29 2:00s
 			 2:00	-	EET	1992 Jan 19 2:00s
-			 3:00	Russia	MS%s
+			 3:00	Russia	MOS%sT
 Zone Europe/Kuybyshev	 3:20:36 -	LMT	1924 May  2
-			 3:00	-	KSK	1957 Mar
-			 4:00	Russia	KS%s	1991 Mar 31 2:00s
-			 3:00	1:00	KSD	1991 Sep 29 2:00s
-			 3:00	-	KSK	1992 Jan 19 2:00s
-			 4:00	Russia	KS%s
+			 3:00	-	KUYT	1957 Mar # Kuybyshev Time
+			 4:00	Russia	KUY%sT	1991 Mar 31 2:00s
+			 3:00	1:00	KUYST	1991 Sep 29 2:00s
+			 3:00	-	KUYT	1992 Jan 19 2:00s
+			 4:00	Russia	KUY%sT
 Zone Asia/Yekaterinburg	 4:02:34 -	LMT	1924 May  2
-			 4:00	-	SSK	1957 Mar
-			 5:00	Russia	SS%s	1991 Mar 31 2:00s
-			 4:00	1:00	SSD	1991 Sep 29 2:00s
-			 4:00	-	SSK	1992 Jan 19 2:00s
-			 5:00	Russia	ES%s	# name change from Sverdlovsk
+			 4:00	-	SVET	1957 Mar # Sverdlovsk Time
+			 5:00	Russia	SVE%sT	1991 Mar 31 2:00s
+			 4:00	1:00	SVEST	1991 Sep 29 2:00s
+			 4:00	-	SVET	1992 Jan 19 2:00s
+			 5:00	Russia	YEK%sT	# Yekaterinburg Time
 Zone Asia/Omsk		 4:53:36 -	LMT	1924 May  2
-			 5:00	-	OSK	1957 Mar
-			 6:00	Russia	OS%s	1991 Mar 31 2:00s
-			 5:00	1:00	OSD	1991 Sep 29 2:00s
-			 5:00	-	OSK	1992 Jan 19 2:00s
-			 6:00	Russia	OS%s
+			 5:00	-	OMST	1957 Mar # Omsk Time
+			 6:00	Russia	OMS%sT	1991 Mar 31 2:00s
+			 5:00	1:00	OMSST	1991 Sep 29 2:00s
+			 5:00	-	OMST	1992 Jan 19 2:00s
+			 6:00	Russia	OMS%sT
 # From Stanislaw A. Kuzikowski <S.A.Kuz@iae.nsk.su> (June 29, 1994):
 # But now it is some months since Novosibirsk is 3 hours ahead of Moscow!
 # I do not know why they have decided to make this change;
 # as far as I remember it was done exactly during winter->summer switching
 # so we (Novosibirsk) simply did not switch.
 Zone Asia/Novosibirsk	 5:31:40 -	LMT	1924 May  2
-			 6:00	-	NSK	1957 Mar
-			 7:00	Russia	NS%s	1991 Mar 31 2:00s
-			 6:00	1:00	NSD	1991 Sep 29 2:00s
-			 6:00	-	NSK	1992 Jan 19 2:00s
-			 7:00	Russia	NS%s	1994 Mar 27 2:00s
-			 6:00	1:00	NSD	1994 Sep 25 2:00s
-			 6:00	Russia	NS%s
+			 6:00	-	NOVT	1957 Mar # Novosibirsk TIme
+			 7:00	Russia	NOV%sT	1991 Mar 31 2:00s
+			 6:00	1:00	NOVST	1991 Sep 29 2:00s
+			 6:00	-	NOVT	1992 Jan 19 2:00s
+			 7:00	Russia	NOV%sT	1994 Mar 27 2:00s
+			 6:00	1:00	NOVST	1994 Sep 25 2:00s
+			 6:00	Russia	NOV%sT
 Zone Asia/Krasnoyarsk	 6:11:20 -	LMT	1924 May  2
-			 6:00	-	KRSK	1957 Mar
-			 7:00	Russia	KRS%s	1991 Mar 31 2:00s
-			 6:00	1:00	KRSD	1991 Sep 29 2:00s
-			 6:00	-	KRSK	1992 Jan 19 2:00s
-			 7:00	Russia	KRS%s
+			 6:00	-	KRAT	1957 Mar # Krasnoyarsk Time
+			 7:00	Russia	KRA%sT	1991 Mar 31 2:00s
+			 6:00	1:00	KRAST	1991 Sep 29 2:00s
+			 6:00	-	KRAT	1992 Jan 19 2:00s
+			 7:00	Russia	KRA%sT
 Zone Asia/Irkutsk	 6:57:20 -	LMT	1880
-			 6:57	-	LST	1924 May  2
-			 7:00	-	ISK	1957 Mar
-			 8:00	Russia	IS%s	1991 Mar 31 2:00s
-			 7:00	1:00	ISD	1991 Sep 29 2:00s
-			 7:00	-	ISK	1992 Jan 19 2:00s
-			 8:00	Russia	IS%s
+			 6:57:20 -	IMT	1924 May  2 # Irkutsk Mean Time
+			 7:00	-	IRKT	1957 Mar # Irkutsk Time
+			 8:00	Russia	IRK%sT	1991 Mar 31 2:00s
+			 7:00	1:00	IRKST	1991 Sep 29 2:00s
+			 7:00	-	IRKT	1992 Jan 19 2:00s
+			 8:00	Russia	IRK%sT
 Zone Asia/Yakutsk	 8:38:40 -	LMT	1924 May  2
-			 8:00	-	YSK	1957 Mar
-			 9:00	Russia	YS%s	1991 Mar 31 2:00s
-			 8:00	1:00	YSD	1991 Sep 29 2:00s
-			 8:00	-	YSK	1992 Jan 19 2:00s
-			 9:00	Russia	YS%s
+			 8:00	-	YAKT	1957 Mar # Yakutsk Time
+			 9:00	Russia	YAK%sT	1991 Mar 31 2:00s
+			 8:00	1:00	YAKST	1991 Sep 29 2:00s
+			 8:00	-	YAKT	1992 Jan 19 2:00s
+			 9:00	Russia	YAK%sT
 Zone Asia/Vladivostok	 8:47:44 -	LMT	1880
-			 8:48	-	LST	1924 May  2
-			 9:00	-	VSK	1957 Mar
-			10:00	Russia	VS%s	1991 Mar 31 2:00s
-			 9:00	1:00	VSD	1991 Sep 29 2:00s
-			 9:00	-	VSK	1992 Jan 19 2:00s
-			10:00	Russia	VS%s
+			 8:47:44 -	VMT	1924 May  2 # Vladivostok MT
+			 9:00	-	VLAT	1957 Mar # Vladivostok Time
+			10:00	Russia	VLA%sT	1991 Mar 31 2:00s
+			 9:00	1:00	VLAST	1991 Sep 29 2:00s
+			 9:00	-	VLAT	1992 Jan 19 2:00s
+			10:00	Russia	VLA%sT
 Zone Asia/Magadan	10:03:12 -	LMT	1924 May  2
-			10:00	-	MSK	1957 Mar
-			11:00	Russia	MS%s	1991 Mar 31 2:00s
-			10:00	1:00	MSD	1991 Sep 29 2:00s
-			10:00	-	MSK	1992 Jan 19 2:00s
-			11:00	Russia	MS%s
+			10:00	-	MAGT	1957 Mar # Magadan Time
+			11:00	Russia	MAG%sT	1991 Mar 31 2:00s
+			10:00	1:00	MAGST	1991 Sep 29 2:00s
+			10:00	-	MAGT	1992 Jan 19 2:00s
+			11:00	Russia	MAG%sT
 # This name should be Asia/Petropavlovsk-Kamchatski, but that's too long.
 Zone Asia/Kamchatka	10:34:36 -	LMT	1924 May  2
-			11:00	-	PSK	1957 Mar
-			12:00	Russia	PS%s	1991 Mar 31 2:00s
-			11:00	1:00	PSD	1991 Sep 29 2:00s
-			11:00	-	PSK	1992 Jan 19 2:00s
-			12:00	Russia	PS%s
+			11:00	-	PETT	1957 Mar # P-K Time
+			12:00	Russia	PET%sT	1991 Mar 31 2:00s
+			11:00	1:00	PETST	1991 Sep 29 2:00s
+			11:00	-	PETT	1992 Jan 19 2:00s
+			12:00	Russia	PET%sT
 Zone Asia/Anadyr	11:49:56 -	LMT	1924 May  2
-			12:00	-	ASK	1957 Mar
-			13:00	Russia	AS%s	1991 Mar 31 2:00s
-			12:00	1:00	ASD	1991 Sep 29 2:00s
-			12:00	-	ASK	1992 Jan 19 2:00s
-			13:00	Russia	AS%s
+			12:00	-	ANAT	1957 Mar # Anadyr Time
+			13:00	Russia	ANA%sT	1991 Mar 31 2:00s
+			12:00	1:00	ANAST	1991 Sep 29 2:00s
+			12:00	-	ANAT	1992 Jan 19 2:00s
+			13:00	Russia	ANA%sT
 
 # Slovakia
 Link Europe/Prague Europe/Bratislava
 
 # Slovenia
-# They switched from the Julian to the Gregorian calendar on 1918 Mar 18.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Ljubljana	0:58:04	-	LMT	1884
-			1:00	-	MET	1941 Apr 18 23:00
-			1:00	M-Eur	MET%s	1945 May  8  2:00s
-			1:00	1:00  "MET DST"	1945 Sep 16  2:00s
-			1:00	-	MET	1983
-			1:00	EU	MET%s
+			1:00	-	CET	1941 Apr 18 23:00
+			1:00	C-Eur	CE%sT	1945 May  8  2:00s
+			1:00	1:00	CEST	1945 Sep 16  2:00s
+			1:00	-	CET	1983
+			1:00	EU	CE%sT
 
 # Spain
+# Gregorian calendar adopted 1582-10-15.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 # For 1917-1919 Whitman gives Apr Sat>=1 - Oct Sat>=1; go with Shanks.
-Rule	Spain	1917	only	-	May	 5	23:00s	1:00	" DST"
+Rule	Spain	1917	only	-	May	 5	23:00s	1:00	S
 Rule	Spain	1917	1919	-	Oct	 6	23:00s	0	-
-Rule	Spain	1918	only	-	Apr	15	23:00s	1:00	" DST"
-Rule	Spain	1919	only	-	Apr	 5	23:00s	1:00	" DST"
+Rule	Spain	1918	only	-	Apr	15	23:00s	1:00	S
+Rule	Spain	1919	only	-	Apr	 5	23:00s	1:00	S
 # Whitman gives 1921 Feb 28 - Oct 14; go with Shanks.
-Rule	Spain	1924	only	-	Apr	16	23:00s	1:00	" DST"
+Rule	Spain	1924	only	-	Apr	16	23:00s	1:00	S
 # Whitman gives 1924 Oct 14; go with Shanks.
 Rule	Spain	1924	only	-	Oct	 4	23:00s	0	-
-Rule	Spain	1926	only	-	Apr	17	23:00s	1:00	" DST"
+Rule	Spain	1926	only	-	Apr	17	23:00s	1:00	S
 # Whitman says no DST in 1929; go with Shanks.
 Rule	Spain	1926	1929	-	Oct	Sat>=1	23:00s	0	-
-Rule	Spain	1927	only	-	Apr	 9	23:00s	1:00	" DST"
-Rule	Spain	1928	only	-	Apr	14	23:00s	1:00	" DST"
-Rule	Spain	1929	only	-	Apr	20	23:00s	1:00	" DST"
+Rule	Spain	1927	only	-	Apr	 9	23:00s	1:00	S
+Rule	Spain	1928	only	-	Apr	14	23:00s	1:00	S
+Rule	Spain	1929	only	-	Apr	20	23:00s	1:00	S
 # Whitman gives 1937 Jun 16, 1938 Apr 16, 1940 Apr 13; go with Shanks.
-Rule	Spain	1937	only	-	May	22	23:00s	1:00	" DST"
+Rule	Spain	1937	only	-	May	22	23:00s	1:00	S
 Rule	Spain	1937	1939	-	Oct	Sat>=1	23:00s	0	-
-Rule	Spain	1938	only	-	Mar	22	23:00s	1:00	" DST"
-Rule	Spain	1939	only	-	Apr	15	23:00s	1:00	" DST"
-Rule	Spain	1940	only	-	Mar	16	23:00s	1:00	" DST"
+Rule	Spain	1938	only	-	Mar	22	23:00s	1:00	S
+Rule	Spain	1939	only	-	Apr	15	23:00s	1:00	S
+Rule	Spain	1940	only	-	Mar	16	23:00s	1:00	S
 # Whitman says no DST 1942-1945; go with Shanks.
-Rule	Spain	1942	only	-	May	 2	22:00s	2:00	" DDST"
-Rule	Spain	1942	only	-	Sep	 1	22:00s	1:00	" DST"
-Rule	Spain	1943	1946	-	Apr	Sat>=13	22:00s	2:00	" DDST"
-Rule	Spain	1943	only	-	Oct	 3	22:00s	1:00	" DST"
-Rule	Spain	1944	only	-	Oct	10	22:00s	1:00	" DST"
-Rule	Spain	1945	only	-	Sep	30	 1:00	1:00	" DST"
+Rule	Spain	1942	only	-	May	 2	22:00s	2:00	DS
+Rule	Spain	1942	only	-	Sep	 1	22:00s	1:00	S
+Rule	Spain	1943	1946	-	Apr	Sat>=13	22:00s	2:00	DS
+Rule	Spain	1943	only	-	Oct	 3	22:00s	1:00	S
+Rule	Spain	1944	only	-	Oct	10	22:00s	1:00	S
+Rule	Spain	1945	only	-	Sep	30	 1:00	1:00	S
 Rule	Spain	1946	only	-	Sep	30	 0:00	0	-
-Rule	Spain	1949	only	-	Apr	30	23:00	1:00	" DST"
+Rule	Spain	1949	only	-	Apr	30	23:00	1:00	S
 Rule	Spain	1949	only	-	Sep	30	 1:00	0	-
-Rule	Spain	1974	1975	-	Apr	Sat>=13	23:00	1:00	" DST"
+Rule	Spain	1974	1975	-	Apr	Sat>=13	23:00	1:00	S
 Rule	Spain	1974	1975	-	Oct	Sun>=1	 1:00	0	-
-Rule	Spain	1976	only	-	Mar	27	23:00	1:00	" DST"
+Rule	Spain	1976	only	-	Mar	27	23:00	1:00	S
 Rule	Spain	1976	1977	-	Sep	lastSun	 1:00	0	-
-Rule	Spain	1977	1978	-	Apr	 2	23:00	1:00	" DST"
+Rule	Spain	1977	1978	-	Apr	 2	23:00	1:00	S
 Rule	Spain	1978	only	-	Oct	 1	 1:00	0	-
+# The following rules are copied from Morocco from 1967 through 1978.
+Rule SpainAfrica 1967	only	-	Jun	 3	12:00	1:00	S
+Rule SpainAfrica 1967	only	-	Oct	 1	 0:00	0	-
+Rule SpainAfrica 1974	only	-	Jun	24	 0:00	1:00	S
+Rule SpainAfrica 1974	only	-	Sep	 1	 0:00	0	-
+Rule SpainAfrica 1976	1977	-	May	 1	 0:00	1:00	S
+Rule SpainAfrica 1976	only	-	Aug	 1	 0:00	0	-
+Rule SpainAfrica 1977	only	-	Sep	28	 0:00	0	-
+Rule SpainAfrica 1978	only	-	Jun	 1	 0:00	1:00	S
+Rule SpainAfrica 1978	only	-	Aug	 4	 0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Madrid	-0:14:44 -	LMT	1901
-			 0:00	Spain	WET%s	1946 Sep 30
-			 1:00	Spain	MET%s	1979
-			 1:00	EU	MET%s
+			 0:00	Spain	WE%sT	1946 Sep 30
+			 1:00	Spain	CE%sT	1979
+			 1:00	EU	CE%sT
+Zone	Africa/Ceuta	-0:21:16 -	LMT	1901
+			 0:00	-	WET	1918 May  6 23:00
+			 0:00	1:00	WEST	1918 Oct  7 23:00
+			 0:00	-	WET	1924
+			 0:00	Spain	WE%sT	1929
+			 0:00 SpainAfrica WE%sT 1984 Mar 16
+			 1:00	-	CET	1986
+			 1:00	EU	CE%sT
 Zone	Atlantic/Canary	-1:01:36 -	LMT	1922 Mar # Las Palmas de Gran C.
-			-1:00	-	ACT	1946 Sep 30 1:00
+			-1:00	-	CANT	1946 Sep 30 1:00 # Canaries Time
 			 0:00	-	WET	1980 Apr  6 0:00s
-			 0:00	1:00  "WET DST"	1980 Sep 28 0:00s
-			 0:00	EU	WET%s
+			 0:00	1:00	WEST	1980 Sep 28 0:00s
+			 0:00	EU	WE%sT
 
 # Sweden
+
+# From: msb@sq.com (Mark Brader) <URL:news:1996Jul6.012937.29190@sq.com>:
+#
+# In 1700, Denmark made the transition from Julian to Gregorian.  Sweden
+# decided to *start* a transition in 1700 as well, but rather than have one of
+# those unsightly calendar gaps :-), they simply decreed that the next leap
+# year after 1696 would be in 1744 -- putting the whole country on a calendar
+# different from both Julian and Gregorian for a period of 40 years.
+#
+# However, in 1704 something went wrong and the plan was not carried through;
+# they did, after all, have a leap year that year.  And one in 1708.  In 1712
+# they gave it up and went back to Julian, putting 30 days in February that
+# year!...
+#
+# Then in 1753, Sweden made the transition to Gregorian in the usual manner,
+# getting there only 13 years behind the original schedule.
+#
+# (A previous posting of this story was challenged, and Swedish readers
+# produced the following references to support it: "Tiderakning och historia"
+# by Natanael Beckman (1924) and "Tid, en bok om tiderakning och
+# kalendervasen" by Lars-Olof Lode'n (no date was given).)
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Stockholm	1:12:12 -	LMT	1878 May 31
-			1:12	-	SMT	1900 Jan  1  1:00 # Stockholm MT
-			1:00	-	MET	1916 Apr 14 23:00s
-			1:00	1:00  "MET DST"	1916 Sep 30 23:00s
-			1:00	-	MET	1980
-			1:00	EU	MET%s
+			1:12:12	-	SMT	1900 Jan  1  1:00 # Stockholm MT
+			1:00	-	CET	1916 Apr 14 23:00s
+			1:00	1:00	CEST	1916 Sep 30 23:00s
+			1:00	-	CET	1980
+			1:00	EU	CE%sT
 
 # Switzerland
 # From Howse (1988), p 82:
@@ -1910,121 +1955,130 @@ Zone Europe/Stockholm	1:12:12 -	LMT	1878 May 31
 # mean time in preference to apparent time -- Geneva from 1780 ....
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 # From Whitman (who writes ``Midnight?''):
-Rule	Swiss	1940	only	-	Nov	 2	0:00	1:00	" DST"
+Rule	Swiss	1940	only	-	Nov	 2	0:00	1:00	S
 Rule	Swiss	1940	only	-	Dec	31	0:00	0	-
 # From Shanks (1991):
-Rule	Swiss	1941	1942	-	May	Sun>=1	2:00	1:00	" DST"
+Rule	Swiss	1941	1942	-	May	Sun>=1	2:00	1:00	S
 Rule	Swiss	1941	1942	-	Oct	Sun>=1	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Zurich	0:34:08 -	LMT	1848 Sep 12
-			0:30	-	SST	1894 Jun   # Swiss Standard Time
-			1:00	Swiss	MET%s	1981
-			1:00	EU	MET%s
+			0:29:44	-	BMT	1894 Jun # Bern Mean Time
+			1:00	Swiss	CE%sT	1981
+			1:00	EU	CE%sT
 
 # Turkey
-# European Turkey switched to the Gregorian calendar in 1908.
-# Asian Turkey switched in 1914.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Turkey	1916	only	-	May	 1	0:00	1:00	" DST"
+Rule	Turkey	1916	only	-	May	 1	0:00	1:00	S
 Rule	Turkey	1916	only	-	Oct	 1	0:00	0	-
-Rule	Turkey	1920	only	-	Mar	28	0:00	1:00	" DST"
+Rule	Turkey	1920	only	-	Mar	28	0:00	1:00	S
 Rule	Turkey	1920	only	-	Oct	25	0:00	0	-
-Rule	Turkey	1921	only	-	Apr	 3	0:00	1:00	" DST"
+Rule	Turkey	1921	only	-	Apr	 3	0:00	1:00	S
 Rule	Turkey	1921	only	-	Oct	 3	0:00	0	-
-Rule	Turkey	1922	only	-	Mar	26	0:00	1:00	" DST"
+Rule	Turkey	1922	only	-	Mar	26	0:00	1:00	S
 Rule	Turkey	1922	only	-	Oct	 8	0:00	0	-
 # Whitman gives 1923 Apr 28 - Sep 16 and no DST in 1924-1925; go with Shanks.
-Rule	Turkey	1924	only	-	May	13	0:00	1:00	" DST"
+Rule	Turkey	1924	only	-	May	13	0:00	1:00	S
 Rule	Turkey	1924	1925	-	Oct	 1	0:00	0	-
-Rule	Turkey	1925	only	-	May	 1	0:00	1:00	" DST"
+Rule	Turkey	1925	only	-	May	 1	0:00	1:00	S
 # Shanks omits the first two transitions in 1940; go with Whitman.
-Rule	Turkey	1940	only	-	Jun	30	0:00	1:00	" DST"
+Rule	Turkey	1940	only	-	Jun	30	0:00	1:00	S
 Rule	Turkey	1940	only	-	Oct	 5	0:00	0	-
-Rule	Turkey	1940	only	-	Dec	 1	0:00	1:00	" DST"
+Rule	Turkey	1940	only	-	Dec	 1	0:00	1:00	S
 Rule	Turkey	1941	only	-	Sep	21	0:00	0	-
-Rule	Turkey	1942	only	-	Apr	 1	0:00	1:00	" DST"
+Rule	Turkey	1942	only	-	Apr	 1	0:00	1:00	S
 # Whitman omits the next two transition and gives 1945 Oct 1; go with Shanks.
 Rule	Turkey	1942	only	-	Nov	 1	0:00	0	-
-Rule	Turkey	1945	only	-	Apr	 2	0:00	1:00	" DST"
+Rule	Turkey	1945	only	-	Apr	 2	0:00	1:00	S
 Rule	Turkey	1945	only	-	Oct	 8	0:00	0	-
-Rule	Turkey	1946	only	-	Jun	 1	0:00	1:00	" DST"
+Rule	Turkey	1946	only	-	Jun	 1	0:00	1:00	S
 Rule	Turkey	1946	only	-	Oct	 1	0:00	0	-
-Rule	Turkey	1947	1948	-	Apr	Sun>=16	0:00	1:00	" DST"
+Rule	Turkey	1947	1948	-	Apr	Sun>=16	0:00	1:00	S
 Rule	Turkey	1947	1950	-	Oct	Sun>=2	0:00	0	-
-Rule	Turkey	1949	only	-	Apr	10	0:00	1:00	" DST"
-Rule	Turkey	1950	only	-	Apr	19	0:00	1:00	" DST"
-Rule	Turkey	1951	only	-	Apr	22	0:00	1:00	" DST"
+Rule	Turkey	1949	only	-	Apr	10	0:00	1:00	S
+Rule	Turkey	1950	only	-	Apr	19	0:00	1:00	S
+Rule	Turkey	1951	only	-	Apr	22	0:00	1:00	S
 Rule	Turkey	1951	only	-	Oct	 8	0:00	0	-
-Rule	Turkey	1962	only	-	Jul	15	0:00	1:00	" DST"
+Rule	Turkey	1962	only	-	Jul	15	0:00	1:00	S
 Rule	Turkey	1962	only	-	Oct	 8	0:00	0	-
-Rule	Turkey	1964	only	-	May	15	0:00	1:00	" DST"
+Rule	Turkey	1964	only	-	May	15	0:00	1:00	S
 Rule	Turkey	1964	only	-	Oct	 1	0:00	0	-
-Rule	Turkey	1970	1972	-	May	Sun>=2	0:00	1:00	" DST"
+Rule	Turkey	1970	1972	-	May	Sun>=2	0:00	1:00	S
 Rule	Turkey	1970	1972	-	Oct	Sun>=2	0:00	0	-
-Rule	Turkey	1973	only	-	Jun	 3	1:00	1:00	" DST"
+Rule	Turkey	1973	only	-	Jun	 3	1:00	1:00	S
 Rule	Turkey	1973	only	-	Nov	 4	3:00	0	-
-Rule	Turkey	1974	only	-	Mar	31	2:00	1:00	" DST"
+Rule	Turkey	1974	only	-	Mar	31	2:00	1:00	S
 Rule	Turkey	1974	only	-	Nov	 3	5:00	0	-
-Rule	Turkey	1975	only	-	Mar	30	0:00	1:00	" DST"
+Rule	Turkey	1975	only	-	Mar	30	0:00	1:00	S
 Rule	Turkey	1975	1976	-	Oct	lastSun	0:00	0	-
-Rule	Turkey	1976	only	-	Jun	 1	0:00	1:00	" DST"
-Rule	Turkey	1977	1978	-	Apr	Sun>=1	0:00	1:00	" DST"
+Rule	Turkey	1976	only	-	Jun	 1	0:00	1:00	S
+Rule	Turkey	1977	1978	-	Apr	Sun>=1	0:00	1:00	S
 Rule	Turkey	1977	only	-	Oct	16	0:00	0	-
-Rule	Turkey	1979	1980	-	Apr	Sun>=1	3:00	1:00	" DST"
+Rule	Turkey	1979	1980	-	Apr	Sun>=1	3:00	1:00	S
 Rule	Turkey	1979	1982	-	Oct	Mon>=11	0:00	0	-
-Rule	Turkey	1981	1982	-	Mar	lastSun	3:00	1:00	" DST"
-Rule	Turkey	1983	only	-	Jul	31	0:00	1:00	" DST"
+Rule	Turkey	1981	1982	-	Mar	lastSun	3:00	1:00	S
+Rule	Turkey	1983	only	-	Jul	31	0:00	1:00	S
 Rule	Turkey	1983	only	-	Oct	 2	0:00	0	-
-Rule	Turkey	1985	only	-	Apr	20	0:00	1:00	" DST"
+Rule	Turkey	1985	only	-	Apr	20	0:00	1:00	S
 Rule	Turkey	1985	only	-	Sep	28	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Istanbul	1:55:52 -	LMT	1880
-			1:57	-	OMT	1910 Oct     # Ottoman Mean Time
-			2:00	Turkey	EET%s	1978 Oct 15
-			3:00	Turkey	TUR%s	1985 Apr 20
-			2:00	Turkey	EET%s	1986
-			2:00	M-Eur	EET%s
-#			This may change to `EU' soon.
+			1:56:56	-	IMT	1910 Oct # Istanbul Mean Time?
+			2:00	Turkey	EE%sT	1978 Oct 15
+			3:00	Turkey	TR%sT	1985 Apr 20 # Turkey Time
+			2:00	Turkey	EE%sT	1986
+			2:00	C-Eur	EE%sT
 Link	Europe/Istanbul	Asia/Istanbul	# Istanbul is in both continents.
 
 # Ukraine
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Ukraine	1919	only	-	Jul	 1	 2:00	1:00	" DST"
-Rule	Ukraine	1919	only	-	Aug	16	 0:00	0	-
-Rule	Ukraine	1921	only	-	Feb	14	23:00	1:00	" DST"
-Rule	Ukraine	1921	only	-	Mar	21	23:00	2:00	" DDST"
-Rule	Ukraine	1921	only	-	Sep	 1	 0:00	1:00	" DST"
-Rule	Ukraine	1921	only	-	Oct	 1	 0:00	0	-
+Rule	Ukraine	1917	only	-	Jul	 1	23:00	1:00	UST	# Ukrainian Summer Time
+Rule	Ukraine	1917	only	-	Dec	28	 0:00	0	KMT	# Kiev Mean TIme
+Rule	Ukraine	1918	only	-	May	31	22:00	2:00	UDST	# Ukrainian Double Summer Time
+Rule	Ukraine	1918	only	-	Sep	17	 0:00	1:00	UST
+Rule	Ukraine	1919	only	-	May	31	23:00	2:00	UDST
+Rule	Ukraine	1919	only	-	Jul	 1	 2:00	1:00	UST
+Rule	Ukraine	1919	only	-	Aug	16	 0:00	0	KMT
+Rule	Ukraine	1921	only	-	Feb	14	23:00	1:00	UST
+Rule	Ukraine	1921	only	-	Mar	21	23:00	2:00	UDST
+Rule	Ukraine	1921	only	-	Sep	 1	 0:00	1:00	UST
+Rule	Ukraine	1921	only	-	Oct	 1	 0:00	0	KMT
+Rule	Crimea	1917	only	-	Jul	 1	23:00	1:00	CST	# Crimean Summer Time
+Rule	Crimea	1917	only	-	Dec	28	 0:00	0	NMT	# Nikolayev Mean Time
+Rule	Crimea	1918	only	-	May	31	22:00	2:00	CDST	# Crimean Double Summer Time
+Rule	Crimea	1918	only	-	Sep	17	 0:00	1:00	CST
+Rule	Crimea	1919	only	-	May	31	23:00	2:00	CDST
+Rule	Crimea	1919	only	-	Jul	 1	 2:00	1:00	CST
+Rule	Crimea	1919	only	-	Aug	16	 0:00	0	NMT
+Rule	Crimea	1921	only	-	Feb	14	23:00	1:00	CST
+Rule	Crimea	1921	only	-	Mar	21	23:00	2:00	CDST
+Rule	Crimea	1921	only	-	Sep	 1	 0:00	1:00	CST
+Rule	Crimea	1921	only	-	Oct	 1	 0:00	0	NMT
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Kiev	2:02:04 -	LMT	1880
-			2:02	Russia	LST%s	1919 Jul  1 2:00
-			2:02	Ukraine	LST%s	1924 May  2
+			2:02:04	Ukraine	%s	1924 May  2
 			2:00	-	EET	1930 Jun 21
-			3:00	Russia	MS%s	1990 Jul 17
-			2:00	M-Eur	EET%s
-#			This may change to `EU' soon.
+			3:00	Russia	MOS%sT	1990 Jul 17 # Moscow Time
+			2:00	C-Eur	EE%sT
 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
+			2:08:00	Crimea	%s	1924 May  2
 			2:00	-	EET	1930 Jun 21
-			3:00	Russia	MS%s	1991 Mar 31 2:00s
-			2:00	1:00  "EET DST"	1991 Sep 29 2:00s
+			3:00	Russia	MOS%sT	1991 Mar 31 2:00s
+			2:00	1:00	EEST	1991 Sep 29 2:00s
 # From Paul Eggert <eggert@twinsun.com> (May 28, 1994):
 # Today's _Economist_ (p 45) reports that Crimea switched
 # from Kiev to Moscow time sometime after the January elections.
 # For now, we'll guess that there was a 2-hour leap forward on March 27.
-			2:00	M-Eur	EET%s	1994 Mar 27 2:00s
-			3:00	Russia	MS%s
+			2:00	C-Eur	EE%sT	1994 Mar 27 2:00s
+			3:00	Russia	MOS%sT
 
 # Yugoslavia
-# They switched from the Julian to the Gregorian calendar on 1918 Mar 18.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Belgrade	1:22:00	-	LMT	1884
-			1:00	-	MET	1941 Apr 18 23:00
-			1:00	M-Eur	MET%s	1945 May  8  2:00s
-			1:00	1:00  "MET DST"	1945 Sep 16  2:00s
-			1:00	-	MET	1983
-			1:00	EU	MET%s
+			1:00	-	CET	1941 Apr 18 23:00
+			1:00	C-Eur	CE%sT	1945 May  8  2:00s
+			1:00	1:00	CEST	1945 Sep 16  2:00s
+			1:00	-	CET	1983
+			1:00	EU	CE%sT
 
 ###############################################################################
 
diff --git a/time/northamerica b/time/northamerica
index 57719816f9..1d8bd9e6f5 100644
--- a/time/northamerica
+++ b/time/northamerica
@@ -1,4 +1,4 @@
-# @(#)northamerica	7.26
+# @(#)northamerica	7.27
 # also includes Central America and the Caribbean
 
 # This data is by no means authoritative; if you think you know better,
@@ -202,9 +202,9 @@ Zone America/Los_Angeles -7:52:58 -	LMT	1883 Nov 18 12:00
 #
 # From Paul Eggert (1995-12-19):
 # Howse writes that Alaska switched from the Julian to the Gregorian calendar,
-# and from east-of-GMT to west-of-GMT days, in 1867 when the US purchased it
-# from Russia.  We omit this transition, since we can't represent changes
-# from Julian to Gregorian.
+# and from east-of-GMT to west-of-GMT days, when the US bought it from Russia.
+# This was on 1867-10-18.  We omit this transition, since we can't represent
+# changes from Julian to Gregorian.
 #
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Juneau	 -8:57:41 -	LMT	1900 Aug 20 12:00
@@ -472,12 +472,9 @@ Link	Pacific/Honolulu	HST
 # Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
 # I found in the UCLA library.
 #
-# 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.
+# See the `africa' file for time zone naming and abbreviation conventions.
 
 # Canada
 
@@ -839,7 +836,6 @@ Rule	NT_YK	1919	only	-	May	25	2:00	1:00	D
 Rule	NT_YK	1919	only	-	Nov	 1	0:00	0	S
 Rule	NT_YK	1942	only	-	Feb	 9	2:00	1:00	D
 Rule	NT_YK	1945	only	-	Sep	30	2:00	0	S
-#							0:00 ??
 Rule	NT_YK	1965	only	-	Apr	lastSun	0:00	2:00	DD
 Rule	NT_YK	1965	only	-	Oct	lastSun	2:00	0	S
 Rule	NT_YK	1980	1986	-	Apr	lastSun	2:00	1:00	D
@@ -1158,7 +1154,7 @@ Zone America/El_Salvador -5:56:48 -	LMT	1921		# San Salvador
 
 # Grenada
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Grenada	-4:07:00 -	LMT	1911 Jul
+Zone	America/Grenada	-4:07:00 -	LMT	1911 Jul	# St George's
 			-4:00	-	AST
 
 # Guadeloupe
@@ -1263,7 +1259,7 @@ Zone America/St_Lucia	-4:04:00 -	LMT	1890		# Castries
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Miquelon	-3:44:40 -	LMT	1911 May 15	# St Pierre
 			-4:00	-	AST	1980 May
-			-3:00	Mont	SP%sT
+			-3:00	Mont	PM%sT	# Pierre & Miquelon Time
 
 # St Vincent and the Grenadines
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
diff --git a/time/southamerica b/time/southamerica
index c3c5c99fbe..cb5b34bfc6 100644
--- a/time/southamerica
+++ b/time/southamerica
@@ -1,33 +1,35 @@
-# @(#)southamerica	7.12
+# @(#)southamerica	7.13
 
 # 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
 # tz@elsie.nci.nih.gov for general use in the future).
 
-# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+# From Paul Eggert <eggert@twinsun.com> (1996-09-03):
 # A good source for time zone historical data outside the U.S. is
 # Thomas G. Shanks, The International Atlas (3rd edition),
 # San Diego: ACS Publications, Inc. (1991).
 # Except where otherwise noted, it is the source for the data below.
 #
-# I invented the abbreviations marked `*' in the following table;
-# the rest are from earlier versions of this file, or from other sources.
-# Some of these are just plausible excuses for common English abbreviations.
+# The following abbreviations are used in this file.
 # Corrections are welcome!
 #		std	dst
 #		LMT		Local Mean Time
 #	-2:00	FST	FDT	Fernando de Noronha
-#	-3:00	EST	EDT	Eastern South America (conflicts with -5:00)
-#	-3:00	ARST	ARDT	Argentina
-#	-4:00	AST	ADT	Andes*, Antilles*, Asuncion*, Atlantic
-#	-4:00	CST	CDT	Chile (conflicts with -6:00)
+#	-3:00	EST	EDT	Eastern Brazil
 #	-4:00	WST	WDT	Western Brazil
-#	-5:00	AST	ADT	Acre (conflicts with -4:00)
-#	-5:00	EST	EDT	Eastern, Ecuador*
-#	-6:00	CST	CDT	Archipelago of Columbus*, Central
-#	-7:00	MST	MDT	Mataveri*, Mountain
+#	-4:00	AST	ADT	Atlantic
+#	-5:00	AST	ADT	Acre
 #
-# See the `africa' file for Zone naming conventions.
+# See the `africa' file for time zone naming and abbreviation conventions.
+# Earlier editions of these tables used the North American style (e.g. ARST and
+# ARDT for Argentine Standard and Daylight Time), but the following quote
+# suggests that it's better to use European style (e.g. ART and ARST).
+#	I suggest the use of _Summer time_ instead of the more cumbersome
+#	_daylight-saving time_.  _Summer time_ seems to be in general use
+#	in Europe and South America.
+#	-- E O Cutler, _New York Times_ (1937-02-14), quoted in
+#	H L Mencken, _The American Language: Supplement I_ (1960), p 466
+
 
 # From Guy Harris:
 # From Official Airline Guide - Worldwide Edition (1987).  Countries not
@@ -55,35 +57,35 @@
 # AR was chosen because they are the ISO letters that represent Argentina.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Arg	1930	only	-	Dec	 1	0:00	1:00	D
-Rule	Arg	1931	only	-	Apr	 1	0:00	0	S
-Rule	Arg	1931	only	-	Oct	15	0:00	1:00	D
-Rule	Arg	1932	1940	-	Mar	 1	0:00	0	S
-Rule	Arg	1932	1939	-	Nov	 1	0:00	1:00	D
-Rule	Arg	1940	only	-	Jul	 1	0:00	1:00	D
-Rule	Arg	1941	only	-	Jun	15	0:00	0	S
-Rule	Arg	1941	only	-	Oct	15	0:00	1:00	D
-Rule	Arg	1943	only	-	Aug	 1	0:00	0	S
-Rule	Arg	1943	only	-	Oct	15	0:00	1:00	D
-Rule	Arg	1946	only	-	Mar	 1	0:00	0	S
-Rule	Arg	1946	only	-	Oct	 1	0:00	1:00	D
-Rule	Arg	1963	only	-	Oct	 1	0:00	0	S
-Rule	Arg	1963	only	-	Dec	15	0:00	1:00	D
-Rule	Arg	1964	1966	-	Mar	 1	0:00	0	S
-Rule	Arg	1964	1966	-	Oct	15	0:00	1:00	D
-Rule	Arg	1967	only	-	Apr	 1	0:00	0	S
-Rule	Arg	1967	1968	-	Oct	Sun<=7	0:00	1:00	D
-Rule	Arg	1968	1969	-	Apr	Sun<=7	0:00	0	S
-Rule	Arg	1974	only	-	Jan	23	0:00	1:00	D
-Rule	Arg	1974	only	-	May	 1	0:00	0	S
-Rule	Arg	1974	1976	-	Oct	Sun<=7	0:00	1:00	D
-Rule	Arg	1975	1977	-	Apr	Sun<=7	0:00	0	S
-Rule	Arg	1985	only	-	Nov	 2	0:00	1:00	D
-Rule	Arg	1986	only	-	Mar	14	0:00	0	S
-Rule	Arg	1986	1987	-	Oct	25	0:00	1:00	D
-Rule	Arg	1987	only	-	Feb	13	0:00	0	S
-Rule	Arg	1988	only	-	Feb	 7	0:00	0	S
-Rule	Arg	1988	only	-	Dec	 1	0:00	1:00	D
+Rule	Arg	1930	only	-	Dec	 1	0:00	1:00	S
+Rule	Arg	1931	only	-	Apr	 1	0:00	0	-
+Rule	Arg	1931	only	-	Oct	15	0:00	1:00	S
+Rule	Arg	1932	1940	-	Mar	 1	0:00	0	-
+Rule	Arg	1932	1939	-	Nov	 1	0:00	1:00	S
+Rule	Arg	1940	only	-	Jul	 1	0:00	1:00	S
+Rule	Arg	1941	only	-	Jun	15	0:00	0	-
+Rule	Arg	1941	only	-	Oct	15	0:00	1:00	S
+Rule	Arg	1943	only	-	Aug	 1	0:00	0	-
+Rule	Arg	1943	only	-	Oct	15	0:00	1:00	S
+Rule	Arg	1946	only	-	Mar	 1	0:00	0	-
+Rule	Arg	1946	only	-	Oct	 1	0:00	1:00	S
+Rule	Arg	1963	only	-	Oct	 1	0:00	0	-
+Rule	Arg	1963	only	-	Dec	15	0:00	1:00	S
+Rule	Arg	1964	1966	-	Mar	 1	0:00	0	-
+Rule	Arg	1964	1966	-	Oct	15	0:00	1:00	S
+Rule	Arg	1967	only	-	Apr	 1	0:00	0	-
+Rule	Arg	1967	1968	-	Oct	Sun<=7	0:00	1:00	S
+Rule	Arg	1968	1969	-	Apr	Sun<=7	0:00	0	-
+Rule	Arg	1974	only	-	Jan	23	0:00	1:00	S
+Rule	Arg	1974	only	-	May	 1	0:00	0	-
+Rule	Arg	1974	1976	-	Oct	Sun<=7	0:00	1:00	S
+Rule	Arg	1975	1977	-	Apr	Sun<=7	0:00	0	-
+Rule	Arg	1985	only	-	Nov	 2	0:00	1:00	S
+Rule	Arg	1986	only	-	Mar	14	0:00	0	-
+Rule	Arg	1986	1987	-	Oct	25	0:00	1:00	S
+Rule	Arg	1987	only	-	Feb	13	0:00	0	-
+Rule	Arg	1988	only	-	Feb	 7	0:00	0	-
+Rule	Arg	1988	only	-	Dec	 1	0:00	1:00	S
 #
 # From Hernan G. Otero <hernan@isoft.com.ar> (June 26, 1995):
 # These corrections were contributed by InterSoft Argentina S.A.,
@@ -92,8 +94,8 @@ Rule	Arg	1988	only	-	Dec	 1	0:00	1:00	D
 # (Argentinian Naval Hydrography Institute)
 #
 # Shanks gives 1989 Mar 16 and stops after 1990 Mar 4; go with Otero.
-Rule	Arg	1989	1993	-	Mar	Sun>=1	0:00	0	S
-Rule	Arg	1989	1992	-	Oct	Sun>=15	0:00	1:00	D
+Rule	Arg	1989	1993	-	Mar	Sun>=1	0:00	0	-
+Rule	Arg	1989	1992	-	Oct	Sun>=15	0:00	1:00	S
 #
 # From Hernan G. Otero <hernan@isoft.com.ar> (June 26, 1995):
 # From this moment on, the law that mandated the daylight saving
@@ -102,23 +104,23 @@ Rule	Arg	1989	1992	-	Oct	Sun>=15	0:00	1:00	D
 #
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Buenos_Aires -3:53:48 -	LMT	1894 Nov
-			-4:17	-	CMT	1920 May    # Cordoba Mean Time
-			-4:00	-	AST	1930 Dec
-			-4:00	Arg	A%sT	1969 Oct 5
+			-4:16:44 -	CMT	1920 May    # Cordoba Mean Time
+			-4:00	-	ART	1930 Dec
+			-4:00	Arg	AR%sT	1969 Oct 5
 			-3:00	Arg	AR%sT
 
 # Aruba
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Aruba	-4:40:24 -	LMT	1912 Feb 12	# Oranjestad
-			-4:30	-	NAST	1965	# Netherlands Antilles
+			-4:30	-	ANT	1965 # Netherlands Antilles Time
 			-4:00	-	AST
 
 # Bolivia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	America/La_Paz	-4:32:36 -	LMT	1890
-			-4:33	-	LPMT	1931 Oct 15 # La Paz Mean Time
-			-4:33	1:00	LPDT	1932 Mar 21
-			-4:00	-	AST
+			-4:32:36 -	LPMT	1931 Oct 15 # La Paz Mean Time
+			-4:32:36 1:00	BOST	1932 Mar 21 # Bolivia ST
+			-4:00	-	BOT	# Bolivia Time
 
 # Brazil
 
@@ -164,26 +166,26 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
 # about time zone changes after 1990 Feb 11.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Brazil	1931	only	-	Oct	 3	11:00	1	D
+Rule	Brazil	1931	only	-	Oct	 3	11:00	1:00	D
 Rule	Brazil	1932	1933	-	Apr	 1	 0:00	0	S
-Rule	Brazil	1932	only	-	Oct	 3	 0:00	1	D
-Rule	Brazil	1949	1952	-	Dec	 1	 0:00	1	D
+Rule	Brazil	1932	only	-	Oct	 3	 0:00	1:00	D
+Rule	Brazil	1949	1952	-	Dec	 1	 0:00	1:00	D
 Rule	Brazil	1950	only	-	Apr	16	 0:00	0	S
 Rule	Brazil	1951	1953	-	Apr	 1	 0:00	0	S
-Rule	Brazil	1963	only	-	Dec	 9	 0:00	1	D
+Rule	Brazil	1963	only	-	Dec	 9	 0:00	1:00	D
 Rule	Brazil	1964	only	-	Mar	 1	 0:00	0	S
-Rule	Brazil	1965	only	-	Jan	31	 0:00	1	D
+Rule	Brazil	1965	only	-	Jan	31	 0:00	1:00	D
 Rule	Brazil	1965	only	-	Apr	 1	 0:00	0	S
-Rule	Brazil	1965	only	-	Dec	 1	 0:00	1	D
+Rule	Brazil	1965	only	-	Dec	 1	 0:00	1:00	D
 Rule	Brazil	1966	1968	-	Mar	 1	 0:00	0	S
-Rule	Brazil	1966	1967	-	Nov	 1	 0:00	1	D
-Rule	Brazil	1985	only	-	Nov	 2	 0:00	1	D
+Rule	Brazil	1966	1967	-	Nov	 1	 0:00	1:00	D
+Rule	Brazil	1985	only	-	Nov	 2	 0:00	1:00	D
 Rule	Brazil	1986	only	-	Mar	15	 0:00	0	S
-Rule	Brazil	1986	1987	-	Oct	Sat<=28	 0:00	1	D
+Rule	Brazil	1986	1987	-	Oct	Sat<=28	 0:00	1:00	D
 Rule	Brazil	1987	only	-	Feb	14	 0:00	0	S
 Rule	Brazil	1988	only	-	Feb	 7	 0:00	0	S
 Rule	Brazil	1989	only	-	Jan	22	 0:00	0	S
-Rule	Brazil	1988	max	-	Oct	Sun>=15	 0:00	1	D
+Rule	Brazil	1988	max	-	Oct	Sun>=15	 0:00	1:00	D
 Rule	Brazil	1990	max	-	Feb	Sun>=8	 0:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Noronha	-2:09:40 -	LMT	1914
@@ -209,21 +211,21 @@ Zone America/Porto_Acre	-4:31:12 -	LMT	1914
 # of October....  The law is the same for March and October.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Chile	1918	only	-	Sep	1	0:00	1:00	D
-Rule	Chile	1919	only	-	Jul	2	0:00	0	S
-Rule	Chile	1927	1931	-	Sep	1	0:00	1:00	D
-Rule	Chile	1928	1932	-	Apr	1	0:00	0	S
-Rule	Chile	1969	max	-	Oct	Sun>=9	0:00	1:00	D
-Rule	Chile	1970	max	-	Mar	Sun>=9	0:00	0	S
+Rule	Chile	1918	only	-	Sep	1	0:00	1:00	S
+Rule	Chile	1919	only	-	Jul	2	0:00	0	-
+Rule	Chile	1927	1931	-	Sep	1	0:00	1:00	S
+Rule	Chile	1928	1932	-	Apr	1	0:00	0	-
+Rule	Chile	1969	max	-	Oct	Sun>=9	0:00	1:00	S
+Rule	Chile	1970	max	-	Mar	Sun>=9	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Santiago	-4:42:40 -	LMT	1890
-			-4:43	-	SMT	1910	    # Santiago Mean Time
-			-5:00	Chile	C%sT	1932 Sep
-			-4:00	Chile	C%sT
+			-4:42:40 -	SMT	1910	    # Santiago Mean Time
+			-5:00	Chile	CL%sT	1932 Sep    # Chile Time
+			-4:00	Chile	CL%sT
 Zone Pacific/Easter	-7:17:28 -	LMT	1890	    # Mataveri
-			-7:17	-	MMT	1932 Sep    # Mataveri Mean Time
-			-7:00	Chile	M%sT	1982 Mar 14
-			-6:00	Chile	C%sT
+			-7:17:28 -	MMT	1932 Sep    # Mataveri Mean Time
+			-7:00	Chile	EAS%sT	1982 Mar 14 # Easter I Time
+			-6:00	Chile	EAS%sT
 #
 # Whitman says Juan Fernandez Is are like America/Santiago.
 # San Ambrosio, San Felix
@@ -233,56 +235,57 @@ Zone Pacific/Easter	-7:17:28 -	LMT	1890	    # Mataveri
 # Colombia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Bogota	-4:56:20 -	LMT	1884 Mar 13
-			-4:56	-	BMT	1914 Nov 23 # Bogota Mean Time
-			-5:00	-	EST
+			-4:56:20 -	BMT	1914 Nov 23 # Bogota Mean Time
+			-5:00	-	COT	# Colombia Time
 # Malpelo, Providencia, San Andres
 # no information; probably like America/Bogota
 
 # Curacao
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Curacao	-4:35:44 -	LMT	1912 Feb 12	# Willemstad
-			-4:30	-	NAST	1965	# Netherlands Antilles
+			-4:30	-	ANT	1965 # Netherlands Antilles Time
 			-4:00	-	AST
 
 # Ecuador
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Guayaquil	-5:19:20 -	LMT	1890
-			-5:14	-	QMT	1931 # Quito Mean Time
-			-5:00	-	EST
+			-5:14:00 -	QMT	1931 # Quito Mean Time
+			-5:00	-	ECT	     # Ecuador Time
 Zone Pacific/Galapagos	-5:58:24 -	LMT	1931 # Puerto Baquerizo Moreno
-			-5:00	-	EST	1986
-			-6:00	-	CST
+			-5:00	-	ECT	1986
+			-6:00	-	GALT	     # Galapagos Time
 
 # Falklands
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Falk	1937	1938	-	Sep	lastSun	0:00	1:00	D
-Rule	Falk	1938	1942	-	Mar	Sun>=19	0:00	0	S
-Rule	Falk	1939	only	-	Oct	1	0:00	1:00	D
-Rule	Falk	1940	1942	-	Sep	lastSun	0:00	1:00	D
-Rule	Falk	1943	only	-	Jan	1	0:00	0	S
-Rule	Falk	1983	only	-	Sep	lastSun	0:00	1:00	D
-Rule	Falk	1984	1985	-	Apr	lastSun	0:00	0	S
-Rule	Falk	1984	only	-	Sep	16	0:00	1:00	D
-Rule	Falk	1985	max	-	Sep	Sun>=9	0:00	1:00	D
-Rule	Falk	1986	max	-	Apr	Sun>=16	0:00	0	S
+Rule	Falk	1937	1938	-	Sep	lastSun	0:00	1:00	S
+Rule	Falk	1938	1942	-	Mar	Sun>=19	0:00	0	-
+Rule	Falk	1939	only	-	Oct	1	0:00	1:00	S
+Rule	Falk	1940	1942	-	Sep	lastSun	0:00	1:00	S
+Rule	Falk	1943	only	-	Jan	1	0:00	0	-
+Rule	Falk	1983	only	-	Sep	lastSun	0:00	1:00	S
+Rule	Falk	1984	1985	-	Apr	lastSun	0:00	0	-
+Rule	Falk	1984	only	-	Sep	16	0:00	1:00	S
+Rule	Falk	1985	max	-	Sep	Sun>=9	0:00	1:00	S
+Rule	Falk	1986	max	-	Apr	Sun>=16	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Atlantic/Stanley	-3:51:24 -	LMT	1890
-			-3:51	-	SMT	1912 Mar 12  # Stanley Mean Time
-			-4:00	Falk	A%sT	1983 May
-			-3:00	Falk	E%sT	1985 Sep 15
-			-4:00	Falk	A%sT
+			-3:51:24 -	SMT	1912 Mar 12  # Stanley Mean Time
+			-4:00	Falk	FK%sT	1983 May     # Falkland Is Time
+			-3:00	Falk	FK%sT	1985 Sep 15
+			-4:00	Falk	FK%sT
 
 # French Guiana
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Cayenne	-3:29:20 -	LMT	1911 Jul
-			-4:00	-	AST	1967 Oct
-			-3:00	-	EST
+			-4:00	-	GFT	1967 Oct # French Guiana Time
+			-3:00	-	GFT
 
 # Guyana
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Guyana	-3:52:40 -	LMT	1915 Mar	# Georgetown
-			-3:45	-	BGST	1975 Jul 31  # British Guiana ST
-			-3:00	-	EST
+			-3:45	-	GBGT	1966 May 26 # Br Guiana Time
+			-3:45	-	GYT	1975 Jul 31 # Guyana Time
+			-3:00	-	GYT
 
 
 # Paraguay
@@ -297,39 +300,39 @@ Zone	America/Guyana	-3:52:40 -	LMT	1915 Mar	# Georgetown
 
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Para	1975	1978	-	Oct	 1	0:00	1:00	D
-Rule	Para	1975	1978	-	Mar	 1	0:00	0	S
+Rule	Para	1975	1978	-	Oct	 1	0:00	1:00	S
+Rule	Para	1975	1978	-	Mar	 1	0:00	0	-
 # Shanks says 1979 was all DST.
-Rule	Para	1980	max	-	Apr	 1	0:00	0	S
-Rule	Para	1980	1988	-	Oct	 1	0:00	1:00	D
-Rule	Para	1989	only	-	Oct	22	0:00	1:00	D
-Rule	Para	1990	max	-	Oct	 1	0:00	1:00	D
+Rule	Para	1980	max	-	Apr	 1	0:00	0	-
+Rule	Para	1980	1988	-	Oct	 1	0:00	1:00	S
+Rule	Para	1989	only	-	Oct	22	0:00	1:00	S
+Rule	Para	1990	max	-	Oct	 1	0:00	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Asuncion	-3:50:40 -	LMT	1890
-			-3:51	-	AMT	1931 Oct 10 # Asuncion Mean Time
-			-4:00	-	AST	1972 Oct
-			-3:00	-	EST	1974 Apr
-			-4:00	Para	A%sT
+			-3:50:40 -	AMT	1931 Oct 10 # Asuncion Mean Time
+			-4:00	-	PYT	1972 Oct # Paraguay Time
+			-3:00	-	PYT	1974 Apr
+			-4:00	Para	PY%sT
 
 # Peru
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Peru	1938	only	-	Jan	 1	0:00	1:00	D
-Rule	Peru	1938	only	-	Apr	 1	0:00	0	S
-Rule	Peru	1938	1939	-	Sep	lastSun	0:00	1:00	D
-Rule	Peru	1939	1940	-	Mar	Sun>=24	0:00	0	S
-Rule	Peru	1987	only	-	Jan	 1	0:00	1:00	D
-Rule	Peru	1987	only	-	Apr	 1	0:00	0	S
-Rule	Peru	1990	only	-	Jan	 1	0:00	1:00	D
-Rule	Peru	1990	only	-	Apr	 1	0:00	0	S
+Rule	Peru	1938	only	-	Jan	 1	0:00	1:00	S
+Rule	Peru	1938	only	-	Apr	 1	0:00	0	-
+Rule	Peru	1938	1939	-	Sep	lastSun	0:00	1:00	S
+Rule	Peru	1939	1940	-	Mar	Sun>=24	0:00	0	-
+Rule	Peru	1987	only	-	Jan	 1	0:00	1:00	S
+Rule	Peru	1987	only	-	Apr	 1	0:00	0	-
+Rule	Peru	1990	only	-	Jan	 1	0:00	1:00	S
+Rule	Peru	1990	only	-	Apr	 1	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Lima	-5:08:12 -	LMT	1890
-			-5:09	-	LMT	1908 Jul 28
-			-5:00	Peru	E%sT
+			-5:09	-	LMT	1908 Jul 28 # Lima Mean Time
+			-5:00	Peru	PE%sT	# Peru Time
 
 # South Georgia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Atlantic/South_Georgia -2:26:08 -	LMT	1890		# Grytviken
-			-2:00	-	FST
+			-2:00	-	GST	# South Georgia Time
 
 # South Sandwich Is
 # uninhabited
@@ -339,8 +342,9 @@ Zone Atlantic/South_Georgia -2:26:08 -	LMT	1890		# Grytviken
 Zone America/Paramaribo	-3:40:40 -	LMT	1911
 			-3:40:52 -	PMT	1935     # Paramaribo Mean Time
 			-3:40:36 -	PMT	1945 Oct # The capital moved?
-			-3:30	-	DGST	1984 Oct # Dutch Guiana Std Time
-			-3:00	-	EST
+			-3:30	-	NEGT	1975 Nov 20 # Dutch Guiana Time
+			-3:30	-	SRT	1984 Oct # Suriname Time
+			-3:00	-	SRT
 
 # Trinidad and Tobago
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -353,55 +357,55 @@ Zone America/Port_of_Spain -4:06:04 -	LMT	1912 Mar 2
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 # Whitman gives 1923 Oct 1; go with Shanks.
-Rule	Uruguay	1923	only	-	Oct	 2	 0:00	0:30	HD
-Rule	Uruguay	1924	1926	-	Apr	 1	 0:00	0	S
-Rule	Uruguay	1924	1925	-	Oct	 1	 0:00	0:30	HD
-Rule	Uruguay	1933	1935	-	Oct	lastSun	 0:00	0:30	HD
+Rule	Uruguay	1923	only	-	Oct	 2	 0:00	0:30	HS
+Rule	Uruguay	1924	1926	-	Apr	 1	 0:00	0	-
+Rule	Uruguay	1924	1925	-	Oct	 1	 0:00	0:30	HS
+Rule	Uruguay	1933	1935	-	Oct	lastSun	 0:00	0:30	HS
 # Shanks gives 1935 Apr 1 0:00 and 1936 Mar 30 0:00; go with Whitman.
-Rule	Uruguay	1934	1936	-	Mar	Sat>=25	23:30s	0	S
-Rule	Uruguay	1936	only	-	Nov	 1	 0:00	0:30	HD
-Rule	Uruguay	1937	1941	-	Mar	lastSun	 0:00	0	S
+Rule	Uruguay	1934	1936	-	Mar	Sat>=25	23:30s	0	-
+Rule	Uruguay	1936	only	-	Nov	 1	 0:00	0:30	HS
+Rule	Uruguay	1937	1941	-	Mar	lastSun	 0:00	0	-
 # Whitman gives 1937 Oct 3; go with Shanks.
-Rule	Uruguay	1937	1940	-	Oct	lastSun	 0:00	0:30	HD
+Rule	Uruguay	1937	1940	-	Oct	lastSun	 0:00	0:30	HS
 # Whitman gives 1941 Oct 24 - 1942 Mar 27, 1942 Dec 14 - 1943 Apr 13,
 # and 1943 Apr 13 ``to present time''; go with Shanks.
-Rule	Uruguay	1941	only	-	Aug	 1	 0:00	0	S
-Rule	Uruguay	1942	only	-	Jan	 1	 0:00	0:30	HD
-Rule	Uruguay	1942	only	-	Dec	14	 0:00	1:00	D
-Rule	Uruguay	1943	only	-	Mar	14	 0:00	0	S
-Rule	Uruguay	1959	only	-	May	24	 0:00	1:00	D
-Rule	Uruguay	1959	only	-	Nov	15	 0:00	0	S
-Rule	Uruguay	1960	only	-	Jan	17	 0:00	1:00	D
-Rule	Uruguay	1960	only	-	Mar	 6	 0:00	0	S
-Rule	Uruguay	1965	1967	-	Apr	Sun>=1	 0:00	1:00	D
-Rule	Uruguay	1965	only	-	Sep	26	 0:00	0	S
-Rule	Uruguay	1966	1967	-	Oct	31	 0:00	0	S
-Rule	Uruguay	1968	1970	-	May	27	 0:00	0:30	HD
-Rule	Uruguay	1968	1970	-	Dec	 2	 0:00	0	S
-Rule	Uruguay	1972	only	-	Apr	24	 0:00	1:00	D
-Rule	Uruguay	1972	only	-	Aug	15	 0:00	0	S
-Rule	Uruguay	1974	only	-	Mar	10	 0:00	0:30	HD
-Rule	Uruguay	1974	only	-	Dec	22	 0:00	1:00	D
-Rule	Uruguay	1976	only	-	Oct	 1	 0:00	0	S
-Rule	Uruguay	1977	only	-	Dec	 4	 0:00	1:00	D
-Rule	Uruguay	1978	only	-	Apr	 1	 0:00	0	S
-Rule	Uruguay	1979	only	-	Oct	 1	 0:00	1:00	D
-Rule	Uruguay	1980	only	-	May	 1	 0:00	0	S
-Rule	Uruguay	1987	only	-	Dec	14	 0:00	1:00	D
-Rule	Uruguay	1988	only	-	Mar	14	 0:00	0	S
-Rule	Uruguay	1988	only	-	Dec	11	 0:00	1:00	D
-Rule	Uruguay	1989	only	-	Mar	12	 0:00	0	S
-Rule	Uruguay	1989	only	-	Oct	29	 0:00	1:00	D
-Rule	Uruguay	1990	only	-	Mar	 4	 0:00	0	S
+Rule	Uruguay	1941	only	-	Aug	 1	 0:00	0	-
+Rule	Uruguay	1942	only	-	Jan	 1	 0:00	0:30	HS
+Rule	Uruguay	1942	only	-	Dec	14	 0:00	1:00	S
+Rule	Uruguay	1943	only	-	Mar	14	 0:00	0	-
+Rule	Uruguay	1959	only	-	May	24	 0:00	1:00	S
+Rule	Uruguay	1959	only	-	Nov	15	 0:00	0	-
+Rule	Uruguay	1960	only	-	Jan	17	 0:00	1:00	S
+Rule	Uruguay	1960	only	-	Mar	 6	 0:00	0	-
+Rule	Uruguay	1965	1967	-	Apr	Sun>=1	 0:00	1:00	S
+Rule	Uruguay	1965	only	-	Sep	26	 0:00	0	-
+Rule	Uruguay	1966	1967	-	Oct	31	 0:00	0	-
+Rule	Uruguay	1968	1970	-	May	27	 0:00	0:30	HS
+Rule	Uruguay	1968	1970	-	Dec	 2	 0:00	0	-
+Rule	Uruguay	1972	only	-	Apr	24	 0:00	1:00	S
+Rule	Uruguay	1972	only	-	Aug	15	 0:00	0	-
+Rule	Uruguay	1974	only	-	Mar	10	 0:00	0:30	HS
+Rule	Uruguay	1974	only	-	Dec	22	 0:00	1:00	S
+Rule	Uruguay	1976	only	-	Oct	 1	 0:00	0	-
+Rule	Uruguay	1977	only	-	Dec	 4	 0:00	1:00	S
+Rule	Uruguay	1978	only	-	Apr	 1	 0:00	0	-
+Rule	Uruguay	1979	only	-	Oct	 1	 0:00	1:00	S
+Rule	Uruguay	1980	only	-	May	 1	 0:00	0	-
+Rule	Uruguay	1987	only	-	Dec	14	 0:00	1:00	S
+Rule	Uruguay	1988	only	-	Mar	14	 0:00	0	-
+Rule	Uruguay	1988	only	-	Dec	11	 0:00	1:00	S
+Rule	Uruguay	1989	only	-	Mar	12	 0:00	0	-
+Rule	Uruguay	1989	only	-	Oct	29	 0:00	1:00	S
+Rule	Uruguay	1990	only	-	Mar	 4	 0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Montevideo	-3:44:44 -	LMT	1898 Jun 28
-			-3:45	-	MMT	1920 May  1	# Montevideo MT
-			-3:30	Uruguay	U%sT	1942 Dec 14	# Uruguay ST
-			-3:00	Uruguay	E%sT
+			-3:44:44 -	MMT	1920 May  1	# Montevideo MT
+			-3:30	Uruguay	UY%sT	1942 Dec 14	# Uruguay Time
+			-3:00	Uruguay	UY%sT
 
 # Venezuela
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Caracas	-4:27:44 -	LMT	1890
-			-4:28	-	CMT	1912 Feb 12  # Caracas Mean Time
-			-4:30	-	VZT	1965		# Venezuela Time
-			-4:00	-	AST
+			-4:27:44 -	CMT	1912 Feb 12  # Caracas Mean Time
+			-4:30	-	VET	1965	     # Venezuela Time
+			-4:00	-	VET
diff --git a/time/zic.c b/time/zic.c
index 0cec89369c..a354a1ece3 100644
--- a/time/zic.c
+++ b/time/zic.c
@@ -1,6 +1,6 @@
 #ifndef lint
 #ifndef NOID
-static char	elsieid[] = "@(#)zic.c	7.77";
+static char	elsieid[] = "@(#)zic.c	7.78";
 #endif /* !defined NOID */
 #endif /* !defined lint */
 
@@ -136,9 +136,9 @@ static void	usage P((void));
 static void	writezone P((const char * name));
 static int	yearistype P((int year, const char * type));
 
-#if !HAVE_STRERROR
+#if !(HAVE_STRERROR - 0)
 static char *	strerror P((int));
-#endif /* !HAVE_STRERROR */
+#endif /* !(HAVE_STRERROR - 0) */
 
 static int		charcnt;
 static int		errors;
@@ -375,19 +375,18 @@ char * const	ptr;
 ** Error handling.
 */
 
-#if ! HAVE_STRERROR
+#if !(HAVE_STRERROR - 0)
 static char *
 strerror(errnum)
 int	errnum;
 {
-	extern char *sys_errlist[];
-	extern int sys_nerr;
+	extern char *	sys_errlist[];
+	extern int	sys_nerr;
 
-	if (errnum > 0 && errnum <= sys_nerr)
-		return sys_errlist[errnum];
-	return "Unknown system error";
+	return (errnum > 0 && errnum <= sys_nerr) ?
+		sys_errlist[errnum] : "Unknown system error";
 }
-#endif /* ! HAVE_STRERROR */
+#endif /* !(HAVE_STRERROR - 0) */
 
 static void
 eats(name, num, rname, rnum)
diff --git a/version.c b/version.c
index a001398409..f55c41ed85 100644
--- a/version.c
+++ b/version.c
@@ -28,7 +28,7 @@ This is free software; see the source for copying conditions.\n\
 There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n\
 PARTICULAR PURPOSE.\n"
 #include "version-info.h"
-"Report bugs to <bug-glibc@gnu.ai.mit.edu>.\n";
+"Report bugs to <bug-glibc@prep.ai.mit.edu>.\n";
 
 #include <unistd.h>