aboutsummaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorsvn2git <svn2git@FreeBSD.org>1994-05-01 00:00:00 -0800
committersvn2git <svn2git@FreeBSD.org>1994-05-01 00:00:00 -0800
commita16f65c7d117419bd266c28a1901ef129a337569 (patch)
tree2626602f66dc3551e7a7c7bc9ad763c3bc7ab40a /share
parent8503f4f13f77abf7adc8f7e329c6f9c1d52b6a20 (diff)
downloadsrc-a16f65c7d117419bd266c28a1901ef129a337569.tar.gz
src-a16f65c7d117419bd266c28a1901ef129a337569.zip
Release FreeBSD 1.1release/1.1.0_cvs
This commit was manufactured to restore the state of the 1.1-RELEASE image. Releases prior to 5.3-RELEASE are omitting the secure/ and crypto/ subdirs.
Diffstat (limited to 'share')
-rw-r--r--share/dict/Makefile1
-rw-r--r--share/dict/propernames5
-rw-r--r--share/doc/ps1/00.contents/00.contents (renamed from share/doc/ps1/00.contents)0
-rw-r--r--share/doc/ps1/00.contents/Makefile10
-rw-r--r--share/doc/ps1/06.sysman/Makefile2
-rw-r--r--share/doc/ps1/06.sysman/a.t12
-rw-r--r--share/doc/ps1/08.ipc/1.t6
-rw-r--r--share/doc/ps1/08.ipc/2.t7
-rw-r--r--share/doc/ps1/08.ipc/3.t7
-rw-r--r--share/doc/ps1/08.ipc/4.t7
-rw-r--r--share/doc/ps1/08.ipc/5.t7
-rw-r--r--share/doc/ps1/08.ipc/Makefile2
-rw-r--r--share/doc/ps1/13.rcs/Makefile2
-rw-r--r--share/doc/ps1/14.sccs/Makefile2
-rw-r--r--share/doc/ps1/18.curses/Makefile12
-rw-r--r--share/doc/ps1/Makefile6
-rw-r--r--share/doc/ps1/Title/Makefile9
-rw-r--r--share/doc/ps1/Title/Title (renamed from share/doc/ps1/Title)0
-rw-r--r--share/doc/smm/00.contents/00.contents (renamed from share/doc/smm/00.contents)0
-rw-r--r--share/doc/smm/00.contents/Makefile10
-rw-r--r--share/doc/smm/01.setup/common/3.t7
-rw-r--r--share/doc/smm/01.setup/common/4.t7
-rw-r--r--share/doc/smm/01.setup/common/5.t7
-rw-r--r--share/doc/smm/01.setup/common/6.t5
-rw-r--r--share/doc/smm/01.setup/tahoe/0.t1
-rw-r--r--share/doc/smm/01.setup/tahoe/1.t5
-rw-r--r--share/doc/smm/01.setup/tahoe/2.t7
-rw-r--r--share/doc/smm/01.setup/tahoe/Makefile2
-rw-r--r--share/doc/smm/01.setup/tahoe/a.t4
-rw-r--r--share/doc/smm/01.setup/tahoe/b.t4
-rw-r--r--share/doc/smm/01.setup/vax/0.t1
-rw-r--r--share/doc/smm/01.setup/vax/1.t5
-rw-r--r--share/doc/smm/01.setup/vax/2.t7
-rw-r--r--share/doc/smm/01.setup/vax/Makefile2
-rw-r--r--share/doc/smm/01.setup/vax/a.t4
-rw-r--r--share/doc/smm/01.setup/vax/b.t4
-rw-r--r--share/doc/smm/01.setup/vax/c.t4
-rw-r--r--share/doc/smm/01.setup/vax/vaxhints.t3
-rw-r--r--share/doc/smm/02.config/0.t7
-rw-r--r--share/doc/smm/02.config/Makefile2
-rw-r--r--share/doc/smm/04.quotas/Makefile2
-rw-r--r--share/doc/smm/05.fsck/Makefile2
-rw-r--r--share/doc/smm/06.lpd/Makefile2
-rw-r--r--share/doc/smm/07.sendmailop/Makefile2
-rw-r--r--share/doc/smm/08.timedop/Makefile2
-rw-r--r--share/doc/smm/10.newsop/Makefile2
-rw-r--r--share/doc/smm/10.newsop/tmac.n1
-rw-r--r--share/doc/smm/11.named/Makefile2
-rw-r--r--share/doc/smm/11.named/named.local8
-rw-r--r--share/doc/smm/14.fastfs/Makefile2
-rw-r--r--share/doc/smm/15.net/Makefile2
-rw-r--r--share/doc/smm/16.sendmail/Makefile2
-rw-r--r--share/doc/smm/20.termdesc/Makefile2
-rw-r--r--share/doc/smm/22.timed/Makefile2
-rw-r--r--share/doc/smm/22.timed/timed.ms88
-rw-r--r--share/doc/smm/Makefile12
-rw-r--r--share/doc/smm/Title/Makefile9
-rw-r--r--share/doc/smm/Title/Title (renamed from share/doc/smm/Title)114
-rw-r--r--share/doc/usd/00.contents/00.contents (renamed from share/doc/usd/00.contents)0
-rw-r--r--share/doc/usd/00.contents/Makefile10
-rw-r--r--share/doc/usd/04.csh/Makefile2
-rw-r--r--share/doc/usd/07.Mail/Makefile2
-rw-r--r--share/doc/usd/09.newsread/Makefile2
-rw-r--r--share/doc/usd/10.etiq/Makefile2
-rw-r--r--share/doc/usd/11.notes/Makefile2
-rw-r--r--share/doc/usd/14.edit/Makefile2
-rw-r--r--share/doc/usd/14.edit/edittut.ms6
-rw-r--r--share/doc/usd/15.vi/Makefile2
-rw-r--r--share/doc/usd/15.vi/vi.apwh.ms46
-rw-r--r--share/doc/usd/15.vi/vi.summary1
-rw-r--r--share/doc/usd/16.ex/Makefile2
-rw-r--r--share/doc/usd/16.ex/ex.rm1
-rw-r--r--share/doc/usd/16.ex/ex.summary11
-rw-r--r--share/doc/usd/21.msdiffs/Makefile2
-rw-r--r--share/doc/usd/22.memacros/Makefile2
-rw-r--r--share/doc/usd/23.meref/Makefile2
-rw-r--r--share/doc/usd/33.rogue/Makefile2
-rw-r--r--share/doc/usd/34.trek/Makefile2
-rw-r--r--share/doc/usd/Makefile6
-rw-r--r--share/doc/usd/Title/Makefile9
-rw-r--r--share/doc/usd/Title/Title (renamed from share/doc/usd/Title)0
-rw-r--r--share/man/man1/intro.12
-rw-r--r--share/man/man3/Makefile6
-rw-r--r--share/man/man3/queue.3454
-rw-r--r--share/man/man4/Makefile10
-rw-r--r--share/man/man4/cd.4179
-rw-r--r--share/man/man4/ch.480
-rw-r--r--share/man/man4/clnp.44
-rw-r--r--share/man/man4/ddb.410
-rw-r--r--share/man/man4/man4.i386/Makefile6
-rw-r--r--share/man/man4/man4.i386/keyboard.49
-rw-r--r--share/man/man4/man4.i386/lpt.428
-rw-r--r--share/man/man4/man4.i386/screen.412
-rw-r--r--share/man/man4/man4.i386/sio.4150
-rw-r--r--share/man/man4/man4.i386/spkr.4246
-rw-r--r--share/man/man4/route.48
-rw-r--r--share/man/man4/scsi.4117
-rw-r--r--share/man/man4/sd.428
-rw-r--r--share/man/man4/spp.42
-rw-r--r--share/man/man4/st.4218
-rw-r--r--share/man/man4/su.457
-rw-r--r--share/man/man4/termios.48
-rw-r--r--share/man/man4/tp.44
-rw-r--r--share/man/man4/uk.460
-rw-r--r--share/man/man4/unix.45
-rw-r--r--share/man/man5/a.out.519
-rw-r--r--share/man/man5/dir.54
-rw-r--r--share/man/man5/fs.52
-rw-r--r--share/man/man5/group.52
-rw-r--r--share/man/man5/remote.51
-rw-r--r--share/man/man7/environ.72
-rw-r--r--share/man/man7/mdoc.samples.710
-rw-r--r--share/misc/inter.phone8
-rw-r--r--share/mk/Makefile7
-rw-r--r--share/mk/bsd.README4
-rw-r--r--share/mk/bsd.dep.mk47
-rw-r--r--share/mk/bsd.doc.mk23
-rw-r--r--share/mk/bsd.lib.mk198
-rw-r--r--share/mk/bsd.man.mk3
-rw-r--r--share/mk/bsd.own.mk2
-rw-r--r--share/mk/bsd.prog.mk40
-rw-r--r--share/mk/bsd.subdir.mk3
-rw-r--r--share/mk/bsd.subdir_ports.mk184
-rw-r--r--share/mk/sys.mk12
-rwxr-xr-xshare/syscons/examples/setrus17
-rw-r--r--share/syscons/keymaps/Makefile7
-rw-r--r--share/syscons/keymaps/fff127
-rw-r--r--share/syscons/keymaps/ru.koi8-r270
-rw-r--r--share/syscons/keymaps/ru.koi8.mapbin2562 -> 0 bytes
-rw-r--r--share/syscons/keymaps/rus.koi8.mapbin2562 -> 0 bytes
-rw-r--r--share/syscons/scrnmaps/Makefile15
-rw-r--r--share/syscons/scrnmaps/koi8-r2alt60
-rw-r--r--share/syscons/scrnmaps/koi82alt.scrbin256 -> 0 bytes
-rw-r--r--share/syscons/scrnmaps/mkscrfil.c50
-rw-r--r--share/termcap/Makefile2
-rw-r--r--share/termcap/termcap.src35
-rw-r--r--share/tmac/doc-common32
-rw-r--r--share/tmac/doc-syms42
l---------share/tmac/strip.sed1
-rw-r--r--share/zoneinfo/Makefile8
-rw-r--r--share/zoneinfo/README72
-rw-r--r--share/zoneinfo/Theory120
-rw-r--r--share/zoneinfo/datfiles/africa563
-rw-r--r--share/zoneinfo/datfiles/antarctica17
-rw-r--r--share/zoneinfo/datfiles/asia865
-rw-r--r--share/zoneinfo/datfiles/australasia758
-rw-r--r--share/zoneinfo/datfiles/backward63
-rw-r--r--share/zoneinfo/datfiles/etcetera2
-rw-r--r--share/zoneinfo/datfiles/europe1802
-rw-r--r--share/zoneinfo/datfiles/factory5
-rw-r--r--share/zoneinfo/datfiles/leapseconds15
-rw-r--r--share/zoneinfo/datfiles/northamerica706
-rw-r--r--share/zoneinfo/datfiles/pacificnew37
-rw-r--r--share/zoneinfo/datfiles/russia18
-rw-r--r--share/zoneinfo/datfiles/solar872
-rw-r--r--share/zoneinfo/datfiles/solar882
-rw-r--r--share/zoneinfo/datfiles/solar892
-rw-r--r--share/zoneinfo/datfiles/southamerica338
-rw-r--r--share/zoneinfo/datfiles/systemv2
-rwxr-xr-xshare/zoneinfo/datfiles/yearistype18
-rw-r--r--share/zoneinfo/ialloc.c77
-rw-r--r--share/zoneinfo/private.h185
-rw-r--r--share/zoneinfo/scheck.c61
-rw-r--r--share/zoneinfo/tzfile.5159
-rw-r--r--share/zoneinfo/usno1988111
-rw-r--r--share/zoneinfo/usno1989452
-rw-r--r--share/zoneinfo/zic.861
-rw-r--r--share/zoneinfo/zic.c625
168 files changed, 8788 insertions, 1857 deletions
diff --git a/share/dict/Makefile b/share/dict/Makefile
index 35e7d019d672..63841f931058 100644
--- a/share/dict/Makefile
+++ b/share/dict/Makefile
@@ -10,5 +10,6 @@ all clean cleandir depend lint tags:
install:
install -c -o ${BINOWN} -g ${BINGRP} -m 444 ${FILES} \
${DESTDIR}${BINDIR}/dict
+ (cd ${DESTDIR}${BINDIR}/dict; rm -f words; ln -s web2 words)
.include <bsd.prog.mk>
diff --git a/share/dict/propernames b/share/dict/propernames
index 988023b4ee13..adbe9511bb41 100644
--- a/share/dict/propernames
+++ b/share/dict/propernames
@@ -415,11 +415,6 @@ Helge
Henry
Herb
Herbert
-UPTOHERE
-
-
-
-
Herman
Herve
Hienz
diff --git a/share/doc/ps1/00.contents b/share/doc/ps1/00.contents/00.contents
index 18062ea85314..18062ea85314 100644
--- a/share/doc/ps1/00.contents
+++ b/share/doc/ps1/00.contents/00.contents
diff --git a/share/doc/ps1/00.contents/Makefile b/share/doc/ps1/00.contents/Makefile
new file mode 100644
index 000000000000..3a7f865add0b
--- /dev/null
+++ b/share/doc/ps1/00.contents/Makefile
@@ -0,0 +1,10 @@
+VOLUME= ps1
+DOC= 00.contents
+
+SRCS= 00.contents
+MACROS= -ms
+
+.include <bsd.doc.mk>
+
+${DOC}.${PRINTER}: ${SRCS}
+ ( cd ${.CURDIR} ; ${ROFF} ${SRCS} ) > ${.TARGET}
diff --git a/share/doc/ps1/06.sysman/Makefile b/share/doc/ps1/06.sysman/Makefile
index f177ab9d9844..84d0c9f28783 100644
--- a/share/doc/ps1/06.sysman/Makefile
+++ b/share/doc/ps1/06.sysman/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.2 (Berkeley) 6/30/90
# Makefile,v 1.5 1993/07/31 15:33:55 mycroft Exp
-DIR= ps1/06.sysman
+VOLUME= ps1
DOC= 06.sysman
SRCS= 0.t 1.0.t 1.1.t 1.2.t 1.3.t 1.4.t 1.5.t 1.6.t 1.7.t \
diff --git a/share/doc/ps1/06.sysman/a.t b/share/doc/ps1/06.sysman/a.t
index 4b1223176e7d..5529d08fd0f3 100644
--- a/share/doc/ps1/06.sysman/a.t
+++ b/share/doc/ps1/06.sysman/a.t
@@ -230,13 +230,13 @@ setsockopt set socket option
.in -5
.h 2.4 "Terminals, block and character devices
.in +5
-.TS
-lw(1.6i) aw(3i).
-.TE
+.\".TS
+.\"lw(1.6i) aw(3i).
+.\".TE
.in -5
.h 2.5 "Processes and kernel hooks
.in +5
-.TS
-lw(1.6i) aw(3i).
-.TE
+.\".TS
+.\"lw(1.6i) aw(3i).
+.\".TE
.in -5
diff --git a/share/doc/ps1/08.ipc/1.t b/share/doc/ps1/08.ipc/1.t
index 28379363a4b8..e500a6df76b2 100644
--- a/share/doc/ps1/08.ipc/1.t
+++ b/share/doc/ps1/08.ipc/1.t
@@ -36,16 +36,18 @@
.\".ds RF "Leffler/Fabry/Joy
.\".ds LF "\*(DY
.\".ds CF "
-.nr H1 1
+.\".nr H1 1
.LP
.bp
.LG
.B
.ce
-1. INTRODUCTION
+.NH 1
+INTRODUCTION
.sp 2
.R
.NL
+.PP
One of the most important additions to UNIX in 4.2BSD was interprocess
communication.
These facilities were the result of
diff --git a/share/doc/ps1/08.ipc/2.t b/share/doc/ps1/08.ipc/2.t
index bfa3ab6fb9e7..3c918e850cee 100644
--- a/share/doc/ps1/08.ipc/2.t
+++ b/share/doc/ps1/08.ipc/2.t
@@ -33,13 +33,14 @@
.\"
.\".ds RH "Basics
.bp
-.nr H1 2
-.nr H2 0
+.\".nr H1 2
+.\".nr H2 0
.bp
.LG
.B
.ce
-2. BASICS
+.NH 1
+BASICS
.sp 2
.R
.NL
diff --git a/share/doc/ps1/08.ipc/3.t b/share/doc/ps1/08.ipc/3.t
index 78966f1487a6..c6978728b013 100644
--- a/share/doc/ps1/08.ipc/3.t
+++ b/share/doc/ps1/08.ipc/3.t
@@ -33,13 +33,14 @@
.\"
.\".ds RH "Network Library Routines
.bp
-.nr H1 3
-.nr H2 0
+.\".nr H1 3
+.\".nr H2 0
.bp
.LG
.B
.ce
-3. NETWORK LIBRARY ROUTINES
+.NH 1
+NETWORK LIBRARY ROUTINES
.sp 2
.R
.NL
diff --git a/share/doc/ps1/08.ipc/4.t b/share/doc/ps1/08.ipc/4.t
index 7ce9b044a31e..9fc7a774ce49 100644
--- a/share/doc/ps1/08.ipc/4.t
+++ b/share/doc/ps1/08.ipc/4.t
@@ -33,14 +33,15 @@
.\"
.\".ds RH "Client/Server Model
.bp
-.nr H1 4
-.nr H2 0
+.\".nr H1 4
+.\".nr H2 0
.sp 8i
.bp
.LG
.B
.ce
-4. CLIENT/SERVER MODEL
+.NH 1
+CLIENT/SERVER MODEL
.sp 2
.R
.NL
diff --git a/share/doc/ps1/08.ipc/5.t b/share/doc/ps1/08.ipc/5.t
index 11b195d14111..f106a3c00b05 100644
--- a/share/doc/ps1/08.ipc/5.t
+++ b/share/doc/ps1/08.ipc/5.t
@@ -33,12 +33,13 @@
.\"
.\".ds RH "Advanced Topics
.bp
-.nr H1 5
-.nr H2 0
+.\".nr H1 5
+.\".nr H2 0
.LG
.B
.ce
-5. ADVANCED TOPICS
+.NH 1
+ADVANCED TOPICS
.sp 2
.R
.NL
diff --git a/share/doc/ps1/08.ipc/Makefile b/share/doc/ps1/08.ipc/Makefile
index 3bdacaefa0bf..76075f8d5a07 100644
--- a/share/doc/ps1/08.ipc/Makefile
+++ b/share/doc/ps1/08.ipc/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 1.4 (Berkeley) 6/30/90
# Makefile,v 1.5 1993/07/31 15:33:44 mycroft Exp
-DIR= ps1/08.ipc
+VOLUME= ps1
DOC= 08.ipc
SRCS= 0.t 1.t 2.t 3.t 4.t 5.t
diff --git a/share/doc/ps1/13.rcs/Makefile b/share/doc/ps1/13.rcs/Makefile
index c8fddff12662..26fc005af959 100644
--- a/share/doc/ps1/13.rcs/Makefile
+++ b/share/doc/ps1/13.rcs/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.2 (Berkeley) 6/30/90
# Makefile,v 1.5 1993/07/31 15:33:38 mycroft Exp
-DIR= ps1/13.rcs
+VOLUME= ps1
DOC= 13.rcs
MSRC= rcs.man
diff --git a/share/doc/ps1/14.sccs/Makefile b/share/doc/ps1/14.sccs/Makefile
index d41fca6b7683..051b308b6e8b 100644
--- a/share/doc/ps1/14.sccs/Makefile
+++ b/share/doc/ps1/14.sccs/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.2 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:33:32 mycroft Exp
-DIR= ps1/14.sccs
+VOLUME= ps1
DOC= 14.sccs
SRCS= sccs.me
diff --git a/share/doc/ps1/18.curses/Makefile b/share/doc/ps1/18.curses/Makefile
index 4bcd1a52b5f7..8c7ddb459716 100644
--- a/share/doc/ps1/18.curses/Makefile
+++ b/share/doc/ps1/18.curses/Makefile
@@ -1,13 +1,15 @@
# from: @(#)Makefile 6.4 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:33:26 mycroft Exp
-DIR= ps1/18.curses
+VOLUME= ps1
DOC= 18.curses
SRCS= Master
MACROS= -me
-CLEANFILES+=win_st.gr twinkle1.gr twinkle2.gr life.gr intro.2.tbl appen.A.tbl
+CLEANFILES+=${.CURDIR}/win_st.gr ${.CURDIR}/twinkle1.gr \
+ ${.CURDIR}/twinkle2.gr ${.CURDIR}/life.gr \
+ ${.CURDIR}/intro.2.tbl ${.CURDIR}/appen.A.tbl
.include <bsd.doc.mk>
@@ -27,7 +29,7 @@ ${DOC}.${PRINTER}: ${SRCS} win_st.gr twinkle1.gr twinkle2.gr life.gr \
# Don't re-run vgrind unless you want to patch the output files.
VFONT= /usr/libexec/vfontedpr
.c.gr:
- ( cd ${.CURDIR} ; ${VFONT} $*.c ) | grep -v "^'wh" > $*.gr
+ cd ${.CURDIR} ; ${VFONT} $*.c | grep -v "^'wh" > $*.gr
.VPATH: ${CURDIR}/obj
@@ -36,7 +38,7 @@ appen.B: win_st.gr
appen.C: twinkle1.gr life.gr twinkle2.gr
intro.2.tbl: intro.2
- ( cd ${.CURDIR} ; ${TBL} intro.2 ) > intro.2.tbl
+ cd ${.CURDIR} ; ${TBL} intro.2 > intro.2.tbl
appen.A.tbl: appen.A
- ( cd ${.CURDIR} ; ${TBL} appen.A ) > appen.A.tbl
+ cd ${.CURDIR} ; ${TBL} appen.A > appen.A.tbl
diff --git a/share/doc/ps1/Makefile b/share/doc/ps1/Makefile
index a2513947823b..b521d4994f68 100644
--- a/share/doc/ps1/Makefile
+++ b/share/doc/ps1/Makefile
@@ -7,8 +7,8 @@
# Broken: 04.pascal 07.ipctut
BINDIR= /usr/share/doc/ps1
-FILES= 00.contents Makefile Title
-SUBDIR= 06.sysman \
+SUBDIR= Title 00.contents \
+ 06.sysman \
08.ipc 13.rcs 14.sccs \
18.curses
@@ -21,7 +21,5 @@ beforeinstall:
else \
true ; \
fi
- install -c -o ${BINOWN} -g ${BINGRP} -m 444 ${FILES} \
- ${DESTDIR}${BINDIR}
.include <bsd.subdir.mk>
diff --git a/share/doc/ps1/Title/Makefile b/share/doc/ps1/Title/Makefile
new file mode 100644
index 000000000000..34fdca3b9f9c
--- /dev/null
+++ b/share/doc/ps1/Title/Makefile
@@ -0,0 +1,9 @@
+VOLUME= ps1
+DOC= Title
+
+SRCS= Title
+
+.include <bsd.doc.mk>
+
+${DOC}.${PRINTER}: ${SRCS}
+ ( cd ${.CURDIR} ; ${ROFF} ${SRCS} ) > ${.TARGET}
diff --git a/share/doc/ps1/Title b/share/doc/ps1/Title/Title
index 599737b76264..599737b76264 100644
--- a/share/doc/ps1/Title
+++ b/share/doc/ps1/Title/Title
diff --git a/share/doc/smm/00.contents b/share/doc/smm/00.contents/00.contents
index 908c4ff6da3b..908c4ff6da3b 100644
--- a/share/doc/smm/00.contents
+++ b/share/doc/smm/00.contents/00.contents
diff --git a/share/doc/smm/00.contents/Makefile b/share/doc/smm/00.contents/Makefile
new file mode 100644
index 000000000000..e191b184eba0
--- /dev/null
+++ b/share/doc/smm/00.contents/Makefile
@@ -0,0 +1,10 @@
+VOLUME= smm
+DOC= 00.contents
+
+SRCS= 00.contents
+MACROS= -ms
+
+.include <bsd.doc.mk>
+
+${DOC}.${PRINTER}: ${SRCS}
+ ( cd ${.CURDIR} ; ${ROFF} ${SRCS} ) > ${.TARGET}
diff --git a/share/doc/smm/01.setup/common/3.t b/share/doc/smm/01.setup/common/3.t
index 395cca0813c0..1ac6a4377783 100644
--- a/share/doc/smm/01.setup/common/3.t
+++ b/share/doc/smm/01.setup/common/3.t
@@ -36,13 +36,14 @@
.ds RH "Upgrading a 4.2BSD or \*(Ps System
.ds CF \*(DY
.LP
-.nr H1 3
-.nr H2 0
+.\".nr H1 3
+.\".nr H2 0
.bp
.LG
.B
.ce
-3. UPGRADING A 4.2BSD OR \*(Ps SYSTEM
+.NH 1
+UPGRADING A 4.2BSD OR \*(Ps SYSTEM
.sp 2
.R
.NL
diff --git a/share/doc/smm/01.setup/common/4.t b/share/doc/smm/01.setup/common/4.t
index 334a882d2d15..74bd2153280b 100644
--- a/share/doc/smm/01.setup/common/4.t
+++ b/share/doc/smm/01.setup/common/4.t
@@ -35,15 +35,16 @@
\fI\\$1\fP\|\\$2
..
.ds LH "Installing/Operating \*(4B
-.nr H1 4
-.nr H2 0
+.\".nr H1 4
+.\".nr H2 0
.ds CF \*(DY
.ds RH "System setup
.bp
.LG
.B
.ce
-4. SYSTEM SETUP
+.NH 1
+SYSTEM SETUP
.sp 2
.R
.NL
diff --git a/share/doc/smm/01.setup/common/5.t b/share/doc/smm/01.setup/common/5.t
index 614a08e80095..21c886f184fc 100644
--- a/share/doc/smm/01.setup/common/5.t
+++ b/share/doc/smm/01.setup/common/5.t
@@ -37,13 +37,14 @@
.ds RH Network setup
.ds CF \*(DY
.LP
-.nr H1 5
-.nr H2 0
+.\".nr H1 5
+.\".nr H2 0
.bp
.LG
.B
.ce
-5. NETWORK SETUP
+.NH 1
+NETWORK SETUP
.sp 2
.R
.NL
diff --git a/share/doc/smm/01.setup/common/6.t b/share/doc/smm/01.setup/common/6.t
index 3b8067219c33..134085a31dc9 100644
--- a/share/doc/smm/01.setup/common/6.t
+++ b/share/doc/smm/01.setup/common/6.t
@@ -35,14 +35,15 @@
\fI\\$1\fP\|\\$2
..
.ds LH "Installing/Operating \*(4B
-.nr H1 6
-.nr H2 0
+.\".nr H1 6
+.\".nr H2 0
.ds RH "System Operation
.ds CF \*(DY
.bp
.LG
.B
.ce
+.NH 1
6. SYSTEM OPERATION
.sp 2
.R
diff --git a/share/doc/smm/01.setup/tahoe/0.t b/share/doc/smm/01.setup/tahoe/0.t
index 7672a7aab07f..9bc8d6838221 100644
--- a/share/doc/smm/01.setup/tahoe/0.t
+++ b/share/doc/smm/01.setup/tahoe/0.t
@@ -32,6 +32,7 @@
.\" @(#)0.t 1.6 (Berkeley) 5/7/91
.\"
.nr Th 1 \" Tahoe version
+.nr Vx 0
.ds Th Tahoe
.ds Ux \s-1UNIX\s0
.ds Bs \s-1BSD\s0
diff --git a/share/doc/smm/01.setup/tahoe/1.t b/share/doc/smm/01.setup/tahoe/1.t
index 5db94647393e..2c12cedbaad7 100644
--- a/share/doc/smm/01.setup/tahoe/1.t
+++ b/share/doc/smm/01.setup/tahoe/1.t
@@ -37,12 +37,13 @@
.ds RH Introduction
.ds CF \*(DY
.LP
-.nr H1 1
+.\".nr H1 1
.bp
.LG
.B
.ce
-1. INTRODUCTION
+.NH 1
+INTRODUCTION
.sp 2
.R
.NL
diff --git a/share/doc/smm/01.setup/tahoe/2.t b/share/doc/smm/01.setup/tahoe/2.t
index 38b699016aa7..b6e708123f51 100644
--- a/share/doc/smm/01.setup/tahoe/2.t
+++ b/share/doc/smm/01.setup/tahoe/2.t
@@ -37,13 +37,14 @@
.ds RH Bootstrapping
.ds CF \*(DY
.bp
-.nr H1 2
-.nr H2 0
+.\".nr H1 2
+.\".nr H2 0
.bp
.LG
.B
.ce
-2. BOOTSTRAP PROCEDURE
+.NH 1
+BOOTSTRAP PROCEDURE
.sp 2
.R
.NL
diff --git a/share/doc/smm/01.setup/tahoe/Makefile b/share/doc/smm/01.setup/tahoe/Makefile
index 9ecdc69c32b0..2ee3d5bcbe94 100644
--- a/share/doc/smm/01.setup/tahoe/Makefile
+++ b/share/doc/smm/01.setup/tahoe/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 1.3 (Berkeley) 5/7/91
# Makefile,v 1.2 1993/07/31 15:33:14 mycroft Exp
-DIR= smm/01.setup/tahoe
+VOLUME= smm
DOC= 01.setup
RSRC= ../common/renohints.t
diff --git a/share/doc/smm/01.setup/tahoe/a.t b/share/doc/smm/01.setup/tahoe/a.t
index a202c2ae6088..ce42f2dfe3c8 100644
--- a/share/doc/smm/01.setup/tahoe/a.t
+++ b/share/doc/smm/01.setup/tahoe/a.t
@@ -35,8 +35,8 @@
\fI\\$1\fP\|\\$2
..
.ds LH "Installing/Operating \*(4B
-.nr H1 6
-.nr H2 0
+.\".nr H1 6
+.\".nr H2 0
.ds RH "Appendix A \- bootstrap details
.ds CF \*(DY
.bp
diff --git a/share/doc/smm/01.setup/tahoe/b.t b/share/doc/smm/01.setup/tahoe/b.t
index 11aa172af2d7..81263be2860a 100644
--- a/share/doc/smm/01.setup/tahoe/b.t
+++ b/share/doc/smm/01.setup/tahoe/b.t
@@ -35,8 +35,8 @@
\fI\\$1\fP\|\\$2
..
.ds LH "Installing/Operating \*(4B
-.nr H1 6
-.nr H2 0
+.\".nr H1 6
+.\".nr H2 0
.ds RH "Appendix B \- installation troubleshooting
.ds CF \*(DY
.bp
diff --git a/share/doc/smm/01.setup/vax/0.t b/share/doc/smm/01.setup/vax/0.t
index b2acbd48b46c..9101bfc48562 100644
--- a/share/doc/smm/01.setup/vax/0.t
+++ b/share/doc/smm/01.setup/vax/0.t
@@ -32,6 +32,7 @@
.\" @(#)0.t 6.6 (Berkeley) 5/7/91
.\"
.nr Vx 1 \" VAX version
+.nr Th 0
.ds Vx \s-1VAX\s0
.ds Ux \s-1UNIX\s0
.ds Bs \s-1BSD\s0
diff --git a/share/doc/smm/01.setup/vax/1.t b/share/doc/smm/01.setup/vax/1.t
index 76c650e1059e..10592651123d 100644
--- a/share/doc/smm/01.setup/vax/1.t
+++ b/share/doc/smm/01.setup/vax/1.t
@@ -37,12 +37,13 @@
.ds RH Introduction
.ds CF \*(DY
.LP
-.nr H1 1
+.\".nr H1 1
.bp
.LG
.B
.ce
-1. INTRODUCTION
+.NH 1
+INTRODUCTION
.sp 2
.R
.NL
diff --git a/share/doc/smm/01.setup/vax/2.t b/share/doc/smm/01.setup/vax/2.t
index 3969b07f0953..df8fe204cd6c 100644
--- a/share/doc/smm/01.setup/vax/2.t
+++ b/share/doc/smm/01.setup/vax/2.t
@@ -37,13 +37,14 @@
.ds RH Bootstrapping
.ds CF \*(DY
.bp
-.nr H1 2
-.nr H2 0
+.\".nr H1 2
+.\".nr H2 0
.bp
.LG
.B
.ce
-2. BOOTSTRAP PROCEDURE
+.NH 1
+BOOTSTRAP PROCEDURE
.sp 2
.R
.NL
diff --git a/share/doc/smm/01.setup/vax/Makefile b/share/doc/smm/01.setup/vax/Makefile
index 272dc56921cc..5c82184847d9 100644
--- a/share/doc/smm/01.setup/vax/Makefile
+++ b/share/doc/smm/01.setup/vax/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.3 (Berkeley) 5/7/91
# Makefile,v 1.2 1993/07/31 15:33:08 mycroft Exp
-DIR= smm/01.setup/vax
+VOLUME= smm
DOC= 01.setup
RSRC= ../common/renohints.t
diff --git a/share/doc/smm/01.setup/vax/a.t b/share/doc/smm/01.setup/vax/a.t
index b8c9b5c0f7ad..d2fe0a678c1b 100644
--- a/share/doc/smm/01.setup/vax/a.t
+++ b/share/doc/smm/01.setup/vax/a.t
@@ -35,8 +35,8 @@
\fI\\$1\fP\|\\$2
..
.ds LH "Installing/Operating \*(4B
-.nr H1 6
-.nr H2 0
+.\".nr H1 6
+.\".nr H2 0
.ds RH "Appendix A \- bootstrap details
.ds CF \*(DY
.bp
diff --git a/share/doc/smm/01.setup/vax/b.t b/share/doc/smm/01.setup/vax/b.t
index d79e2337287e..d5d69630a86b 100644
--- a/share/doc/smm/01.setup/vax/b.t
+++ b/share/doc/smm/01.setup/vax/b.t
@@ -35,8 +35,8 @@
\fI\\$1\fP\|\\$2
..
.ds LH "Installing/Operating \*(4B
-.nr H1 6
-.nr H2 0
+.\".nr H1 6
+.\".nr H2 0
.ds RH "Appendix B \- loading the tape monitor
.ds CF \*(DY
.bp
diff --git a/share/doc/smm/01.setup/vax/c.t b/share/doc/smm/01.setup/vax/c.t
index 3667b847a669..c504eed03afb 100644
--- a/share/doc/smm/01.setup/vax/c.t
+++ b/share/doc/smm/01.setup/vax/c.t
@@ -35,8 +35,8 @@
\fI\\$1\fP\|\\$2
..
.ds LH "Installing/Operating \*(4B
-.nr H1 6
-.nr H2 0
+.\".nr H1 6
+.\".nr H2 0
.ds RH "Appendix C \- installation troubleshooting
.ds CF \*(DY
.bp
diff --git a/share/doc/smm/01.setup/vax/vaxhints.t b/share/doc/smm/01.setup/vax/vaxhints.t
index 6ef88ae1efb9..b727c83be803 100644
--- a/share/doc/smm/01.setup/vax/vaxhints.t
+++ b/share/doc/smm/01.setup/vax/vaxhints.t
@@ -35,6 +35,7 @@
.ds rq ''
.ds 4B 4.3BSD-tahoe
.nr Vx 1 \" VAX version
+.nr Th 0
.ds Mc VAX
.ds mC vax
.ds Dk hp
@@ -227,7 +228,7 @@ compatible between 4.2BSD, \*(Ps, and \*(4B,
though running a \*(4B file system under older systems
may cause more of the above
messages to be generated the next time it is \fIfsck\fP'ed on \*(4B.
-.NH 2
+.SH
Hints on converting from 4.3BSD to \*(4B
.PP
The largest visible change between 4.3BSD to \*(4B
diff --git a/share/doc/smm/02.config/0.t b/share/doc/smm/02.config/0.t
index f262c5342ac2..0edf51f72757 100644
--- a/share/doc/smm/02.config/0.t
+++ b/share/doc/smm/02.config/0.t
@@ -31,6 +31,7 @@
.\"
.\" @(#)0.t 6.4 (Berkeley) 4/17/91
.\"
+.nr GA 0
.bd S B 3
.de UX
.ie \\n(GA>0 \\$2UNIX\\$1
@@ -38,10 +39,8 @@
.if n \\$2UNIX\\$1*
.if t \\$2UNIX\\$1\\f1\(dg\\fP
.FS
-.if n *UNIX
-.if t \(dgUNIX
-.ie \\$3=1 is a Footnote of Bell Laboratories.
-.el is a Trademark of Bell Laboratories.
+.if n *UNIX is a Trademark of Bell Laboratories.
+.if t \(dgUNIX is a Trademark of Bell Laboratories.
.FE
.nr GA 1\}
..
diff --git a/share/doc/smm/02.config/Makefile b/share/doc/smm/02.config/Makefile
index 59b81650becf..5793a185ce8c 100644
--- a/share/doc/smm/02.config/Makefile
+++ b/share/doc/smm/02.config/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.3 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:32:49 mycroft Exp
-DIR= smm/02.config
+VOLUME= smm
DOC= 02.config
SRCS= 0.t 1.t 2.t 3.t 4.t 5.t 6.t a.t b.t c.t d.t e.t
diff --git a/share/doc/smm/04.quotas/Makefile b/share/doc/smm/04.quotas/Makefile
index c832258d3eb5..2a7450ec8f67 100644
--- a/share/doc/smm/04.quotas/Makefile
+++ b/share/doc/smm/04.quotas/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.2 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:32:41 mycroft Exp
-DIR= smm/04.quotas
+VOLUME= smm
DOC= 04.quotas
SRCS= quotas.ms
diff --git a/share/doc/smm/05.fsck/Makefile b/share/doc/smm/05.fsck/Makefile
index a08844477db8..6356d4fcc348 100644
--- a/share/doc/smm/05.fsck/Makefile
+++ b/share/doc/smm/05.fsck/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 4.3 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:32:32 mycroft Exp
-DIR= smm/05.fsck
+VOLUME= smm
DOC= 05.fsck
SRCS= 0.t 1.t 2.t 3.t 4.t
diff --git a/share/doc/smm/06.lpd/Makefile b/share/doc/smm/06.lpd/Makefile
index 7408218482e8..774dd9eb0123 100644
--- a/share/doc/smm/06.lpd/Makefile
+++ b/share/doc/smm/06.lpd/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.3 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:32:23 mycroft Exp
-DIR= smm/06.lpd
+VOLUME= smm
DOC= 06.lpd
SRCS= 0.t 1.t 2.t 3.t 4.t 5.t 6.t 7.t
diff --git a/share/doc/smm/07.sendmailop/Makefile b/share/doc/smm/07.sendmailop/Makefile
index c1a5bd6e7341..a808923b0c0e 100644
--- a/share/doc/smm/07.sendmailop/Makefile
+++ b/share/doc/smm/07.sendmailop/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 5.2 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:32:13 mycroft Exp
-DIR= smm/07.sendmailop
+VOLUME= smm
DOC= 07.sendmailop
SRCS= op.me
diff --git a/share/doc/smm/08.timedop/Makefile b/share/doc/smm/08.timedop/Makefile
index a6ec7131df0e..131f14159f9a 100644
--- a/share/doc/smm/08.timedop/Makefile
+++ b/share/doc/smm/08.timedop/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.3 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:32:03 mycroft Exp
-DIR= smm/08.timedop
+VOLUME= smm
DOC= 08.timedop
SRCS= timed.ms
diff --git a/share/doc/smm/10.newsop/Makefile b/share/doc/smm/10.newsop/Makefile
index 04cd3b602a25..fe71fa9f7322 100644
--- a/share/doc/smm/10.newsop/Makefile
+++ b/share/doc/smm/10.newsop/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 5.2 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:31:54 mycroft Exp
-DIR= smm/10.newsop
+VOLUME= smm
DOC= 10.newsop
SSRC= tmac.n standard.mn
diff --git a/share/doc/smm/10.newsop/tmac.n b/share/doc/smm/10.newsop/tmac.n
index bdcd22562552..a51e0008d2f8 100644
--- a/share/doc/smm/10.newsop/tmac.n
+++ b/share/doc/smm/10.newsop/tmac.n
@@ -648,3 +648,4 @@
.\" couple of miscellaneous requests
.bd S 3 3 \" embolden special font chars if B
.hy 2 \" don't hyphenate last lines
+.za \" save everything
diff --git a/share/doc/smm/11.named/Makefile b/share/doc/smm/11.named/Makefile
index ef461a562969..8030b70bb530 100644
--- a/share/doc/smm/11.named/Makefile
+++ b/share/doc/smm/11.named/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.4 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:31:45 mycroft Exp
-DIR= smm/11.named
+VOLUME= smm
DOC= 11.named
SRCS= 00macs.me 00title.me intro.me build.me types.me setup.me \
diff --git a/share/doc/smm/11.named/named.local b/share/doc/smm/11.named/named.local
index 45de227de762..02b84b01ed64 100644
--- a/share/doc/smm/11.named/named.local
+++ b/share/doc/smm/11.named/named.local
@@ -38,10 +38,10 @@
l l l l.
@ IN SOA ucbvax\fB.\fPBerkeley\fB.\fPEdu. kjd\fB.\fPucbvax\fB.\fPBerkeley\fB.\fPEdu\fB.\fP (
1 ; Serial
- 10800 ; Refresh
- 1800 ; Retry
- 3600000 ; Expire
- 86400 ) ; Minimum
+ 10800 ; Refresh
+ 1800 ; Retry
+ 3600000 ; Expire
+ 86400 ) ; Minimum
IN NS ucbvax\fB.\fPBerkeley\fB.\fPEdu\fB.\fP
1 IN PTR localhost\fB.\fP
.TE
diff --git a/share/doc/smm/14.fastfs/Makefile b/share/doc/smm/14.fastfs/Makefile
index ba3c93ddca51..dac735b2d2f8 100644
--- a/share/doc/smm/14.fastfs/Makefile
+++ b/share/doc/smm/14.fastfs/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 5.4 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:31:35 mycroft Exp
-DIR= smm/14.fastfs
+VOLUME= smm
DOC= 14.fastfs
SRCS= 0.t 1.t 2.t 3.t 4.t 5.t 6.t
diff --git a/share/doc/smm/15.net/Makefile b/share/doc/smm/15.net/Makefile
index af996f4d0bd0..ae1cfa0c442f 100644
--- a/share/doc/smm/15.net/Makefile
+++ b/share/doc/smm/15.net/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.3 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:31:26 mycroft Exp
-DIR= smm/15.net
+VOLUME= smm
DOC= 15.net
SRCS= 0.t 1.t 2.t 3.t 4.t 5.t 6.t 7.t 8.t 9.t a.t b.t c.t d.t e.t f.t
diff --git a/share/doc/smm/16.sendmail/Makefile b/share/doc/smm/16.sendmail/Makefile
index a50c4a679c86..716d7aa0e5c9 100644
--- a/share/doc/smm/16.sendmail/Makefile
+++ b/share/doc/smm/16.sendmail/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 5.3 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:31:17 mycroft Exp
-DIR= smm/16.sendmail
+VOLUME= smm
DOC= 16.sendmail
SRCS= intro.me
diff --git a/share/doc/smm/20.termdesc/Makefile b/share/doc/smm/20.termdesc/Makefile
index f0f41d5b160a..80755bcdb5fc 100644
--- a/share/doc/smm/20.termdesc/Makefile
+++ b/share/doc/smm/20.termdesc/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.2 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:31:08 mycroft Exp
-DIR= smm/20.termdesc
+VOLUME= smm
DOC= 20.termdesc
SRCS= termdesc.me
diff --git a/share/doc/smm/22.timed/Makefile b/share/doc/smm/22.timed/Makefile
index 6c127d185566..eeb0bf0fa971 100644
--- a/share/doc/smm/22.timed/Makefile
+++ b/share/doc/smm/22.timed/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.3 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:30:59 mycroft Exp
-DIR= smm/22.timed
+VOLUME= smm
DOC= 22.timed
SRCS= timed.ms
diff --git a/share/doc/smm/22.timed/timed.ms b/share/doc/smm/22.timed/timed.ms
index 17da2ddb3eca..054fc4bf50db 100644
--- a/share/doc/smm/22.timed/timed.ms
+++ b/share/doc/smm/22.timed/timed.ms
@@ -180,7 +180,7 @@ one of three states: slave, master, or candidate for election to master.
Also, the term \fIbroadcast\fP refers to
the sending of a message to all active time daemons.
.sp 1
-.DS L
+.\".DS L
.SH
Adjtime Message
.so time
@@ -196,8 +196,8 @@ The slave will accordingly
adjust the time of its machine.
This message requires an acknowledgment.
.sp 1
-.DE
-.DS L
+.\".DE
+.\".DS L
.SH
Acknowledgment Message
.so unused
@@ -210,8 +210,8 @@ acknowledgment only.
It is used in several different contexts, for example
in reply to an Adjtime message.
.sp 1
-.DE
-.DS L
+.\".DE
+.\".DS L
.SH
Master Request Message
.so unused
@@ -223,8 +223,8 @@ A newly-started time daemon broadcasts this message to
locate a master. No other action is implied by this packet.
It requires a Master Acknowledgment.
.sp 1
-.DE
-.DS L
+.\".DE
+.\".DS L
.SH
Master Acknowledgement
.so unused
@@ -235,8 +235,8 @@ Type: TSP_MASTERACK (4)
The master sends this message to acknowledge the Master Request message
and the Conflict Resolution Message.
.sp 1
-.DE
-.DS L
+.\".DE
+.\".DS L
.SH
Set Network Time Message
.so date
@@ -253,8 +253,8 @@ The next
synchronization round will eliminate the small time difference
caused by the random delay in the communication channel.
.sp 1
-.DE
-.DS L
+.\".DE
+.\".DS L
.SH
Master Active Message
.so unused
@@ -266,8 +266,8 @@ The master broadcasts this message to
solicit the names of the active slaves.
Slaves will reply with a Slave Active message.
.sp 1
-.DE
-.DS L
+.\".DE
+.\".DS L
.SH
Slave Active Message
.so unused
@@ -279,8 +279,8 @@ A slave sends this message to the master in answer to a Master Active message.
This message is also sent when a new slave starts up to inform the master that
it wants to be synchronized.
.sp 1
-.DE
-.DS L
+.\".DE
+.\".DS L
.SH
Master Candidature Message
.so unused
@@ -292,8 +292,8 @@ A slave eligible to become a master broadcasts this message when its election
timer expires.
The message declares that the slave wishes to become the new master.
.sp 1
-.DE
-.DS L
+.\".DE
+.\".DS L
.SH
Candidature Acceptance Message
.so unused
@@ -306,8 +306,8 @@ that has broadcast an Election message.
The candidate will add the slave's name to the list of machines that it
will control should it become the master.
.sp 1
-.DE
-.DS L
+.\".DE
+.\".DS L
.SH
Candidature Rejection Message
.so unused
@@ -320,8 +320,8 @@ to any election messages from other slaves
with this message.
This rejects any candidature other than the first received.
.sp 1
-.DE
-.DS L
+.\".DE
+.\".DS L
.SH
Multiple Master Notification Message
.so unused
@@ -332,8 +332,8 @@ Type: TSP_CONFLICT (11)
When two or more masters reply to a Master Request message, the slave
uses this message to inform one of them that more than one master exists.
.sp 1
-.DE
-.DS L
+.\".DE
+.\".DS L
.SH
Conflict Resolution Message
.so unused
@@ -344,8 +344,8 @@ Type: TSP_RESOLVE (12)
A master which has been informed of the existence of other masters
broadcasts this message to determine who the other masters are.
.sp 1
-.DE
-.DS L
+.\".DE
+.\".DS L
.SH
Quit Message
.so unused
@@ -360,8 +360,8 @@ This message is sent by the master in three different contexts:
In all cases, the recipient time daemon will become a slave.
This message requires an acknowledgement.
.sp 1
-.DE
-.DS L
+.\".DE
+.\".DS L
.SH
Set Date Message
.so date
@@ -374,8 +374,8 @@ when a super-user wants to set the network date.
If the local time daemon is the master, it will set the date;
if it is a slave, it will communicate the desired date to the master.
.sp 1
-.DE
-.DS L
+.\".DE
+.\".DS L
.SH
Set Date Request Message
.so date
@@ -386,8 +386,8 @@ Type: TSP_SETDATEREQ (23)
A slave that has received a Set Date message will communicate the
desired date to the master using this message.
.sp 1
-.DE
-.DS L
+.\".DE
+.\".DS L
.SH
Set Date Acknowledgment Message
.so unused
@@ -401,8 +401,8 @@ The same message is sent by the local time daemon to the program
\fIdate(1)\fP to confirm that the network date has been set by the
master.
.sp 1
-.DE
-.DS L
+.\".DE
+.\".DS L
.SH
Start Tracing Message
.so unused
@@ -414,8 +414,8 @@ The controlling program \fItimedc\fP sends this message to the local
time daemon to start the recording in a system file of
all messages received.
.sp 1
-.DE
-.DS L
+.\".DE
+.\".DS L
.SH
Stop Tracing Message
.so unused
@@ -427,8 +427,8 @@ Type: TSP_TRACEOFF (18)
time daemon to stop the recording of
messages received.
.sp 1
-.DE
-.DS L
+.\".DE
+.\".DS L
.SH
Master Site Message
.so unused
@@ -439,8 +439,8 @@ Type: TSP_MSITE (19)
\fITimedc\fP sends this message to the local time daemon to find out
where the master is running.
.sp 1
-.DE
-.DS L
+.\".DE
+.\".DS L
.SH
Remote Master Site Message
.so unused
@@ -453,8 +453,8 @@ of the master.
It then uses the Acknowledgement message to
communicate this location to \fItimedc\fP.
.sp 1
-.DE
-.DS L
+.\".DE
+.\".DS L
.SH
Test Message
.so unused
@@ -466,9 +466,9 @@ For testing purposes, \fItimedc\fP sends this message to a slave
to cause its election timer to expire. NOTE: \fItimed\fP
is not normally compiled to support this.
.sp 1
-.DE
+.\".DE
.SH
-.DS L
+.\".DS L
.SH
Loop Detection Message
.so loop
@@ -480,7 +480,7 @@ This packet is initiated by all masters occasionally to attempt to detect loops.
All submasters forward this packet onto the networks over which they are master.
If a master receives a packet it sent out initially,
it knows that a loop exists and tries to correct the problem.
-.DE
+.\".DE
.SH
References
.IP 1.
diff --git a/share/doc/smm/Makefile b/share/doc/smm/Makefile
index 9cd9988372df..cd5b7f9326f0 100644
--- a/share/doc/smm/Makefile
+++ b/share/doc/smm/Makefile
@@ -4,18 +4,12 @@
# Missing: 03.kdebug 09.uucpimpl 12.uchanges 13.kchanges 17.security
# 18.password 19.porttour 21.uucpnet
BINDIR= /usr/share/doc/smm
-FILES= 00.contents Makefile Title
-SUBDIR= 02.config 04.quotas 05.fsck 06.lpd 07.sendmailop \
+SUBDIR= Title 00.contents \
+ 01.setup 02.config 04.quotas 05.fsck 06.lpd 07.sendmailop \
08.timedop 10.newsop 11.named \
14.fastfs 15.net 16.sendmail \
20.termdesc 22.timed
-.if ${MACHINE} == "tahoe"
-SUBDIR+=01.setup
-.elif ${MACHINE} == "vax"
-SUBDIR+=01.setup
-.endif
-
beforeinstall:
@if [ ! -d ${DESTDIR}${BINDIR} ]; then \
/bin/rm -f ${DESTDIR}${BINDIR} ; \
@@ -25,7 +19,5 @@ beforeinstall:
else \
true ; \
fi
- install -c -o ${BINOWN} -g ${BINGRP} -m 444 ${FILES} \
- ${DESTDIR}${BINDIR}
.include <bsd.subdir.mk>
diff --git a/share/doc/smm/Title/Makefile b/share/doc/smm/Title/Makefile
new file mode 100644
index 000000000000..4da6a6384bda
--- /dev/null
+++ b/share/doc/smm/Title/Makefile
@@ -0,0 +1,9 @@
+VOLUME= smm
+DOC= Title
+
+SRCS= Title
+
+.include <bsd.doc.mk>
+
+${DOC}.${PRINTER}: ${SRCS}
+ ( cd ${.CURDIR} ; ${ROFF} ${SRCS} ) > ${.TARGET}
diff --git a/share/doc/smm/Title b/share/doc/smm/Title/Title
index ecf615cd5ee4..88db7713f3c8 100644
--- a/share/doc/smm/Title
+++ b/share/doc/smm/Title/Title
@@ -91,60 +91,60 @@ The views and conclusions contained in these documents are those of the
authors and should not be interpreted as representing official policies,
either expressed or implied, of the Defense Research Projects Agency
or of the US Government.
-.br
-.ll 6.5i
-.lt 6.5i
-.po .75i
-.in 0i
-.af % i
-.ds ET\"
-.de HD
-.po 0
-.lt 7.4i
-.tl ''''
-.lt
-.po
-'sp 18p
-.if o .tl '\\*(ET''- % -'
-.if e .tl '- % -''\\*(ET'
-'sp 18p
-.ns
-..
-.de FO
-'sp 18p
-.if e .tl '\s9\\*(Dt''\\*(Ed\s0'
-.if o .tl '\s9\\*(Ed''\\*(Dt\s0'
-'bp
-..
-.wh 0 HD
-.wh -60p FO
-.bp 1
-.ds ET \s9\f2Table \|of \|Contents\fP\s0
-.ds Ed 4.3BSD
-.ds Dt April \|1986
-.ce
-\f3TABLE \|OF \|CONTENTS\fP
-.nr x .5i
-.in +\nxu
-.nf
-.ta \n(.lu-\nxuR
-.de xx
-\\$1\f3 \a \fP\\$2
-..
-.de t
-.sp 1v
-.ne .5i
-.cs 3
-.ti -.5i
-.ss 18
-\f3\s9\\$2. \\$3\s0\fP
-.ss 12
-.if t .sp .5v
-.cs 3 36
-.so \\$1
-..
-.t /usr/man/man0/toc8 8 "System Maintenance"
-.in -.5i
-.cs 3
-.if n .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n 80n
-.if t .ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
+.\".br
+.\".ll 6.5i
+.\".lt 6.5i
+.\".po .75i
+.\".in 0i
+.\".af % i
+.\".ds ET\"
+.\".de HD
+.\".po 0
+.\".lt 7.4i
+.\".tl ''''
+.\".lt
+.\".po
+.\"'sp 18p
+.\".if o .tl '\\*(ET''- % -'
+.\".if e .tl '- % -''\\*(ET'
+.\"'sp 18p
+.\".ns
+.\"..
+.\".de FO
+.\"'sp 18p
+.\".if e .tl '\s9\\*(Dt''\\*(Ed\s0'
+.\".if o .tl '\s9\\*(Ed''\\*(Dt\s0'
+.\"'bp
+.\"..
+.\".wh 0 HD
+.\".wh -60p FO
+.\".bp 1
+.\".ds ET \s9\f2Table \|of \|Contents\fP\s0
+.\".ds Ed 4.3BSD
+.\".ds Dt April \|1986
+.\".ce
+.\"\f3TABLE \|OF \|CONTENTS\fP
+.\".nr x .5i
+.\".in +\nxu
+.\".nf
+.\".ta \n(.lu-\nxuR
+.\".de xx
+.\"\\$1\f3 \a \fP\\$2
+.\"..
+.\".de t
+.\".sp 1v
+.\".ne .5i
+.\".cs 3
+.\".ti -.5i
+.\".ss 18
+.\"\f3\s9\\$2. \\$3\s0\fP
+.\".ss 12
+.\".if t .sp .5v
+.\".cs 3 36
+.\".so \\$1
+.\"..
+.\".t /usr/man/man0/toc8 8 "System Maintenance"
+.\".in -.5i
+.\".cs 3
+.\".if n .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n 80n
+.\".if t .ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
diff --git a/share/doc/usd/00.contents b/share/doc/usd/00.contents/00.contents
index 123ee6b1cccb..123ee6b1cccb 100644
--- a/share/doc/usd/00.contents
+++ b/share/doc/usd/00.contents/00.contents
diff --git a/share/doc/usd/00.contents/Makefile b/share/doc/usd/00.contents/Makefile
new file mode 100644
index 000000000000..db20edde23a2
--- /dev/null
+++ b/share/doc/usd/00.contents/Makefile
@@ -0,0 +1,10 @@
+VOLUME= usd
+DOC= 00.contents
+
+SRCS= 00.contents
+MACROS= -ms
+
+.include <bsd.doc.mk>
+
+${DOC}.${PRINTER}: ${SRCS}
+ ( cd ${.CURDIR} ; ${ROFF} ${SRCS} ) > ${.TARGET}
diff --git a/share/doc/usd/04.csh/Makefile b/share/doc/usd/04.csh/Makefile
index c1ad7261ebe0..b0b8ee3a2eb3 100644
--- a/share/doc/usd/04.csh/Makefile
+++ b/share/doc/usd/04.csh/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 5.1 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:30:49 mycroft Exp
-DIR= usd/04.csh
+VOLUME= usd
DOC= 04.csh
SRCS= tabs csh.1 csh.2 csh.3 csh.4 csh.a csh.g
diff --git a/share/doc/usd/07.Mail/Makefile b/share/doc/usd/07.Mail/Makefile
index 84b79b019d0d..8496d9dca1f5 100644
--- a/share/doc/usd/07.Mail/Makefile
+++ b/share/doc/usd/07.Mail/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.2 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:30:41 mycroft Exp
-DIR= usd/07.Mail
+VOLUME= usd
DOC= 07.Mail
SRCS= mail0.nr mail1.nr mail2.nr mail3.nr mail4.nr mail5.nr mail6.nr \
diff --git a/share/doc/usd/09.newsread/Makefile b/share/doc/usd/09.newsread/Makefile
index b860a67fea37..39b6d8a4e170 100644
--- a/share/doc/usd/09.newsread/Makefile
+++ b/share/doc/usd/09.newsread/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.2 (Berkeley) 6/30/90
# Makefile,v 1.5 1993/07/31 15:30:35 mycroft Exp
-DIR= usd/09.newsread
+VOLUME= usd
DOC= 09.newsread
CSRC= ../../smm/10.newsop/tmac.n copyright.mn
diff --git a/share/doc/usd/10.etiq/Makefile b/share/doc/usd/10.etiq/Makefile
index 028cb1c43a1f..c9e52d03ba35 100644
--- a/share/doc/usd/10.etiq/Makefile
+++ b/share/doc/usd/10.etiq/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.2 (Berkeley) 6/30/90
# Makefile,v 1.5 1993/07/31 15:30:28 mycroft Exp
-DIR= usd/10.etiq
+VOLUME= usd
DOC= 10.etiq
SRCS= ../../smm/10.newsop/tmac.n manner.mn
diff --git a/share/doc/usd/11.notes/Makefile b/share/doc/usd/11.notes/Makefile
index ac00ef3cb919..9706b273ec6c 100644
--- a/share/doc/usd/11.notes/Makefile
+++ b/share/doc/usd/11.notes/Makefile
@@ -15,7 +15,7 @@
# and a typesetter. Hopefully the only changes to make it
# run again under nroff will be in page length/width statements.
-DIR= usd/11.notes
+VOLUME= usd
DOC= 11.notes
SRCS= macros 0.long \
diff --git a/share/doc/usd/14.edit/Makefile b/share/doc/usd/14.edit/Makefile
index 358e9fe9bf07..293c4f9268fd 100644
--- a/share/doc/usd/14.edit/Makefile
+++ b/share/doc/usd/14.edit/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.2 (Berkeley) 6/30/90
# Makefile,v 1.5 1993/07/31 15:30:17 mycroft Exp
-DIR= usd/14.edit
+VOLUME= usd
DOC= 14.edit
SRCS= edittut.ms
diff --git a/share/doc/usd/14.edit/edittut.ms b/share/doc/usd/14.edit/edittut.ms
index 94858f67f1a9..ba4718113c45 100644
--- a/share/doc/usd/14.edit/edittut.ms
+++ b/share/doc/usd/14.edit/edittut.ms
@@ -1034,7 +1034,8 @@ Instead, you may identify the line you want to change
by asking edit to search for a specified pattern of letters
that occurs in that line.
The parts of the above command are:
-.TS
+.\".TS
+.sp 1
.in +1i
.nr 35 \n(.u
.nf
@@ -1083,7 +1084,8 @@ The parts of the above command are:
.T# 1
.if \n(35>0 .fi
.in -1i
-.TE
+.\".TE
+.sp 1
.PP
You should note the space after ``but'' in ``/strange, but /''.
If you do not indicate that the space is to be taken out,
diff --git a/share/doc/usd/15.vi/Makefile b/share/doc/usd/15.vi/Makefile
index 9ff48b80ed46..4f9d91edbb94 100644
--- a/share/doc/usd/15.vi/Makefile
+++ b/share/doc/usd/15.vi/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.3 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:30:11 mycroft Exp
-DIR= usd/15.vi
+VOLUME= usd
DOC= 15.vi
SRCS= vi.in vi.chars
diff --git a/share/doc/usd/15.vi/vi.apwh.ms b/share/doc/usd/15.vi/vi.apwh.ms
index 7c8a0e460706..0703baf0cf40 100644
--- a/share/doc/usd/15.vi/vi.apwh.ms
+++ b/share/doc/usd/15.vi/vi.apwh.ms
@@ -37,7 +37,7 @@ Vi Command & Function Reference
Alan P.W. Hewett
.sp
Revised for version 2.12 by Mark Horton
-.CB
+.\".CB
.NH 1
Author's Disclaimer
.LP
@@ -83,7 +83,7 @@ be denoted using the \fIupper case\fR character, but
example, \fB<^D>\fR is equal to \fB<^d>\fR.
The most common character abbreviations
used in this list are as follows:
-.VL 8
+.\".VL 8
.IP <esc> 8
escape, octal 033
.IP <cr> 8
@@ -104,7 +104,7 @@ formfeed, ^L, octal 014
space, octal 040
.IP <del> 8
delete, octal 0177
-.LE
+.\".LE
.sp 1
.NH 1
Basics
@@ -216,7 +216,7 @@ be necessary to type <esc> first.
.NH 2
Cursor and Page Motion
.LP
-.VL 16
+.\".VL 16
.B NOTE:
The arrow keys (see the next four commands)
on certain kinds of terminals will not work with the
@@ -378,12 +378,12 @@ cursor or scrolling the screen.
.IP "\(ga\(ga" 16
Move the cursor back to the exact spot on the line where it was located
before the last "non-relative" move.
-.LE
+.\".LE
.NH 2
Searches
.LP
The following commands allow you to search for items in a file.
-.VL 16
+.\".VL 16
.IP [cnt]f{chr} 16
.sp 1
Search forward on the line for the next or "cnt"'th occurrence of
@@ -431,7 +431,7 @@ direction.
.sp 1
Using the \fB:\fR syntax it is possible to do global searches ala the
standard UNIX "ed" editor.
-.LE
+.\".LE
.NH 2
Text Insertion
.LP
@@ -440,7 +440,7 @@ text insertions are terminated with an <esc> character.
The last change
can always be \fBundone\fR by typing a \fBu\fR.
The text insert in insertion mode can contain newlines.
-.VL 16
+.\".VL 16
.IP a{text}<esc> 16
Insert text immediately following the cursor position.
Mnemonic: \fBa\fRppend
@@ -458,13 +458,13 @@ insert text there. Mnemonic: \fBo\fRpen new line
.IP O{text}<esc> 16
Insert a new line preceding the line on which the cursor appears
and insert text there.
-.LE
+.\".LE
.NH 2
Text Deletion
.LP
The following commands allow the user to delete text in various ways.
All changes can always be \fBundone\fR by typing the \fBu\fR command.
-.VL 16
+.\".VL 16
.IP "[cnt]x" 16
Delete the character or characters starting at the cursor position.
.IP "[cnt]X" 16
@@ -478,14 +478,14 @@ Mnemonic: \fBD\fRelete the rest of line
Deletes one or more occurrences of the specified motion.
Any motion from sections 4.1 and 4.2 can be used here.
The d can be stuttered (e.g. [cnt]dd) to delete cnt lines.
-.LE
+.\".LE
.NH 2
Text Replacement
.LP
The following commands allow the user to simultaneously delete and
insert new text. All such actions can be \fBundone\fR by typing
\fBu\fR following the command.
-.VL 16
+.\".VL 16
.IP "r<chr>" 16
Replaces the character at the current cursor position with <chr>. This
is a one character replacement. No <esc> is required for termination.
@@ -510,7 +510,7 @@ insertion text. A "$" will appear at the end of the last item
that is being deleted unless the deletion involves whole lines.
Motion's can be any motion from sections 4.1 or 4.2.
Stuttering the c (e.g. [cnt]cc) changes cnt lines.
-.LE
+.\".LE
.NH 2
Moving Text
.LP
@@ -534,7 +534,7 @@ in such a buffer is appended to it instead of replacing it.
.FE
There are two more basic commands and
some variations useful in getting and putting text into a file.
-.VL 16
+.\".VL 16
.IP ["<a-z>][cnt]y{motion} 16
.sp 1
Yank the specified item or "cnt" items and put in the "undo" buffer or
@@ -584,13 +584,13 @@ Prettyprints the indicated area according to
.B lisp
conventions.
The area should be a lisp s-expression.
-.LE
+.\".LE
.NH 2
Miscellaneous Commands
.LP
\fBVi\fR has a number of miscellaneous commands that are very
useful. They are:
-.VL 16
+.\".VL 16
.IP ZZ 16
This is the normal way to exit from vi.
If any changes have been made, the file is written out.
@@ -656,13 +656,13 @@ To just escape to the shell for one command,
use :!{cmd}<nl>, see section 5.
.IP z{cnt}<nl> 16
This resets the current window size to "cnt" lines and redraws the screen.
-.LE
+.\".LE
.NH 2
Special Insert Characters
.LP
There are some characters that have special meanings during
insert modes. They are:
-.VL 16
+.\".VL 16
.IP ^V 16
During inserts, typing a ^V allows you to quote control characters
into the file. Any character typed after the ^V will be inserted
@@ -686,7 +686,7 @@ Mnemonic: erase \fBW\fRord
The backspace always serves as an erase during insert modes in addition
to your normal "erase" character. To insert a <bs> into your file, use
the <^V> to quote it.
-.LE
+.\".LE
.NH 1
\fB:\fR Commands
.LP
@@ -696,7 +696,7 @@ the bottom on the screen in preparation for a command. In the
also from this mode that you exit from \fBvi\fR or switch to different
files. All commands of this variety are terminated by a <nl>, <cr>,
or <esc>.
-.VL 16
+.\".VL 16
.IP ":w[!] [file]" 16
Causes \fBvi\fR to write out the current text to the disk. It is
written to the file you are editing unless "file" is supplied. If
@@ -767,7 +767,7 @@ programs so that by saying
\fB:ta function<nl>\fR you will be switched to that function.
It could also be useful when editing multi-file documents, though the
\fBtags\fR file would have to be generated manually.
-.LE
+.\".LE
.NH 1
Special Arrangements for Startup
.PP
@@ -865,7 +865,7 @@ These are usually placed in your .profile or .login.
If you are running a system without environments (such as version 6)
you can place the set command in the file .exrc in your home
directory.
-.VL 16
+.\".VL 16
.IP autoindent\ ai 16
Default: noai Type: toggle
.br
@@ -1076,4 +1076,4 @@ Default: nowa Type: toggle
\fBVi\fR normally makes a number of checks before it writes out a file.
This prevents the user from inadvertently destroying a file. When the
"writeany" option is enabled, \fBvi\fR no longer makes these checks.
-.LE
+.\".LE
diff --git a/share/doc/usd/15.vi/vi.summary b/share/doc/usd/15.vi/vi.summary
index 02ccebd68afd..45f6c4b03c27 100644
--- a/share/doc/usd/15.vi/vi.summary
+++ b/share/doc/usd/15.vi/vi.summary
@@ -33,6 +33,7 @@
.\"
.ds CH
.ds CF
+.nr 1T 0
.de TS
.br
.if !\\n(1T .RT
diff --git a/share/doc/usd/16.ex/Makefile b/share/doc/usd/16.ex/Makefile
index 0e1626984381..e517ddacf0d7 100644
--- a/share/doc/usd/16.ex/Makefile
+++ b/share/doc/usd/16.ex/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.2 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:30:05 mycroft Exp
-DIR= usd/16.ex
+VOLUME= usd
DOC= 16.ex
SRCS= ex.rm
diff --git a/share/doc/usd/16.ex/ex.rm b/share/doc/usd/16.ex/ex.rm
index 0c47cc6950bb..923034198c26 100644
--- a/share/doc/usd/16.ex/ex.rm
+++ b/share/doc/usd/16.ex/ex.rm
@@ -33,6 +33,7 @@
.\"
.EH 'USD:16-%''Ex Reference Manual'
.OH 'Ex Reference Manual''USD:16-%'
+.nr )P 0
.de ZP
.nr pd \\n()P
.nr )P 0
diff --git a/share/doc/usd/16.ex/ex.summary b/share/doc/usd/16.ex/ex.summary
index 06a035d8a31a..b9c72bf49a89 100644
--- a/share/doc/usd/16.ex/ex.summary
+++ b/share/doc/usd/16.ex/ex.summary
@@ -55,7 +55,7 @@ Ex/Edit Command Summary (Version 2.0)
.nr VS 11
.nr PS 9
.nr HM 0.5i
-.nr CW
+.\".nr CW
.2C
.PP
.I Ex
@@ -251,9 +251,8 @@ rather than with its special meaning,
precede it by a backslash (\\).
The backslash always has a special meaning.
.1C
-.rm LF
-.rm RF
-.rm CF
+.ds LF
+.ds RF
.nr FM 0.4
.TS
cp10 cp10 cp10 cp10
@@ -402,7 +401,7 @@ be added prior to line 1.
\&.
\fR:
.fi
-T} \^
+T}
.SP
\fR(.,.+1)\fBjoin j T{
Join lines together, adjusting white space (spaces
@@ -413,7 +412,7 @@ T} T{
Resulting line is printed
:
.fi
-T} \^
+T}
.TE
.bp
.TS
diff --git a/share/doc/usd/21.msdiffs/Makefile b/share/doc/usd/21.msdiffs/Makefile
index 1e0edbe686fd..df79858538c3 100644
--- a/share/doc/usd/21.msdiffs/Makefile
+++ b/share/doc/usd/21.msdiffs/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.2 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:29:58 mycroft Exp
-DIR= usd/21.msdiffs
+VOLUME= usd
DOC= 21.msdiffs
SRCS= ms.diffs
diff --git a/share/doc/usd/22.memacros/Makefile b/share/doc/usd/22.memacros/Makefile
index 94c9401e2dfa..b270c4856975 100644
--- a/share/doc/usd/22.memacros/Makefile
+++ b/share/doc/usd/22.memacros/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.4 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:29:52 mycroft Exp
-DIR= usd/22.memacros
+VOLUME= usd
DOC= 22.memacros
SRCS= intro.me
diff --git a/share/doc/usd/23.meref/Makefile b/share/doc/usd/23.meref/Makefile
index 72a3b03548a1..6a4a9cbbe48c 100644
--- a/share/doc/usd/23.meref/Makefile
+++ b/share/doc/usd/23.meref/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.4 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:29:46 mycroft Exp
-DIR= usd/23.meref
+VOLUME= usd
DOC= 23.meref
SRCS= ref.me
diff --git a/share/doc/usd/33.rogue/Makefile b/share/doc/usd/33.rogue/Makefile
index 61951092d1c1..3a050e08b568 100644
--- a/share/doc/usd/33.rogue/Makefile
+++ b/share/doc/usd/33.rogue/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.3 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:29:41 mycroft Exp
-DIR= usd/33.rogue
+VOLUME= usd
DOC= 33.rogue
SRCS= rogue.me
diff --git a/share/doc/usd/34.trek/Makefile b/share/doc/usd/34.trek/Makefile
index 48584e730d0f..ed2ece10c9f5 100644
--- a/share/doc/usd/34.trek/Makefile
+++ b/share/doc/usd/34.trek/Makefile
@@ -1,7 +1,7 @@
# from: @(#)Makefile 6.2 (Berkeley) 6/30/90
# Makefile,v 1.4 1993/07/31 15:29:34 mycroft Exp
-DIR= usd/34.trek
+VOLUME= usd
DOC= 34.trek
SRCS= trek.me
diff --git a/share/doc/usd/Makefile b/share/doc/usd/Makefile
index dad7234f55c5..6cae2c4c0e93 100644
--- a/share/doc/usd/Makefile
+++ b/share/doc/usd/Makefile
@@ -6,8 +6,8 @@
# 27.eqnguide 28.tbl 29.refer 30.invert 31.bib 32.diction
BINDIR= /usr/share/doc/usd
-FILES= 00.contents Makefile Title
-SUBDIR= 04.csh 07.Mail \
+SUBDIR= Title 00.contents \
+ 04.csh 07.Mail \
09.newsread 10.etiq 11.notes 14.edit 15.vi \
16.ex 21.msdiffs 22.memacros \
23.meref \
@@ -22,7 +22,5 @@ beforeinstall:
else \
true ; \
fi
- install -c -o ${BINOWN} -g ${BINGRP} -m 444 ${FILES} \
- ${DESTDIR}${BINDIR}
.include <bsd.subdir.mk>
diff --git a/share/doc/usd/Title/Makefile b/share/doc/usd/Title/Makefile
new file mode 100644
index 000000000000..e7520803fec5
--- /dev/null
+++ b/share/doc/usd/Title/Makefile
@@ -0,0 +1,9 @@
+VOLUME= usd
+DOC= Title
+
+SRCS= Title
+
+.include <bsd.doc.mk>
+
+${DOC}.${PRINTER}: ${SRCS}
+ ( cd ${.CURDIR} ; ${ROFF} ${SRCS} ) > ${.TARGET}
diff --git a/share/doc/usd/Title b/share/doc/usd/Title/Title
index 0dec26046288..0dec26046288 100644
--- a/share/doc/usd/Title
+++ b/share/doc/usd/Title/Title
diff --git a/share/man/man1/intro.1 b/share/man/man1/intro.1
index b297c36b7d75..0197aea9a326 100644
--- a/share/man/man1/intro.1
+++ b/share/man/man1/intro.1
@@ -41,7 +41,7 @@
Section one of the manual contains most of the commands
which comprise the
.Bx
-user enviroment.
+user environment.
Some of the commands included in section one are
text editors, command shell interpreters,
searching and sorting tools,
diff --git a/share/man/man3/Makefile b/share/man/man3/Makefile
index 9c8ed802a464..2277a65fa3e0 100644
--- a/share/man/man3/Makefile
+++ b/share/man/man3/Makefile
@@ -1,10 +1,12 @@
# @(#)Makefile 0.1 (RWGrimes) 3/25/93
-MAN3= assert.3 bitstring.3 end.3 fpgetround.3 intro.3 stdarg.3
+MAN3= assert.3 bitstring.3 end.3 fpgetround.3 intro.3 stdarg.3 queue.3
-MLINKS+=end.3 edata.3 end.3 etext.3 stdarg.3 varargs.3
+MLINKS+=end.3 edata.3 end.3 etext.3
MLINKS+=fpgetround.3 fpsetround.3 fpgetround.3 fpgetmask.3 \
fpgetround.3 fpsetmask.3 fpgetround.3 fpgetsticky.3 \
fpgetround.3 fpsetsticky.3 fpgetround.3 fpresetsticky.3
+MLINKS+=stdarg.3 varargs.3 stdarg.3 va_arg.3
+MLINKS+=stdarg.3 va_end.3 stdarg.3 va_start.2
.include <bsd.prog.mk>
diff --git a/share/man/man3/queue.3 b/share/man/man3/queue.3
new file mode 100644
index 000000000000..5cb405398355
--- /dev/null
+++ b/share/man/man3/queue.3
@@ -0,0 +1,454 @@
+.\" Copyright (c) 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.
+.\"
+.\" @(#)queue.3 8.1 (Berkeley) 12/13/93
+.\"
+.Dd "December 13, 1993"
+.Dt QUEUE 3
+.Os BSD 4
+.Sh NAME
+.Nm LIST_ENTRY ,
+.Nm LIST_HEAD ,
+.Nm LIST_INIT ,
+.Nm LIST_INSERT_AFTER ,
+.Nm LIST_INSERT_HEAD ,
+.Nm LIST_REMOVE ,
+.Nm TAILQ_ENTRY ,
+.Nm TAILQ_HEAD ,
+.Nm TAILQ_INIT ,
+.Nm TAILQ_INSERT_AFTER ,
+.Nm TAILQ_INSERT_HEAD ,
+.Nm TAILQ_INSERT_TAIL ,
+.Nm TAILQ_REMOVE ,
+.Nm CIRCLEQ_ENTRY ,
+.Nm CIRCLEQ_HEAD ,
+.Nm CIRCLEQ_INIT ,
+.Nm CIRCLEQ_INSERT_AFTER ,
+.Nm CIRCLEQ_INSERT_BEFORE ,
+.Nm CIRCLEQ_INSERT_HEAD ,
+.Nm CIRCLEQ_INSERT_TAIL ,
+.Nm CIRCLEQ_REMOVE
+.Nd implementations of lists, tail queues, and circular queues
+.Sh SYNOPSIS
+.Fd #include <sys/queue.h>
+.sp
+.Fn LIST_ENTRY "TYPE"
+.Fn LIST_HEAD "HEADNAME" "TYPE"
+.Fn LIST_INIT "LIST_HEAD *head"
+.Fn LIST_INSERT_AFTER "LIST_ENTRY *listelm" "TYPE *elm" "LIST_ENTRY NAME"
+.Fn LIST_INSERT_HEAD "LIST_HEAD *head" "TYPE *elm" "LIST_ENTRY NAME"
+.Fn LIST_REMOVE "TYPE *elm" "LIST_ENTRY NAME"
+.sp
+.Fn TAILQ_ENTRY "TYPE"
+.Fn TAILQ_HEAD "HEADNAME" "TYPE"
+.Fn TAILQ_INIT "TAILQ_HEAD *head"
+.Fn TAILQ_INSERT_AFTER "TAILQ_HEAD *head" "TYPE *listelm" "TYPE *elm" "TAILQ_ENTRY NAME"
+.Fn TAILQ_INSERT_HEAD "TAILQ_HEAD *head" "TYPE *elm" "TAILQ_ENTRY NAME"
+.Fn TAILQ_INSERT_TAIL "TAILQ_HEAD *head" "TYPE *elm" "TAILQ_ENTRY NAME"
+.Fn TAILQ_REMOVE "TAILQ_HEAD *head" "TYPE *elm" "TAILQ_ENTRY NAME"
+.sp
+.Fn CIRCLEQ_ENTRY "TYPE"
+.Fn CIRCLEQ_HEAD "HEADNAME" "TYPE"
+.Fn CIRCLEQ_INIT "CIRCLEQ_HEAD *head"
+.Fn CIRCLEQ_INSERT_AFTER "CIRCLEQ_HEAD *head" "TYPE *listelm" "TYPE *elm" "CIRCLEQ_ENTRY NAME"
+.Fn CIRCLEQ_INSERT_BEFORE "CIRCLEQ_HEAD *head" "TYPE *listelm" "TYPE *elm" "CIRCLEQ_ENTRY NAME"
+.Fn CIRCLEQ_INSERT_HEAD "CIRCLEQ_HEAD *head" "TYPE *elm" "CIRCLEQ_ENTRY NAME"
+.Fn CIRCLEQ_INSERT_TAIL "CIRCLEQ_HEAD *head" "TYPE *elm" "CIRCLEQ_ENTRY NAME"
+.Fn CIRCLEQ_REMOVE "CIRCLEQ_HEAD *head" "TYPE *elm" "CIRCLEQ_ENTRY NAME"
+.Sh DESCRIPTION
+These macros define and operate on three types of data structures:
+lists, tail queues, and circular queues.
+All three structures support the following functionality:
+.Bl -enum -compact -offset indent
+.It
+Insertion of a new entry at the head of the list.
+.It
+Insertion of a new entry after any element in the list.
+.It
+Removal of any entry in the list.
+.It
+Forward traversal through the list.
+.El
+.Pp
+Lists are the simplest of the three data structures and support
+only the above functionality.
+.Pp
+Tail queues add the following functionality:
+.Bl -enum -compact -offset indent
+.It
+Entries can be added at the end of a list.
+.El
+However:
+.Bl -enum -compact -offset indent
+.It
+All list insertions and removals must specify the head of the list.
+.It
+Each head entry requires two pointers rather than one.
+.It
+Code size is about 15% greater and operations run about 20% slower
+than lists.
+.El
+.Pp
+Circular queues add the following functionality:
+.Bl -enum -compact -offset indent
+.It
+Entries can be added at the end of a list.
+.It
+Entries can be added before another entry.
+.It
+They may be traversed backwards, from tail to head.
+.El
+However:
+.Bl -enum -compact -offset indent
+.It
+All list insertions and removals must specify the head of the list.
+.It
+Each head entry requires two pointers rather than one.
+.It
+The termination condition for traversal is more complex.
+.It
+Code size is about 40% greater and operations run about 45% slower
+than lists.
+.El
+.Pp
+In the macro definitions,
+.Fa TYPE
+is the name of a user defined structure,
+that must contain a field of type
+.Li LIST_ENTRY ,
+.Li TAILQ_ENTRY ,
+or
+.Li CIRCLEQ_ENTRY ,
+named
+.Fa NAME .
+The argument
+.Fa HEADNAME
+is the name of a user defined structure that must be declared
+using the macros
+.Li LIST_HEAD ,
+.Li TAILQ_HEAD ,
+or
+.Li CIRCLEQ_HEAD .
+See the examples below for further explanation of how these
+macros are used.
+.Sh LISTS
+A list is headed by a structure defined by the
+.Nm LIST_HEAD
+macro.
+This structure contains a single pointer to the first element
+on the list.
+The elements are doubly linked so that an arbitrary element can be
+removed without traversing the list.
+New elements can be added to the list after an existing element or
+at the head of the list.
+A
+.Fa LIST_HEAD
+structure is declared as follows:
+.Bd -literal -offset indent
+LIST_HEAD(HEADNAME, TYPE) head;
+.Ed
+.sp
+where
+.Fa HEADNAME
+is the name of the structure to be defined, and
+.Fa TYPE
+is the type of the elements to be linked into the list.
+A pointer to the head of the list can later be declared as:
+.Bd -literal -offset indent
+struct HEADNAME *headp;
+.Ed
+.sp
+(The names
+.Li head
+and
+.Li headp
+are user selectable.)
+.Pp
+The macro
+.Nm LIST_ENTRY
+declares a structure that connects the elements in
+the list.
+.Pp
+The macro
+.Nm LIST_INIT
+initializes the list referenced by
+.Fa head .
+.Pp
+The macro
+.Nm LIST_INSERT_HEAD
+inserts the new element
+.Fa elm
+at the head of the list.
+.Pp
+The macro
+.Nm LIST_INSERT_AFTER
+inserts the new element
+.Fa elm
+after the element
+.Fa listelm .
+.Pp
+The macro
+.Nm LIST_REMOVE
+removes the element
+.Fa elm
+from the list.
+.Sh LIST EXAMPLE
+.Bd -literal
+LIST_HEAD(listhead, entry) head;
+struct listhead *headp; /* List head. */
+struct entry {
+ ...
+ LIST_ENTRY(entry) entries; /* List. */
+ ...
+} *n1, *n2, *np;
+
+LIST_INIT(&head); /* Initialize the list. */
+
+n1 = malloc(sizeof(struct entry)); /* Insert at the head. */
+LIST_INSERT_HEAD(&head, n1, entries);
+
+n2 = malloc(sizeof(struct entry)); /* Insert after. */
+LIST_INSERT_AFTER(n1, n2, entries);
+ /* Forward traversal. */
+for (np = head.lh_first; np != NULL; np = np->entries.le_next)
+ np-> ...
+
+while (head.lh_first != NULL) /* Delete. */
+ LIST_REMOVE(head.lh_first, entries);
+.Ed
+.Sh TAIL QUEUES
+A tail queue is headed by a structure defined by the
+.Nm TAILQ_HEAD
+macro.
+This structure contains a pair of pointers,
+one to the first element in the tail queue and the other to
+the last element in the tail queue.
+The elements are doubly linked so that an arbitrary element can be
+removed without traversing the tail queue.
+New elements can be added to the tail queue after an existing element,
+at the head of the tail queue, or at the end of the tail queue.
+A
+.Fa TAILQ_HEAD
+structure is declared as follows:
+.Bd -literal -offset indent
+TAILQ_HEAD(HEADNAME, TYPE) head;
+.Ed
+.sp
+where
+.Li HEADNAME
+is the name of the structure to be defined, and
+.Li TYPE
+is the type of the elements to be linked into the tail queue.
+A pointer to the head of the tail queue can later be declared as:
+.Bd -literal -offset indent
+struct HEADNAME *headp;
+.Ed
+.sp
+(The names
+.Li head
+and
+.Li headp
+are user selectable.)
+.Pp
+The macro
+.Nm TAILQ_ENTRY
+declares a structure that connects the elements in
+the tail queue.
+.Pp
+The macro
+.Nm TAILQ_INIT
+initializes the tail queue referenced by
+.Fa head .
+.Pp
+The macro
+.Nm TAILQ_INSERT_HEAD
+inserts the new element
+.Fa elm
+at the head of the tail queue.
+.Pp
+The macro
+.Nm TAILQ_INSERT_TAIL
+inserts the new element
+.Fa elm
+at the end of the tail queue.
+.Pp
+The macro
+.Nm TAILQ_INSERT_AFTER
+inserts the new element
+.Fa elm
+after the element
+.Fa listelm .
+.Pp
+The macro
+.Nm TAILQ_REMOVE
+removes the element
+.Fa elm
+from the tail queue.
+.Sh TAIL QUEUE EXAMPLE
+.Bd -literal
+TAILQ_HEAD(tailhead, entry) head;
+struct tailhead *headp; /* Tail queue head. */
+struct entry {
+ ...
+ TAILQ_ENTRY(entry) entries; /* Tail queue. */
+ ...
+} *n1, *n2, *np;
+
+TAILQ_INIT(&head); /* Initialize the queue. */
+
+n1 = malloc(sizeof(struct entry)); /* Insert at the head. */
+TAILQ_INSERT_HEAD(&head, n1, entries);
+
+n1 = malloc(sizeof(struct entry)); /* Insert at the tail. */
+TAILQ_INSERT_TAIL(&head, n1, entries);
+
+n2 = malloc(sizeof(struct entry)); /* Insert after. */
+TAILQ_INSERT_AFTER(&head, n1, n2, entries);
+ /* Forward traversal. */
+for (np = head.tqh_first; np != NULL; np = np->entries.tqe_next)
+ np-> ...
+ /* Delete. */
+while (head.tqh_first != NULL)
+ TAILQ_REMOVE(&head, head.tqh_first, entries);
+.Ed
+.Sh CIRCULAR QUEUES
+A circular queue is headed by a structure defined by the
+.Nm CIRCLEQ_HEAD
+macro.
+This structure contains a pair of pointers,
+one to the first element in the circular queue and the other to the
+last element in the circular queue.
+The elements are doubly linked so that an arbitrary element can be
+removed without traversing the queue.
+New elements can be added to the queue after an existing element,
+before an existing element, at the head of the queue, or at the end
+of the queue.
+A
+.Fa CIRCLEQ_HEAD
+structure is declared as follows:
+.Bd -literal -offset indent
+CIRCLEQ_HEAD(HEADNAME, TYPE) head;
+.Ed
+.sp
+where
+.Li HEADNAME
+is the name of the structure to be defined, and
+.Li TYPE
+is the type of the elements to be linked into the circular queue.
+A pointer to the head of the circular queue can later be declared as:
+.Bd -literal -offset indent
+struct HEADNAME *headp;
+.Ed
+.sp
+(The names
+.Li head
+and
+.Li headp
+are user selectable.)
+.Pp
+The macro
+.Nm CIRCLEQ_ENTRY
+declares a structure that connects the elements in
+the circular queue.
+.Pp
+The macro
+.Nm CIRCLEQ_INIT
+initializes the circular queue referenced by
+.Fa head .
+.Pp
+The macro
+.Nm CIRCLEQ_INSERT_HEAD
+inserts the new element
+.Fa elm
+at the head of the circular queue.
+.Pp
+The macro
+.Nm CIRCLEQ_INSERT_TAIL
+inserts the new element
+.Fa elm
+at the end of the circular queue.
+.Pp
+The macro
+.Nm CIRCLEQ_INSERT_AFTER
+inserts the new element
+.Fa elm
+after the element
+.Fa listelm .
+.Pp
+The macro
+.Nm CIRCLEQ_INSERT_BEFORE
+inserts the new element
+.Fa elm
+before the element
+.Fa listelm .
+.Pp
+The macro
+.Nm CIRCLEQ_REMOVE
+removes the element
+.Fa elm
+from the circular queue.
+.Sh CIRCULAR QUEUE EXAMPLE
+.Bd -literal
+CIRCLEQ_HEAD(circleq, entry) head;
+struct circleq *headp; /* Circular queue head. */
+struct entry {
+ ...
+ CIRCLEQ_ENTRY entries; /* Circular queue. */
+ ...
+} *n1, *n2, *np;
+
+CIRCLEQ_INIT(&head); /* Initialize the circular queue. */
+
+n1 = malloc(sizeof(struct entry)); /* Insert at the head. */
+CIRCLEQ_INSERT_HEAD(&head, n1, entries);
+
+n1 = malloc(sizeof(struct entry)); /* Insert at the tail. */
+CIRCLEQ_INSERT_TAIL(&head, n1, entries);
+
+n2 = malloc(sizeof(struct entry)); /* Insert after. */
+CIRCLEQ_INSERT_AFTER(&head, n1, n2, entries);
+
+n2 = malloc(sizeof(struct entry)); /* Insert before. */
+CIRCLEQ_INSERT_BEFORE(&head, n1, n2, entries);
+ /* Forward traversal. */
+for (np = head.cqh_first; np != (void *)&head; np = np->entries.cqe_next)
+ np-> ...
+ /* Reverse traversal. */
+for (np = head.cqh_last; np != (void *)&head; np = np->entries.cqe_prev)
+ np-> ...
+ /* Delete. */
+while (head.cqh_first != (void *)&head)
+ CIRCLEQ_REMOVE(&head, head.cqh_first, entries);
+.Ed
+.Sh HISTORY
+The
+.Nm queue
+functions first appeared in 4.4BSD.
diff --git a/share/man/man4/Makefile b/share/man/man4/Makefile
index 73bd6da828d4..32c32d0736ab 100644
--- a/share/man/man4/Makefile
+++ b/share/man/man4/Makefile
@@ -1,11 +1,11 @@
-# @(#)Makefile 0.1 (RWGrimes) 3/25/93
+# $Id: Makefile,v 1.6 1993/11/16 20:55:34 rgrimes Exp $
#
# Not for 386bsd: man4.hp300 man4.tahoe man4.vax
-MAN4= bpf.4 clnp.4 cltp.4 drum.4 esis.4 fd.4 icmp.4 idp.4 imp.4 inet.4 ip.4 \
- iso.4 kadb.4 lo.4 netintro.4 ns.4 nsip.4 null.4 pty.4 route.4 \
- sd.4 spp.4 st.4 \
- tcp.4 termios.4 tp.4 udp.4 unix.4
+MAN4= bpf.4 cd.4 ch.4 clnp.4 cltp.4 ddb.4 drum.4 esis.4 fd.4 icmp.4 idp.4 \
+ imp.4 inet.4 ip.4 iso.4 kadb.4 lo.4 netintro.4 ns.4 nsip.4 null.4 \
+ pty.4 route.4 scsi.4 sd.4 spp.4 st.4 su.4 \
+ tcp.4 termios.4 tp.4 udp.4 uk.4 unix.4
MLINKS= netintro.4 networking.4
SUBDIR= man4.i386
diff --git a/share/man/man4/cd.4 b/share/man/man4/cd.4
new file mode 100644
index 000000000000..ba3e0dbd7421
--- /dev/null
+++ b/share/man/man4/cd.4
@@ -0,0 +1,179 @@
+.Dd August 27, 1993
+.Dt CD 4
+.Os 386BSD/NetBSD
+.Sh NAME
+.Nm cd
+.Nd scsi cdrom driver
+.Sh SYNOPSIS
+.Nm device-driver cd
+.Op Ar count
+.Sh DESCRIPTION
+The
+.Xr cd
+driver provides support for a
+.Em scsi
+cdrom. It allows the cdrom
+to be divided up into a set of pseudo devices called
+.Em partitions.
+In an attempt to look like regular disks the
+.Nm
+driver synthesises a partition table, with one partition covering the entire
+cdrom. A user might (for some amazing reason) add another partition to the
+cdrom by using disklabel, but it will last only until the cdrom is unmounted.
+A Partition can have both a
+.Em raw
+interface
+and a
+.Em Block mode
+interface.
+In general the interfaces are similar to those described by
+.Xr wd 4
+or
+.Xr sd 4 .
+
+.Pp
+Where the
+.Xr wd 4
+device has a fairly low level interface to the system,
+.Em SCSI
+devices have a much higher level interface and talk to the system via
+a
+.Em SCSI Adapter
+and a
+.Em Scsi Adapter driver
+e.g.
+.Xr AHA1542 .
+A scsi adapter must also be separatly configured into the system
+before a scsi cdrom can be configured.
+.Pp
+As the scsi adapter is probed during boot, the
+.Em SCSI
+bus is scanned for devices. Any devices found which answer as 'Readonly'
+type devices will be 'attached' to the
+.Nm
+driver. The first found will be attached as
+.Em cd0
+and the next,
+.Em cd1
+etc.
+.Pp
+The system utility
+.Xr disklabel 1
+may be used to read the synthesized
+.Xr disklabel 5
+structure, which will contain correct figures for the size of the cdrom
+should that information be required.
+.Pp
+.Sh KERNEL CONFIGURATION
+Any number of cdroms may be attached to the system regardless of system
+configuration as all resources are dynamically allocated.
+
+.Pp
+.Sh IOCTLS
+The following
+.Xr ioctl 2
+calls apply to scsi cdroms
+in the header files
+.Em sys/cdio.h.
+and
+.Em sys/disklabel.h
+
+.Bl -tag -width CDIOCPLAYAUDIO____
+
+.It Dv DIOCGDINFO
+Read, from the kernel, the in-core copy of the disklabel for the
+drive. This will be a ficticious disklabel it will contain information
+read from the scsi inquiry commands, and should be the same as
+the information printed at boot.
+.It Dv DIOCSDINFO
+Give the driver a new disklabel to use. The driver will NOT try write the new
+disklabel to the disk. (ok?)
+.It CDIOCPLAYTRACKS
+Start Audio playback given a track address and length.
+.It CDIOCPLAYBLOCKS
+Start Audio playback given a block address and length.
+.It CDIOCPLAYMSF
+Start Audio playback given a 'Minutes/ seconds/ frames' address and length.
+.It CDIOCREADSUBCHANNEL
+Read information from the subchannel at the location specified.
+.It CDIOREADTOCHEADER
+Return summary information about the table of contents for the mounted cdrom.
+.It CDIOREADTOCENTRYS
+Return information from the table of contents entries mentionned.
+.It CDIOCSETPATCH
+Attach various audio channels to various output channels.
+.It CDIOCGETVOL
+Get information about the volume settings of the output channels.
+.It CDIOCSETVOL
+Change the volume settings of the output channels.
+.It CDIOCSETMONO
+Patch all out[put channels to all source channels.
+.It CDIOCSETSTERIO
+Patch left source channel to the left output channel and the right
+source channel to the right output channel.
+.It CDIOCSETMUTE
+Mute output without changing the volume settings.
+.It CDIOCSETLEFT
+Attach both output channels to the left source channel.
+.It CDIOCSETRIGHT
+Attach both output channels to the right source channel.
+.It CDIOCSETDEBUG
+Turn on debugging for the appropriate device.
+.It CDIOCCLRDEBUG
+Turn off debugging for the appropriate device.
+.It CDIOCPAUSE
+Pause audio play, do not reset the location of the read-head.
+.It CDIOCRESUME
+Resume audio play, Start at the location of the pause.
+.It CDIOCRESET
+Reset the drive.
+.It CDIOCSTART
+Tell the drive to spin-up the cdrom.
+.It CDIOCSTOP
+Tell the drive to spin-down the cdrom.
+.It CDIOCEJECT
+Eject the cdrom.
+.El
+.Pp
+In addition the general
+.Xr scsi 4
+ioctls may be used with the
+.Nm
+driver, if used against the fourth (raw/whole disk) partiton. (e.g. rcd0d)
+.Sh NOTES
+When a cdrom is changed in a drive controlled by the
+.Nm
+driver, then the act of changing the media will invalidate the
+disklabel and information held within the kernel. To stop corruption,
+All accesses to the device will be discarded until there are no more
+open file descriptors referencing the device. During this period, all
+new open attempts will be rejected. When No more open file descriptors
+reference the device, the first next open will load a new set of
+figures (including disklabel) for the drive.
+
+The Audio code in the
+.Nm
+driver only support SCSI2 standard audio commands. As there are many cdrom
+manufacturers who have not followed the standard well, there are many
+cdroms for which audio will not work. Some work is planned to support
+some of the more common 'broken' cdrom drives however this is not yet
+under way.
+
+.Sh FILES
+.Bl -tag -width /dev/rcd[0-9][a-h] -compact
+.It Pa /dev/cd[0-9][a-h]
+block mode scsi disks
+.It Pa /dev/rcd[0-9][a-h]
+raw scsi disks
+.El
+.Sh DIAGNOSTICS
+None.
+.Sh SEE ALSO
+.Xr disklabel 1
+.Xr disklabel 5
+.Xr wd 4
+.Xr sd 4
+.Sh HISTORY
+This
+.Nm
+driver appeared in 386BSD 0.1.
diff --git a/share/man/man4/ch.4 b/share/man/man4/ch.4
new file mode 100644
index 000000000000..df3853c12155
--- /dev/null
+++ b/share/man/man4/ch.4
@@ -0,0 +1,80 @@
+.Dd August 27, 1993
+.Dt CH 4
+.Os 386BSD/NetBSD
+.Sh NAME
+.Nm ch
+.Nd scsi media-changer (juke box) driver
+.Sh SYNOPSIS
+.Nm device-driver ch
+.Op Ar count
+.Sh DESCRIPTION
+The
+.Xr ch
+driver provides support for a
+.Em scsi
+juke box. It allows many slots of media to be multiplexed between a number
+of drives.
+.Pp
+A scsi adapter must also be separatly configured into the system
+before a scsi changer can be configured.
+.Pp
+As the scsi adapter is probed during boot, the
+.Em SCSI
+bus is scanned for devices. Any devices found which answer as 'Changer'
+type devices will be 'attached' to the
+.Nm
+driver. The first found will be attached as
+.Em ch0
+and the next,
+.Em ch1
+etc.
+.Pp
+
+.Sh KERNEL CONFIGURATION
+In configuring, if an optional
+.Ar count
+is given in the specification, that number of scsi media changers
+are configured; Most storage for them is allocated only when found
+so a large number of configured devices is cheap. (once the first
+has included the driver).
+
+.Pp
+.Sh IOCTLS
+The following
+.Xr ioctl 2
+call applies to the changer. It is defined in
+in the header file
+.Em sys/chio.h.
+
+.Bl -tag -width DIOCSDINFO
+CHIOOP
+This appears to be a 'do-everything' call.
+.El
+.Sh NOTES
+The
+.Nm
+driver was added to the system by
+ Stefan Grefen (grefen@goofy.zdv.uni-mainz.de)
+who apparently had such a device
+however It appears as though no-one I have heard of has ever used this
+driver. If you use it please let me know so I can test changes.
+Stefan appears to have suffered net.death (or at least net.disconnection).
+I (julian) have never used this device. If you do please re-write this
+man page and send it to me..
+
+.Sh FILES
+.Bl -tag -width /dev/ch[0-9] -compact
+.It Pa /dev/ch[0-9]
+device entries
+.El
+.Sh DIAGNOSTICS
+None.
+.Sh SEE ALSO
+.Xr sd 4
+.Xr st 4
+.Xr cd 4
+.Sh HISTORY
+The
+.Nm
+driver appeared in 386BSD 0.1
+
diff --git a/share/man/man4/clnp.4 b/share/man/man4/clnp.4
index 129e5b975b30..467844d02fa3 100644
--- a/share/man/man4/clnp.4
+++ b/share/man/man4/clnp.4
@@ -39,8 +39,8 @@
.Nd Connectionless-Mode Network Protocol
.Sh SYNOPSIS
.Fd #include <sys/socket.h>
-.Fd #include <netargo/iso.h>
-.Fd #include <netargo/clnp.h>
+.Fd #include <netiso/iso.h>
+.Fd #include <netiso/clnp.h>
.Ft int
.Fn socket AF_ISO SOCK_RAW 0
.Sh DESCRIPTION
diff --git a/share/man/man4/ddb.4 b/share/man/man4/ddb.4
index c2ff64f606a7..62bebbf6f43f 100644
--- a/share/man/man4/ddb.4
+++ b/share/man/man4/ddb.4
@@ -26,9 +26,9 @@
.\"
.\" HISTORY
.\" ddb.4,v
-# Revision 1.1 1993/07/15 18:41:02 brezak
-# Man page for DDB
-#
+.\" Revision 1.1 1993/07/15 18:41:02 brezak
+.\" Man page for DDB
+.\"
.\" Revision 2.6 92/04/08 08:52:57 rpd
.\" Changes from OSF.
.\" [92/01/17 14:19:22 jsb]
@@ -288,8 +288,8 @@ count argument limits the search.
Display all process information.
This version of "\fBddb\fR"
prints more information than previous one.
-It shows UNIX process information like "ps".
-The UNIX process information may not be shown if it is not
+It shows process information like "ps".
+The process information may not be shown if it is not
supported in the machine, or the bottom of the stack of the
target process is not in the main memory at that time.
The 'm' options will alter the 'ps' display to show vm_map
diff --git a/share/man/man4/man4.i386/Makefile b/share/man/man4/man4.i386/Makefile
index a4a605999209..17702805c040 100644
--- a/share/man/man4/man4.i386/Makefile
+++ b/share/man/man4/man4.i386/Makefile
@@ -1,9 +1,9 @@
# @(#)Makefile 0.1 (RWGrimes) 3/25/93
-MAN4= com.4 keyboard.4 lpa.4 lpt.4 mem.4 mse.4 npx.4 screen.4 sio.4 spkr.4
+MAN4= com.4 keyboard.4 lpa.4 lpt.4 mem.4 mse.4 npx.4 screen.4 sio.4 spkr.4
-MLINKS= com.4 ../com.4
-MLINKS+= keyboard.4 ../keyboard.4
+MLINKS= com.4 ../com.4
+MLINKS+= keyboard.4 ../keyboard.4
MLINKS+= lpa.4 ../lpa.4
MLINKS+= lpt.4 ../lpt.4
MLINKS+= mem.4 ../mem.4
diff --git a/share/man/man4/man4.i386/keyboard.4 b/share/man/man4/man4.i386/keyboard.4
index 0a8b0d514197..f74b5ec14f1c 100644
--- a/share/man/man4/man4.i386/keyboard.4
+++ b/share/man/man4/man4.i386/keyboard.4
@@ -6,7 +6,7 @@
.Nd pc keyboard interface
.Sh DESCRIPTION
-The PC keyboard is use as the console character input device. The keyboard
+The PC keyboard is used as the console character input device. The keyboard
is owned by the current virtual console.
To switch between the virtual consoles use the sequence
.Ar ALT+Fn
@@ -20,7 +20,8 @@ present on the keyboard via a special keysequence.
To use this facility press and hold down ALT,
then enter a decimal number from 0-255 via the numerical keypad, then
release ALT. The entered value is then used as the ASCII value for one
-character. This way it is possible to enter any ASCII value.
+character. This way it is possible to enter any ASCII value, not present
+on the keyboard.
The keyboard is configurable to suit the individual user and the different
national layout.
@@ -130,5 +131,5 @@ The function keys are numbered like this:
.Ed
.Pp
.Sh AUTHOR
- S_ren Schmidt
- Email: (baukno@login.dkuug.dk -or- sos@kmd-ac.dk)
+ Søren Schmidt
+ Email: (sos@login.dkuug.dk -or- sos@kmd-ac.dk)
diff --git a/share/man/man4/man4.i386/lpt.4 b/share/man/man4/man4.i386/lpt.4
index 070a53e0a008..0fb89387bab9 100644
--- a/share/man/man4/man4.i386/lpt.4
+++ b/share/man/man4/man4.i386/lpt.4
@@ -37,23 +37,37 @@
.Nd
Parallel port driver
.Sh SYNOPSIS
+For interrupt-driven ports:
.Cd "device lpt0 at isa? port" \&"IO_LPT1\&" tty irq 7 vector lptintr
.Cd "device lpt1 at isa? port" \&"IO_LPT2\&" tty irq 7 vector lptintr
.Cd "device lpt2 at isa? port" \&"IO_LPT3\&" tty irq 7 vector lptintr
+.sp
+For BIOS-probed ports:
+.Cd "device lpt0 at isa? port? tty irq 7 vector lptintr"
+.sp
+For polled ports:
+.Cd "device lpt0 at isa? port? tty"
+.Cd "device lpt1 at isa? port" \&"IO_LPT2\&" tty
.Sh DESCRIPTION
-This driver provides access to parallel ports. It assumes that
-the parallel port controller interrupts the CPU properly. If
-this is not the case, the
-.Nm lpa
-driver should be used instead.
+This driver provides access to parallel ports.
+.sp
+The driver can be configured either to be either interrupt-driven, or
+to poll the printer. Ports that are configured to be
+interrupt-driven can be switched to polled mode by using the
+.Xr lptcontrol 1
+command.
+.sp
+This driver replaces the functionality of the
+.Xr lpa 4
+driver, which is now defunct.
.Sh FILES
.Bl -tag -width Pa -compact
.It Pa /dev/lpt0
first parallel port driver
.El
.Sh SEE ALSO
-.Xr lpa 4
+.Xr lptcontrol 1
.Sh BUGS
There are lots of them, especially in cheap parallel port implementations.
.Pp
-This driver could stand a rewrite.
+This driver could still stand a rewrite.
diff --git a/share/man/man4/man4.i386/screen.4 b/share/man/man4/man4.i386/screen.4
index a0df69cc3c5f..1d9326868522 100644
--- a/share/man/man4/man4.i386/screen.4
+++ b/share/man/man4/man4.i386/screen.4
@@ -9,7 +9,7 @@
Access to the
.Ar virtual consoles
are obtained through the device files
-tty01 - ttynn in /dev.
+ttyv0 - ttyvb in /dev.
Each of these files correspond to a seperate
virtual console.
All virtual console devices can be open at once, but only one is
@@ -20,7 +20,7 @@ Output to a virtual console that not currently is on the display is
saved in a buffer that holds a "screenfull" (normally 25) lines.
Any output written to
.Ar /dev/console
-(the original console device) is echoed to /dev/tty01.
+(the original console device) is echoed to /dev/ttyv0.
.Pp
To switch between the virtual consoles one uses the sequence
.Ar ALT+Fn
@@ -28,7 +28,7 @@ To switch between the virtual consoles one uses the sequence
virtual console with the same number as the function key is then
selected as the current virtual console, and given exclusive use of
the keyboard and display. This switch sequence can be changed via
-the keyboard mapping ioctl call (see keyboard.man)
+the keyboard mapping ioctl call (see keyboard.4)
.Pp
The number of virtual consoles is changeable in the system config
file, and need recompilation of the kernel to take any effect. The
@@ -57,7 +57,7 @@ CUF E[nC move cursor right n characters nd (kr)
CUB E[nD move cursor left n characters bs (kl)
-HPA E[n` move cursor character position n --
+HPA E[n` move cursor to character position n --
HPR E[na move cursor right n characters --
@@ -153,5 +153,5 @@ note: the first E in the sequences stands for ESC (0x1b)
.Ed
.Pp
.Sh AUTHOR
- S_ren Schmidt
- Email: (baukno@login.dkuug.dk -or- sos@kmd-ac.dk)
+ Søren Schmidt
+ Email: (sos@login.dkuug.dk -or- sos@kmd-ac.dk)
diff --git a/share/man/man4/man4.i386/sio.4 b/share/man/man4/man4.i386/sio.4
index 33c25e110b9c..8fcd2c17cfd1 100644
--- a/share/man/man4/man4.i386/sio.4
+++ b/share/man/man4/man4.i386/sio.4
@@ -34,39 +34,144 @@
.\"
.\" from: @(#)dca.4 5.2 (Berkeley) 3/27/91
.\" from: com.4,v 1.1 1993/08/06 11:19:07 cgd Exp
-.\" $Id: sio.4,v 1.1 1993/08/28 12:41:23 rgrimes Exp $
+.\" $Id: sio.4,v 1.8.2.1 1994/05/01 16:07:37 jkh Exp $
.\"
-.Dd August 28, 1993
+.Dd February 9, 1994
.Dt SIO 4 i386
.Os FreeBSD
.Sh NAME
.Nm sio
.Nd
-fast interrupt serial communications interface
+fast interrupt driven asynchronous serial communications interface
.Sh SYNOPSIS
+For standard ports:
.Cd "device sio0 at isa? port" \&"IO_COM1\&" tty irq 4 vector siointr
.Cd "device sio1 at isa? port" \&"IO_COM2\&" tty irq 3 vector siointr
.Cd "device sio2 at isa? port" \&"IO_COM3\&" tty irq 5 vector siointr
.Cd "device sio3 at isa? port" \&"IO_COM4\&" tty irq 9 vector siointr
+.sp
+For multiport cards:
+.Cd "options" \&"COM_MULTIPORT\&"
+.Cd "device sio4 at isa? port 0x2a0 tty irq 12 flags 0x401 vector siointr"
+.Cd "device sio5 at isa? port 0x2a8 tty flags 0x401 vector siointr"
+.Cd "device sio6 at isa? port 0x2b0 tty flags 0x401 vector siointr"
+.Cd "device sio7 at isa? port 0x2b8 tty flags 0x401 vector siointr"
+.sp
+For bidirectional use of ports:
+.Cd "options" \&"COM_BIDIR\&"
+.sp
+For control FIFO trigger:
+.Cd "options" \&"FIFO_TRIGGER=FIFO_TRIGGER_14\&"
+.sp
+Use 0x02 bit in flags field to disable FIFO on specified port.
.Sh DESCRIPTION
The
.Nm sio
-driver provides support for NS8250-, NS16450-, and NS16550-based
+driver provides support for NS8250-, NS16450-, NS16550 and NS16550A-based
.Tn EIA
.Tn RS-232C
.Pf ( Tn CCITT
-.Tn V.28 )
+.Tn V.24 )
communications interfaces. The NS8250 and NS16450 have single character
-buffers, and the NS16550 has a 16 character buffer.
+buffers, the NS16550A has a 16 character FIFO buffer.
.Pp
Input and output for each line may set to one of following baud rates;
50, 75, 110, 134.5, 150, 300, 600, 1200, 1800, 2400, 4800, 9600,
-19200, 38400, 57600, or 115200.
+19200, 38400, 57600, or 115200. Your hardware may limit your baud
+rate choices.
+.Pp
+The driver supports `multiport' cards.
+Multiport cards are those that have one or more groups of ports
+that share a common IRQ and Interrupt Request register set per group.
+Frequently 4 ports share 1 IRQ, some 8 port cards have 2 groups of 4 ports,
+thus using 2 IRQs.
+Some cards allow the first 2 serial ports to have seperate IRQs per port
+(as per DOS PC standard).
+.sp
+The
+.Nm flags
+keyword specifies for each
+.Nm device sio
+line in the kernel configuration file,
+whether the port is part of an IRQ sharing group, & if so,
+which port is the master device for
+the group (ie which port has the IRQ control registers).
+The master device is the port which
+has registers through which all interrupts of the port group are funneled.
+All ports of a port group report pending interrupts using this
+single register.
+.sp
+The master device is an integer embedded in the high byte of the
+.Nm flags
+bitfield, so all sio entries in the kernel config file that are part of a
+multiport card must include the correct
+.Nm flags
+specification.
+The bitwise assignment allows multiple port groups to
+be configured in one system. It does
+.Nm not
+imply that more than one port group (or card) can share
+the same physical interrupt line!
+.Pp
+In the synopsis the
+.Nm flags 0x401
+means that the 5th port (sio4) is the master
+device (so the MSB of the flags), and that the ports are part of a
+multiport card (the LSB of the flags, actually only the LS
+.Nm bit
+).
+F.e. if you have only two standard ports in addition to multiport
+card, this
+.Nm flags
+will be
+.Nm 0x201
+(assuming the control port is
+.Nm sio2
+).
+.Pp
+Which port is the master device depends on the card type. Consult
+the hardware documentation of your card.
+.Pp
+Serial ports controlled by the
+.Nm sio
+driver can be used for both dialin and dialout. Use
+.Xr comcontrol 8
+to enable/disable bidirectional use of the
+.Nm sio
+ports. The minor number of the dialout
+port is 128 higher than that of the corresponding dialin port. Use
+.Xr stty 1
+to enable or disable modem control as required by your setup.
+.Pp
+While testing new cards & resolving card config DIP header &
+.Nm sio flags
+settings, to avoid coms. failure from lack of full modem DC level
+settings on ports,
+you are recommended to temporarily use syntax such as:
+.Nm stty -f /dev/tty03 clocal
+or open
+.Nm /dev/cua03
+if you have bidirectional mode active
+to force serial port to open without
+.Nm O_NONBLOCK
+flag.
.Sh FILES
-.Bl -tag -width Pa
-.It Pa /dev/tty00
-.It Pa /dev/tty01
+.Bl -tag -width /dev/tty0? -compact
+.It Pa /dev/tty0?
+for hardwired terminals
+.El
+or
+.Bl -tag -width /dev/tty0? -compact
+.It Pa /dev/ttyd?
+for dialin ports (and dialout when bidirectional usage disabled)
+.It Pa /dev/cua0?
+for dialout ports when bidirectional usage enabled
.El
+.Pp
+The devices numbers are made from the set [0-9a-z] so that more than
+10 ports can be supported.
+/dev/tty0? and /dev/ttyd? are mutually exclusive, if you have
+/dev/tty0? corresponding /dev/ttyd? must be removed and vice versa.
.Sh DIAGNOSTICS
.Bl -diag
.It sio%d: silo overflow.
@@ -78,8 +183,9 @@ has overflowed and incoming data has been lost.
.\"with the code listed.
.El
.Sh SEE ALSO
-.Xr tty 4
-.Xr com 4
+.Xr tty 4 ,
+.Xr comcontrol 8 ,
+.Xr stty 1 .
.Sh HISTORY
The
.Nm
@@ -91,11 +197,23 @@ driver and is
.Sh BUGS
Data loss is not near as likely on busy systems as they are with the
.Xr com 4
-driver but they still can occur at very high baud rates on slow systems.
+driver but they still can occur at very high baud rates on slow systems. The
+use of NS16550A's helps lot to handle high baud rates.
+.Pp
+Stay away from NS16550 (so without the trailing A). These are early
+implementations of the chip with non-functional FIFO hardware.
.Pp
The constants which define the locations
-of the various seiral ports are holdovers from
+of the various serial ports are holdovers from
.Nm DOS .
+As shown, hex addresses can be and for clarity probably should be used instead.
+.Pp
+As usual, you get what you pay for; cheap NS16550 clones generally don't work.
.Pp
-As usual, you get what you pay for; cheap NS16550 clones
-generally don't work.
+The multiport example is based on an AST/4 card, your
+mileage may vary however. Note that on the AST/4 the card's dipswitches should
+.Nm not
+be set to use interrupt sharing. AST/4-like interrupt sharing is only used when
+.Nm multiple
+AST/4 cards are installed in the same system. The sio driver does not
+support more than 1 AST/4 on one IRQ.
diff --git a/share/man/man4/man4.i386/spkr.4 b/share/man/man4/man4.i386/spkr.4
index b211674893f0..c9015b30e712 100644
--- a/share/man/man4/man4.i386/spkr.4
+++ b/share/man/man4/man4.i386/spkr.4
@@ -1,78 +1,141 @@
-.TH SPKR 4
-.SH NAME
-spkr \- console speaker device driver
-.SH DESCRIPTION
+.Dd November 7, 1993
+.Dt SPKR 4
+.Os FreeBSD
+.Sh NAME
+.Nm spkr
+.Nd console speaker device driver
+.Sh SYNOPSIS
+.Cd pseudo-device speaker
+.Fd #include <machine/speaker.h>
+.Sh DESCRIPTION
The speaker device driver allows applications to control the PC console
-speaker on an IBM-PC-compatible machine running UNIX.
-.PP
-Only one process may have this device open at any given time; open() and
-close() are used to lock and relinquish it. An attempt to open() when
-another process has the device locked will return -1 with an EBUSY error
-indication. Writes to the device are interpreted as 'play strings' in a
-simple ASCII melody notation. An ioctl() for tone generation at arbitrary
+speaker on an
+.Tn IBM-PC Ns --compatible
+machine running FreeBSD.
+.Pp
+Only one process may have this device open at any given time;
+.Xr open 2
+and
+.Xr close 2
+are used to lock and relinquish it. An attempt to open when
+another process has the device locked will return -1 with an
+.Er EBUSY
+error
+indication. Writes to the device are interpreted as `play strings' in a
+simple ASCII melody notation. An
+.Xr ioctl 2
+request
+for tone generation at arbitrary
frequencies is also supported.
-.PP
-Sound-generation does \fInot\fR monopolize the processor; in fact, the driver
+.Pp
+Sound-generation does not monopolize the processor; in fact, the driver
spends most of its time sleeping while the PC hardware is emitting
tones. Other processes may emit beeps while the driver is running.
-.PP
-Applications may call ioctl() on a speaker file descriptor to control the
-speaker driver directly; definitions for the ioctl() interface are in
-sys/spkr.h. The tone_t structure used in these calls has two fields,
-specifying a frequency (in hz) and a duration (in 1/100ths of a second).
+.Pp
+Applications may call
+.Xr ioctl 2
+on a speaker file descriptor to control the
+speaker driver directly; definitions for the
+.Xr ioctl 2
+interface are in
+.Pa /usr/include/machine/speaker.h .
+The
+.Li tone_t
+structure used in these calls has two fields,
+specifying a frequency (in Hz) and a duration (in 1/100ths of a second).
A frequency of zero is interpreted as a rest.
-.PP
-At present there are two such ioctls. SPKRTONE accepts a pointer to a
-single tone structure as third argument and plays it. SPKRTUNE accepts a
+.Pp
+At present there are two such
+.Xr ioctl 2
+calls.
+.Dv SPKRTONE
+accepts a pointer to a
+single tone structure as third argument and plays it.
+.Dv SPKRTUNE
+accepts a
pointer to the first of an array of tone structures and plays them in
continuous sequence; this array must be terminated by a final member with
a zero duration.
-.PP
+.Pp
The play-string language is modelled on the PLAY statement conventions of
-IBM BASIC 2.0. The MB, MF and X primitives of PLAY are not useful in a UNIX
-environment and are omitted. The `octave-tracking' feature is also new.
-.PP
+.Tn IBM
+Advanced BASIC 2.0. The
+.Li MB ,
+.Li MF ,
+and
+.Li X
+primitives of PLAY are not
+useful in a timesharing environment and are omitted. The `octave-tracking'
+feature and the slur mark are new.
+.Pp
There are 84 accessible notes numbered 1-83 in 7 octaves, each running from
C to B, numbered 0-6; the scale is equal-tempered A440 and octave 3 starts
-with middle C. By default, the play function emits half-second notes with the
+with middle C. By default, the play function emits half-second notes with the
last 1/16th second being `rest time'.
-.PP
+.Pp
Play strings are interpreted left to right as a series of play command groups;
letter case is ignored. Play command groups are as follows:
-.PP
-CDEFGAB -- letters A through G cause the corresponding note to be played in the
-current octave. A note letter may optionally be followed by an \fIaccidental
-sign\fR, one of # + or -; the first two of these cause it to be sharped one
-half-tone, the last causes it to be flatted one half-tone. It may also be
-followed by a time value number and by sustain dots (see below). Time values
-are interpreted as for the L command below;.
-.PP
-O <n> -- if <n> is numeric, this sets the current octave. <n> may also be one
-of 'L' or 'N' to enable or disable octave-tracking (it is disabled by default).
-When octave-tracking is on, interpretation of a pair of letter notes will
-change octaves if necessary in order to make the smallest possible jump between
-notes. Thus "olbc" will be played as "olb>c", and "olcb" as "olc<b". Octave
-locking is disabled for one letter note following by >, < and O[0123456].
-.PP
-> -- bump the current octave up one.
-.PP
-< -- drop the current octave down one.
-.PP
-N <n> -- play note n, n being 1 to 84 or 0 for a rest of current time value.
-May be followedv by sustain dots.
-.PP
-L <n> -- sets the current time value for notes. The default is L4, quarter
-notes. The lowest possible value is 1; values up to 64 are accepted. L1 sets
-whole notes, L2 sets half notes, L4 sets quarter notes, etc..
-.PP
-P <n> -- pause (rest), with <n> interpreted as for L. May be followed by
-sustain dots. May also be written '~'.
-.PP
-T <n> -- Sets the number of quarter notes per minute; default is 120. Musical
+.Bl -tag -width CDEFGABxx
+.It Li CDEFGAB
+Letters A through G cause the corresponding note to be played in the
+current octave. A note letter may optionally be followed by an
+.Dq Em "accidental sign" ,
+one of # + or -; the first two of these cause it to be sharped one
+half-tone, the last causes it to be flatted one half-tone. It may
+also be followed by a time value number and by sustain dots (see
+below). Time values are interpreted as for the L command below.
+.It Ns Li O Sy n
+If
+.Sy n
+is numeric, this sets the current octave.
+.Sy n
+may also be one of
+.Li L
+or
+.Li N
+to enable or disable octave-tracking (it is disabled by default).
+When octave-tracking is on, interpretation of a pair of letter notes
+will change octaves if necessary in order to make the smallest
+possible jump between notes. Thus ``olbc'' will be played as
+``olb>c'', and ``olcb'' as ``olc<b''. Octave locking is disabled for
+one letter note following >, < and O[0123456]. (The octave-locking
+feature is not supported in
+.Tn IBM
+BASIC.)
+.It Li >
+Bump the current octave up one.
+.It Li <
+Drop the current octave down one.
+.It Ns Li N Sy n
+Play note
+.Sy n ,
+.Sy n
+being 1 to 84 or 0 for a rest of current time value.
+May be followed by sustain dots.
+.It Ns Li L Sy n
+Sets the current time value for notes. The default is
+.Li L4 ,
+quarter or crotchet notes. The lowest possible value is 1; values up
+to 64 are accepted.
+.Li L1
+sets whole notes,
+.Li L2
+sets half notes,
+.Li L4
+sets quarter notes, etc.
+.It Ns Li P Sy n
+Pause (rest), with
+.Sy n
+interpreted as for
+.Ns Li L Sy n .
+May be followed by
+sustain dots. May also be written
+.Li ~ .
+.It Ns Li T Sy n
+Sets the number of quarter notes per minute; default is 120. Musical
names for common tempi are:
-.TS
-a a a.
+.Bd -literal -offset indent
Tempo Beats Per Minute
very slow Larghissimo
Largo 40-60
@@ -90,28 +153,65 @@ fast Allegretto
Veloce
Presto 168-208
very fast Prestissimo
-.TE
-.PP
-M[LNS] -- set articulation. MN (N for normal) is the default; the last 1/8th of
-the note's value is rest time. You can set ML for legato (no rest space) or
-MS (staccato) 1/4 rest space.
-.PP
-Notes (that is, CDEFGAB or N command character groups) may be followed by
+.Ed
+.It Li M[LNS]
+Set articulation.
+.Li MN
+.Ns No ( Li N
+for normal) is the default; the last 1/8th of
+the note's value is rest time. You can set
+.Li ML
+for legato (no rest space) or
+.Li MS
+for staccato (1/4 rest space).
+.El
+.Pp
+Notes (that is,
+.Li CDEFGAB
+or
+.Li N
+command character groups) may be followed by
sustain dots. Each dot causes the note's value to be lengthened by one-half
for each one. Thus, a note dotted once is held for 3/2 of its undotted value;
dotted twice, it is held 9/4, and three times would give 27/8.
-.PP
+.Pp
+A note and its sustain dots may also be followed by a slur mark (underscore).
+This causes the normal micro-rest after the note to be filled in, slurring it
+to the next one. (The slur feature is not supported in
+.Tn IBM
+BASIC.)
+.Pp
Whitespace in play strings is simply skipped and may be used to separate
melody sections.
-.SH BUGS
+.Sh BUGS
Due to roundoff in the pitch tables and slop in the tone-generation and timer
hardware (neither of which was designed for precision), neither pitch accuracy
nor timings will be mathematically exact. There is no volume control.
-.PP
+.Pp
+The action of two or more sustain dots does not reflect standard musical
+notation, in which each dot adds half the value of the previous dot
+modifier, not half the value of the note as modified. Thus, a note dotted
+once is held for 3/2 of its undotted value; dotted twice, it is held 7/4,
+and three times would give 15/8. The multiply-by-3/2 interpretation,
+however, is specified in the
+.Tn IBM
+BASIC manual and has been retained for
+compatibility.
+.Pp
In play strings which are very long (longer than your system's physical I/O
blocks) note suffixes or numbers may occasionally be parsed incorrectly due
to crossing a block boundary.
-.SH FILES
-/dev/speaker -- speaker device file
-.SH AUTHOR
-Eric S. Raymond (esr@snark.thyrsus.com) Feb 1990
+.Sh FILES
+.Bl -tag -width /dev/speakerxx
+.It Pa /dev/speaker
+speaker device file
+.El
+.Sh AUTHOR
+Eric S. Raymond <esr@snark.thyrsus.com) June 1990
+.Sh "PORTED BY"
+Andrew A. Chernov <ache@astral.msk.su>
+.Sh HISTORY
+The
+.Nm
+device appeared in
+.Fx 1.0 .
diff --git a/share/man/man4/route.4 b/share/man/man4/route.4
index 63ca4f689204..dc620aba6e80 100644
--- a/share/man/man4/route.4
+++ b/share/man/man4/route.4
@@ -99,7 +99,7 @@ destination host and network. The combination of wildcard
routes and routing redirects can provide an economical
mechanism for routing traffic.
.Pp
-One opens the channel for passing routing control messasges
+One opens the channel for passing routing control messages
by using the socket call shown in the synopsis above:
.Pp
The
@@ -197,7 +197,7 @@ A message header consists of:
.Bd -literal
struct rt_msghdr {
u_short rmt_msglen; /* to skip over non-understood messages */
- u_char rtm_version; /* future binary compatability */
+ u_char rtm_version; /* future binary compatibility */
u_char rtm_type; /* message type */
u_short rmt_index; /* index for associated ifp */
pid_t rmt_pid; /* identify sender */
@@ -228,7 +228,7 @@ struct rt_metrics {
.Pp
Flags include the values:
.Bd -literal
-#define RTF_UP 0x1 /* route useable */
+#define RTF_UP 0x1 /* route usable */
#define RTF_GATEWAY 0x2 /* destination is a gateway */
#define RTF_HOST 0x4 /* host entry (net otherwise) */
#define RTF_NORMAL 0x8 /* subnet mask is cannonical */
@@ -238,7 +238,7 @@ Flags include the values:
#define RTF_MASK 0x80 /* subnet mask present */
.Ed
.Pp
-Specfiers for metric values in rmx_locks and rtm_inits are:
+Specifiers for metric values in rmx_locks and rtm_inits are:
.Bd -literal
#define RTV_SSTHRESH 0x1 /* init or lock _ssthresh */
#define RTV_RPIPE 0x2 /* init or lock _recvpipe */
diff --git a/share/man/man4/scsi.4 b/share/man/man4/scsi.4
new file mode 100644
index 000000000000..9ccb63e75551
--- /dev/null
+++ b/share/man/man4/scsi.4
@@ -0,0 +1,117 @@
+.Dd August 27, 1993
+.Dt SD 4
+.Os 386BSD/NetBSD
+.Sh NAME
+.Nm scsi
+.Nd scsi system
+.Sh SYNOPSIS
+.Nm device-driver scbus
+.Sh DESCRIPTION
+The
+.Em scsi
+system provides a uniform and modular system for the implimentation
+of drivers to control various scsi devices, and to utilise different
+scsi adapters through adapter drivers. When the system probes the
+.Em SCSI
+busses, it attaches any devices it finds to the appropriate
+drivers. If no driver seems appropriate, then at attaches the device to the
+uk (unknown) driver (if configured), so that user level scsi ioctls may
+still be performed against the device.
+.Sh KERNEL CONFIGURATION
+Continuously changing. check your nearest bsd mailing list.
+The option SCSIDEBUG enables the debug ioctl.
+.Sh IOCTLS
+There are a number of ioctls that will (when the next stage is complete)
+work on any
+.Em SCSI
+device. They are defined in
+.Em sys/scsiio.h
+and can be applied against any scsi device that allows both read and write,
+though for devices such as tape, it must be applied against the control
+device. See the manual page for each device type for more information about
+how generic scsi ioctls may be applied to a specific device.
+.Bl -tag -width DIOCSDINFO____
+.It Dv SCIOCRESET*
+reset a device.
+.It Dv SCIOCDEBUG
+Turn on debugging.. All scsi operations originating from this device's driver
+will be traced to the console, along with other information. Debugging is
+controlled by four bits, described in the header file. If no debugging is
+configured into the kernel, debugging will have no effect.
+.Em SCSI
+debugging is controlled by the configuration option
+.Em SCSIDEBUG.
+.It Dv SCIOCCOMMAND
+Take a scsi command and data from a user process and apply them to the scsi
+device. Return all status information and return data to the process. The
+ioctl will return a successful status even if the device rejected the
+command. As all status is returned to the user, it is up to the user
+process to examine this information to decide the success of the command.
+.It Dv SCIOCREPROBE
+Ask the system to probe the scsi busses for any new devices. If it finds
+any, they will be attached to the appropriate drivers. The search can be
+narrowed to a specific bus, target or lun. The new device may or may not
+be related to the device on which the ioctl was performed.
+.It Dv SCIOCIDENTIFY
+Ask the driver what it's bus, target and lun are.
+.It Dv SCIOCDECONFIG
+Ask the device to dissappear. This may not happen if the device is in use.
+.El
+.Sh NOTES
+the generic scsi part of the system is still being mapped out.
+Watch this space for changes.
+.Pp
+ A device by the name of su (scsi_user)
+(e.g su0-0-0) will map bus, target and lun to minor numbers. I have not
+yet decided yet whether this device will be able to open a device that is
+already controlled by an explicit driver.
+.Sh ADAPTERS
+The system allows common device drivers to work through many different
+types of adapters. The adapters take requests from the upper layers and do
+all IO between the
+.Em SCSI
+bus and the system. The maximum size of a transfer is governed by the
+adapter. Most adapters can transfer 64KB in a single operation, however
+many can transfer larger amounts.
+.Sh TARGET MODE
+Some adapters support
+.Em Target mode
+in which the system is capable of operating as a device, responding to
+operations initioated by another system. Target mode will be supported for
+some adapters, but is not yet complete for this version of the scsi system.
+.Sh FILES
+see other scsi device entries.
+.Sh DIAGNOSTICS
+When the kernel is compiled with option SCSIDEBUG, the SCIOCDEBUG ioctl
+can be used to enable various amounts of tracing information on any
+specific device. Devices not being traced will not produce trace information.
+The four bits that make up the debug level, each control certain types
+of debugging information.
+.Bl -tag -width THIS_WIDE_PLEASE
+.It Dv Bit 0
+Bit 0 shows all scsi bus operations including scsi commands,
+error information and the first 48 bytes of any data transferred.
+.It Dv Bit 1
+Bit 1 shows routines called.
+.It Dv Bit 2
+Bit 2 shows information about what branches are taken and often some
+of the return values of functions.
+.It Dv Bit 3
+Bit 3 shows more detailed information including DMA scatter-gather logs.
+.El
+.Sh SEE ALSO
+.Xr ch 4
+.Xr cd 4
+.Xr sd 4
+.Xr st 4
+.Xr uk 4
+.Xr su 4
+.Xr aha 4
+.Xr ahb 4
+.Xr bt 4
+.Xr uha 4
+.Sh HISTORY
+This
+.Nm
+system appeared in MACH 2.5 at TRW.
+
diff --git a/share/man/man4/sd.4 b/share/man/man4/sd.4
index 3bb297384022..da0ea98b6e3b 100644
--- a/share/man/man4/sd.4
+++ b/share/man/man4/sd.4
@@ -52,6 +52,7 @@ and the next,
.Em sd1
etc.
.Pp
+.Sh PARTITIONING
The
.Nm
driver allows the disk to have two levels of partitioning.
@@ -122,7 +123,10 @@ The fourth partition is special. No matter what the disklabel
says, the fourth partition (partition d) reflectls the entire disk, including
those areas OUTSIDE the BSD partitions. At some times it is suggested that
the c partition might be used to represent the entire BSD partition, so these
-two partitions should be avoided when laying out filesystems.
+two partitions should be avoided when laying out filesystems. The fourth
+partition must be used for general
+.Xr scsi 4
+ioctls.
.Pp
While partitions are only theoretically valid within the BSD partition, they
are specified in terms of absolute block numbers, so it is possible to
@@ -130,6 +134,7 @@ specify a partition that lies outside of the BSD partition. This is useful
if one wants to have a /dev entry that points to a partition belonging
to another OS (e.g. DOS).
.Pp
+.Sh KERNEL CONFIGURATION
In configuring, if an optional
.Ar count
is given in
@@ -138,6 +143,7 @@ Most storage for them is allocated only when found so a large number
of configured devices is cheap. (once the first has included the driver).
.Pp
+.Sh IOCTLS
The following
.Xr ioctl 2
calls apply to scsi disks as well as to other disks. They are defined
@@ -166,8 +172,26 @@ write protect of the disklabel on the disk.
.It Dv DIOCWDINFO
Give the driver a new disklabel to use. The driver WILL try write the new
disklabel to the disk.
-.Pp
.El
+.Pp
+In addition, the
+.Xr scsi 4
+general ioctls may be used with the
+.Nm
+driver, but only against the fourth (whole disk) partition.
+.Sh NOTES
+If a removable device is attached to the
+.Nm
+driver, then the act of changing the media will invalidate the
+disklabel and information held within the kernel. To stop corruption,
+All accesses to the device will be discarded until there are no more
+open file descriptors referencing the device. During this period, all
+new open attempts will be rejected. When No more open file descriptors
+reference the device, the first next open will load a new set of
+figures (including disklabel) for the drive.
+
+An ioctl to map out a bad block is planned. (the code is already present
+in the driver).
.Sh FILES
.Bl -tag -width /dev/rsd[0-9][a-h] -compact
diff --git a/share/man/man4/spp.4 b/share/man/man4/spp.4
index 8dde3fd58d7d..e645a2e67f27 100644
--- a/share/man/man4/spp.4
+++ b/share/man/man4/spp.4
@@ -165,7 +165,7 @@ exists.
when set, this determines the data stream type and whether
the end of message bit is to be set on every ensuing packet.
.It Dv SO_MTU
-This specifies the maximum ammount of user data in a single packet.
+This specifies the maximum amount of user data in a single packet.
The default is 576 bytes - sizeof(struct spidp). This quantity
affects windowing \- increasing it without increasing the amount
of buffering in the socket will lower the number of unread packets
diff --git a/share/man/man4/st.4 b/share/man/man4/st.4
index 5223121880d6..48cd07eec64b 100644
--- a/share/man/man4/st.4
+++ b/share/man/man4/st.4
@@ -14,7 +14,7 @@ driver provides support for a
.Em scsi
tape. It allows the tape
to be run in upto four different modes depending on minor numbers
-and supports several different 'close' modes.
+and supports several different 'sub modes'.
The device can have both a
.Em raw
interface
@@ -52,18 +52,62 @@ and the next,
.Em st1
etc.
.Pp
+.Sh MOUNT SESSIONS
The
.Nm
-driver allows the tape to have four different modes of operation.
-They are controlled by bits 2 and 3 of the minor number. In addition, bits
-0 and 1 of the minor number are interpretted as being 'close modes'.
-The following close modes are supported (1 free, suggestions accepted)
+driver is based around the concept of a
+.Em Mount Session
+, which is defined as the period between the time that a tape is mounted,
+and the time when it is unmounted. Any parameters set during a
+.Em Mount Session
+remain in effect for the remainder of the session or until replaced. The
+Tape can be unmounted, bringing the session to a close in several ways.
+These include:
+.Bl -tag -width ABOUT_THIS_BIG_BUT_REALLY_BIGGER
+.It Pa closing an 'unmount device'
+This is referred to as sub-mode 00 (see below). An example is /dev/rst0.
+.It Pa an MTOFFL ioctl
+Reachable throught the 'offline' command of
+.Xr st 1
+.It Pa Openning another mode.
+Openning a different mode will implicitly unmount the tape, thereby closing
+off the mode that was previously mounted. All parameters will be loaded
+freshly from the new mode. (see below for more on 'modes').
+.El
+.Pp
+Parameters that are required to last across the unmounting of a tape,
+should be set on the control device. This is submode 3 (see below) and is
+reached through a file with a name of the form /dev/st{y}ctl.{x}, where
+{y} is the drive number and {x} is the mode number.
+.Pp
+.Sh MODES AND SUB MODES
+There are four Operation modes. These are controlled by bits 2
+and 3 of the minor number and are designed to allow people to easily
+read and write different formats of tape on devices that allow
+multiple formats. The parameters for each mode can be set individually
+by hand with the
+.Xr st 1
+variant of the
+.Xr mt 1
+command. When a device corresponding to a particular mode is first mounted,
+The operating parameters for that
+.Em Mount Session
+Are copied from that mode. Further changes to the parameters during the
+session will change those in effect for the session but not those set
+in the Operating Mode. To change the parameters for an Operating Mode,
+One must either assign the parameters to the control device, or compile
+them into the 'Rogues Gallery' table within the driver.
+.Pp
+In addition to the four Operation Modes mentionned above,
+bits 0 and 1 of the minor number are interpretted as being 'sub-modes'.
+The following sub-modes are supported
.Bl -tag -width ABOUT_THIS_BIG
.It Pa 00
A close will rewind the device. If the tape has been
written, then a Filemark will be written before the rewind is requested.
+The device is UNMOUNTED.
.It Pa 01
-A close will leave the tape loaded.
+A close will leave the tape MOUNTED.
If the tape was written to a filemark will be written.
No other head positioning takes place.
Any further reads or writes will occur directly after the
@@ -72,76 +116,66 @@ last read, or the written filemark.
A close will rewind the device. If the tape has been
written, then a Filemark will be written before the rewind is requested.
On completion of the rewind an UNLOAD command will be issued.
+The device is UNMOUNTED.
.It Pa 11
-Not yet defined.. your suggestions welcome?
-Possibly like 01 but if the filemark has not already been encountered
-on a read, skip forward until it is found.
+This is a special mode.
+It is known as the
+.Em CONTROL DEVICE
+for the mode. Parameters set for the mode while in this sub
+mode will be remembered from one mount to the next. This allows the
+system administrator to set different characteristics (e.g. density,
+blocksize, (and eventually compression)) on each mode, and have the
+different modes keep those parameters independent of any parameter
+changes a user may invoke during a single mount session. At the
+completion of the user's mount session, drive parameters will revert
+to those set by the administrator. IO operations cannot be performed
+on this device/submode. General
+.Xr scsi 4
+ioctls
+.Em MUST
+be performed against the control device.
.El
-
+.Sh BLOCKING MODES
Scsi Tapes may run in either 'variable' or 'fixed block' modes.
Most QIC type devices run in Fixed block mode, where most 'reel to reel' tapes and
many new cartridge formats, allow variable blocksize. The difference between
the two is as follows:
.Bl -tag -width variable-blocksize
.It Pa Variable Blocksize
-Each write made to the device results in a single logical record written to
-the tape. You can never read or write PART of a record from tape, (though you
-may request a larger block and read a smaller record). You cannot read
-multiple blocks either.
-Data from a single write
-is therefore read by a single read. The block size used may be any value
-supported by the device, the scsi adapter and the system.
-(often variable between 1 byte and 64k (sometimes more)).
+Each write made to the device results in a single logical record
+written to the tape. You can never read or write PART of a record
+from tape, (though you may request a larger block and read a smaller
+record). You cannot read multiple blocks either. Data from a single
+write is therefore read by a single read. The block size used may
+be any value supported by the device, the scsi adapter and the
+system. (often variable between 1 byte and 64k (sometimes more)).
.Pp
-When reading a variable record/block from the tape,
-the head is logically considered to be immediatly after the last item read,
-and before the next item after that. If the next item is a Filemark, but
-you never read it because you have all the data, then the next process to read
-will immediatly read the filemark and return EOF. (assuming you were
-in non-rewind mode).
+When reading a variable record/block from the tape, the head is
+logically considered to be immediately after the last item read,
+and before the next item after that. If the next item is a Filemark,
+but you never read it because you have all the data, then the next
+process to read will immediately read the filemark and return EOF.
+(assuming you were in non-rewind mode).
.It Pa fixed Blocksize
-Data written by the user is passed to the tape as a succession of
-fixed size blocks. It may be contiguouse in ram and read in a single DMA
-pass, however it is considered to be a series of independent blocks. You may
-never write an amount of data that is not an exact multiple of the blocksize.
-You may read and write the same data as a different set of records,
-In other words, blocks that were written together may be read separatly, and
-visa versa.
+Data written by the user is passed to the tape as a succession of
+fixed size blocks. It may be contiguouse in ram and read in a single
+DMA pass, however it is considered to be a series of independent
+blocks. You may never write an amount of data that is not an exact
+multiple of the blocksize. You may read and write the same data
+as a different set of records, In other words, blocks that were
+written together may be read separatly, and visa versa.
.Pp
- If you ask for more blocks than there are left in the file,
-then the drive will encounter the filemark. Because there is some data to
-return to you (unless there were no records before the filemark) the driver
-will return the data to you (less than you requested), but hide from
-you the discovery of the Filemark. The NEXT read will be returned
-immediatly with an EOF. If you never Make the next read, but close the device,
-the next process to read
-will immediatly read the filemark and return EOF. (assuming you were
-in non-rewind mode).
+If you ask for more blocks than there are left in the file, then
+the drive will encounter the filemark. Because there is some data
+to return to you (unless there were no records before the filemark)
+the driver will return the data to you (less than you requested),
+but hide from you the discovery of the Filemark. The NEXT read
+will be returned immediately with an EOF. If you never Make the next
+read, but close the device, the next process to read will immediately
+read the filemark and return EOF. (assuming you were in non-rewind
+mode).
.El
-
-There are four Operation modes. These are controlled by bits 2 and 3 of
-the minor number and are designed to allow people to easily read
-and write different formats of tape on devices that allow multiple formats.
-The formats are: 00-default, 01-high-density, 10-medium-density, and
-11-low-density, though the actual densities in high, medium and low
-can be set by hand with the
-.Xr st 1
-variant of the
-.Xr mt 1
-command.
-The exact mechanism for setting the densities may change in the future.
-.Pp
-Because different tape drives behave differently, there is a mechanism
-within the source to st, to quickly and conveniently recognise and deal
-with brands and models of drive that have special requirements.
-.Pp
-There is a table (called the rogues gallery) in which the indentification
-strings of known errant drives can be stored. Along with each is
-a set of flags that allows the setting of densities for each
-of the 4 modes, along with a set of 'QUIRK' flags that can be
-used to enable or disable sections of code within the driver if a particular
-drive is recognised.
-.Pp
+.Sh FILEMARK HANDLING
The handling of filemarks on write is pretty much automatic. If you
have written to the tape, and not done a read since, then a filemark will
be written to the tape when you close the device. If a rewind is requested
@@ -154,9 +188,10 @@ types of tape do not actually write two filemarks to tape,
but when read, report a 'phantom' filemark when the last file is read.
These devices include the QIC family of devices. It might be that this
set of devices is the same set as that of fixed block devices. This has not
-been detirmined yet, and they are treated as separate behaviours by the
+been detirmined yet, and they are treated as separate behaviors by the
driver at this time.
.Pp
+.SH KERNEL CONFIGURATION
In configuring, if an optional
.Ar count
is given in
@@ -164,6 +199,18 @@ the specification, that number of scsi tapes are configured;
Most storage for them is allocated only when found so a large number
of configured devices is cheap. (once the first has included the driver).
.Pp
+Because different tape drives behave differently, there is a mechanism
+within the source to st, to quickly and conveniently recognise and deal
+with brands and models of drive that have special requirements.
+.Pp
+There is a table (called the rogues gallery) in which the indentification
+strings of known errant drives can be stored. Along with each is
+a set of flags that allows the setting of densities and blocksizes for each
+of the 4 modes, along with a set of 'QUIRK' flags that can be
+used to enable or disable sections of code within the driver if a particular
+drive is recognised.
+.Pp
+.Sh IOCTLS
The following
.Xr ioctl 2
calls apply to scsi tapes. Some also apply to other tapes. They are defined
@@ -203,34 +250,51 @@ Enable controller Buffering.
.It Pa MTNOCACHE
Disable controller Buffering.
.It Pa MTSETBSIZ
-Set the blocksize to use for the device. If the device is capable of
+Set the blocksize to use for the device/mode. If the device is capable of
variable blocksize operation, and the blocksize is set to 0, then the drive
-will be driven in variable mode.
+will be driven in variable mode. This parameter is in effect for the present
+mount session only, unless set on the control device.
.It Pa MTSETDNSTY
Set the Density value (see
.Xr st 1
) to use when running in the mode openned (minor bits 2,3).
+This parameter is in effect for the present
+mount session only, unless set on the control device.
.El
.It Pa MTIOCIEOT
?Set END of TAPE processing... not yet supported.
.It Pa MTIOCEEOT
?Set END of TAPE processing... not yet supported.
.El
+.Pp
+In addition, The
+.Nm
+driver will allow the use of any of the general
+.Xr scsi 4
+ioctls, as long as the control device is used.
.Sh FILES
-.Bl -tag -width /dev/[hml][n][e]rst[0-9] -compact
-.It Pa /dev/[hml][n][e]rst[0-9]
+.Bl -tag -width /dev/[n][e]rst[0-9].[0-3] -compact
+.It Pa /dev/[n][e]rst[0-9].[0-3]
general form:
-.It Pa /dev/hrst0
-High density, rewind on close
-.It Pa /dev/mnrst0
-Medium density, No rewind on close
-.It Pa /dev/lerst0
-Low density, Eject on close (if capable)
+.It Pa /dev/rst0.0
+Mode 0, rewind on close
+.It Pa /dev/nrst0.2
+Mode 2, No rewind on close
+.It Pa /dev/erst0.3
+Mode 3, Eject on close (if capable)
.It Pa /dev/rst0
-default density, rewind on close
+Another name for rst0.0
.It Pa /dev/nrst0
-default density, No rewind on close
+Another name for nrst0.0
+.It Pa /dev/st0ctl.0
+Parameters set to this device become the default parameters for [en]rst0.0
+.It Pa /dev/st0ctl.1
+Parameters set to this device become the default parameters for [en]rst0.1
+.It Pa /dev/st0ctl.2
+Parameters set to this device become the default parameters for [en]rst0.2
+.It Pa /dev/st0ctl.3
+Parameters set to this device become the default parameters for [en]rst0.3
.El
.Sh DIAGNOSTICS
None.
diff --git a/share/man/man4/su.4 b/share/man/man4/su.4
new file mode 100644
index 000000000000..9c16c3075e7d
--- /dev/null
+++ b/share/man/man4/su.4
@@ -0,0 +1,57 @@
+.Dd August 27, 1993
+.Dt SU 4
+.Os 386BSD/NetBSD
+.Sh NAME
+.Nm su
+.Nd scsi user-level driver
+.Sh SYNOPSIS
+.Nm device-driver su
+.Sh DESCRIPTION
+The
+.Xr su
+driver provides support for a
+process to address arbitrary locations on the scsi bus. Minor
+numbers are mapped 1:1 to bus:target:lun. The lowest three bits being LUN
+and the next three bits being TARGET. Remaining bits are the bus number.
+.Pp
+A scsi adapter must also be separatly configured into the system
+before this driver makes sense.
+.Pp
+.Sh THE SU DEVICE IS NOT COMPLETED YET
+.Sh KERNEL CONFIGURATION
+There are no configuration parameters for the su option. It'e either there
+or it's not.
+
+.Pp
+.Sh IOCTLS
+The
+.Nm
+driver has no ioctls of it's own but rather acts as a medium for the
+generic
+.Xr scsi 4
+ioctls. These are described in
+.Em sys/scsiio.h.
+
+
+.Sh FILES
+.Bl -tag -width /dev/su0-0-0XXXXXXXXXXX -compact
+.It Pa /dev/su[0-9]-[0-7]-[0-7]
+su{x}-{y}-{z} is the su device for the device at bus x, target y, lun z
+.El
+.Sh DIAGNOSTICS
+All
+.Xr scsi 4
+debug ioclts work on
+.Nm
+devices.
+.Sh SEE ALSO
+.Xr sd 4
+.Xr st 4
+.Xr cd 4
+.Xr uk 4
+.Xr scsi 4
+.Sh HISTORY
+The
+.Nm
+driver appeared in 386BSD 0.1
+
diff --git a/share/man/man4/termios.4 b/share/man/man4/termios.4
index e1cd6f33e41f..ff476c7a1c2c 100644
--- a/share/man/man4/termios.4
+++ b/share/man/man4/termios.4
@@ -89,7 +89,7 @@ A job control shell
operating interactively (that is, reading commands from a terminal)
normally groups related processes together by placing them into the
same process group. A set of processes in the same process group
-is collectively refered to as a "job". When the foreground process
+is collectively referred to as a "job". When the foreground process
group of the terminal is the same as the process group of a particular
job, that job is said to be in the "foreground". When the process
group of the terminal is different than the process group of
@@ -105,7 +105,7 @@ be started in the background (as denoted by the shell operator "&"),
it never changes the process group of the terminal and doesn't
wait for the job to complete (that is, it immediately attempts to read the next
command). If the job is started in the foreground, the user may
-type a key (ususally
+type a key (usually
.Ql \&^Z )
which generates the terminal stop signal
.Pq Dv SIGTSTP
@@ -226,7 +226,7 @@ when this limit is exceeded depends on the setting of the
flag in the termios
.Fa c_iflag .
If this flag is set, the terminal
-is a sent an
+is sent an
.Tn ASCII
.Dv BEL
character each time a character is recieved
@@ -952,7 +952,7 @@ characters are transmitted are implementation defined.
If
.Dv IMAXBEL
is set and the input queue is full, subsequent input
-shall causes an
+shall cause an
.Tn ASCII
.Dv BEL
character to be transmitted to the
diff --git a/share/man/man4/tp.4 b/share/man/man4/tp.4
index 5b769377ba8a..b2282e061287 100644
--- a/share/man/man4/tp.4
+++ b/share/man/man4/tp.4
@@ -146,7 +146,7 @@ connect, confirm, and disconnect data.
See
.Xr sendmsg 2
and
-.Xr recmsgv 2 ,
+.Xr recvmsg 2 ,
and further discussion
below for the formats of the data in the ancillary data buffer.
If the
@@ -349,7 +349,7 @@ nonzero short integer [various]
.br
Number of clock ticks that the local TP entity
will wait before sending an acknowledgment for normal data
-(not applicable if the acknowlegement strategy is
+(not applicable if the acknowledgement strategy is
.Dv TPACK_EACH ) .
This parameter applies only to class 4.
.It Ar p_ref_ticks
diff --git a/share/man/man4/uk.4 b/share/man/man4/uk.4
new file mode 100644
index 000000000000..cc2fa7fa3ad8
--- /dev/null
+++ b/share/man/man4/uk.4
@@ -0,0 +1,60 @@
+.Dd October 11, 1993
+.Dt UK 4
+.Os 386BSD/NetBSD
+.Sh NAME
+.Nm uk
+.Nd scsi user-level driver
+.Sh SYNOPSIS
+.Nm device-driver uk
+.Sh DESCRIPTION
+The
+.Xr uk
+driver provides support for a
+process to address devices on the scsi bus for which there is no configured
+driver.
+.Nm
+devices are numbered in the order they are found.
+.Pp
+A scsi adapter must also be separatly configured into the system
+before this driver makes sense.
+.Pp
+.Sh KERNEL CONFIGURATION
+If an count is given that number of
+.Nm
+devices will be configured into the kernel.
+
+
+.Pp
+.Sh IOCTLS
+The
+.Nm
+driver has no ioctls of it's own but rather acts as a medium for the
+generic
+.Xr scsi 4
+ioctls. These are described in
+.Em sys/scsiio.h.
+
+
+.Sh FILES
+.Bl -tag -width /dev/uk0XXX -compact
+.It Pa /dev/uk[0-255]
+uk{x} is the 'xth'unknown device found.
+.El
+.Sh DIAGNOSTICS
+All
+.Xr scsi 4
+debug ioclts work on
+.Nm
+devices.
+.Sh SEE ALSO
+.Xr sd 4
+.Xr st 4
+.Xr cd 4
+.Xr ch 4
+.Xr su 4
+.Xr scsi 4
+.Sh HISTORY
+The
+.Nm
+driver appeared in 386BSD 0.1
+
diff --git a/share/man/man4/unix.4 b/share/man/man4/unix.4
index 3ca5b4a842b6..eddbc865dfbb 100644
--- a/share/man/man4/unix.4
+++ b/share/man/man4/unix.4
@@ -161,6 +161,11 @@ when the destination socket is closed.
.%B PS1
.%N 8
.Re
+.Sh BUGS
+.Tn UNIX
+is a registered trademark, so in the future this communications domain
+will be known as the ``local'' domain,
+.Dv PF_LOCAL .
.Sh HISTORY
The
.Tn UNIX Ns -domain
diff --git a/share/man/man5/a.out.5 b/share/man/man5/a.out.5
index 2c23aad4c9f4..34e451524144 100644
--- a/share/man/man5/a.out.5
+++ b/share/man/man5/a.out.5
@@ -375,6 +375,21 @@ The
.Pa a.out.h
include file appeared in
.At v7 .
+.Pp
+.Em Bss
+stands for ``Block Started by Symbol'', and denotes storage which must be
+initialized to all zero-bits upon loading.
+The term
+.Em BSS
+comes from ancient assemblers, most likely from some of the pre-'360 IBM's.
+This section was introduced in
+days long past, when time_t was still a small number, to save diskspace.
+As dynamic allocation of resources have become increasingly widespread,
+and demand-paged, as opposed to swapped systems have spread, the savings
+in diskspace has almost vanished.
+Only very few programs have a bss section
+of non-zero size nowadays, and it is more often than not at sign that they
+could need a rewrite.
.Sh BUGS
Since not all of the supported architectures use the
.Fa a_mid
@@ -387,10 +402,6 @@ the byte order of the
.Fa exec
header is machine-dependent.
.Pp
-Nobody seems to agree on what
-.Em bss
-stands for.
-.Pp
New binary file formats may be supported in the future,
and they probably will not be compatible at any level
with this ancient format.
diff --git a/share/man/man5/dir.5 b/share/man/man5/dir.5
index 354f83d7fc82..5cb2d2a5ca0c 100644
--- a/share/man/man5/dir.5
+++ b/share/man/man5/dir.5
@@ -51,10 +51,10 @@ entry.
It consists of records (directory entries) each of which contain
information about a file and a pointer to the file itself.
Directory entries may contain other directories
-as well as plain files; such nested directories are refered to as
+as well as plain files; such nested directories are referred to as
subdirectories.
A hierarchy of directories and files is formed in this manner
-and is called a file system (or refered to as a file system tree).
+and is called a file system (or referred to as a file system tree).
.\" An entry in this tree,
.\" nested or not nested,
.\" is a pathname.
diff --git a/share/man/man5/fs.5 b/share/man/man5/fs.5
index a052dca9ece9..f437ff5b2480 100644
--- a/share/man/man5/fs.5
+++ b/share/man/man5/fs.5
@@ -148,7 +148,7 @@ struct fs {
quad fs_qbmask; /* ~fs_bmask - for use with quad size */
quad fs_qfmask; /* ~fs_fmask - for use with quad size */
long fs_postblformat; /* format of positional layout tables */
- long fs_nrpos; /* number of rotaional positions */
+ long fs_nrpos; /* number of rotational positions */
long fs_postbloff; /* (short) rotation block list head */
long fs_rotbloff; /* (u_char) blocks for each rotation */
long fs_magic; /* magic number */
diff --git a/share/man/man5/group.5 b/share/man/man5/group.5
index 9a53967f2796..359e4423f2a4 100644
--- a/share/man/man5/group.5
+++ b/share/man/man5/group.5
@@ -77,7 +77,7 @@ This field is rarely used
and an asterisk is normally placed in it rather than leaving it blank.
The
.Ar member
-field contains the names of users granted the priviledges of
+field contains the names of users granted the privileges of
.Ar group .
The member names are separated by commas with out spaces or newlines.
A user is automatically in a group if that group was specified
diff --git a/share/man/man5/remote.5 b/share/man/man5/remote.5
index d5f6d55571bf..8fc2debcf3e1 100644
--- a/share/man/man5/remote.5
+++ b/share/man/man5/remote.5
@@ -109,7 +109,6 @@ disconnect is requested by the user.
This host is on a dial-up line.
.It Cm \&dv
(str)
-.Tn UNIX
device(s) to open to establish a connection.
If this file refers to a terminal line,
.Xr tip 1
diff --git a/share/man/man7/environ.7 b/share/man/man7/environ.7
index 4aabf3019d75..04a35972ea0e 100644
--- a/share/man/man7/environ.7
+++ b/share/man/man7/environ.7
@@ -84,7 +84,7 @@ or
.Xr plot 1
which may exploit special terminal capabilities. See
.Pa /usr/share/misc/termcap
-.Pq Xr tmercap 5
+.Pq Xr termcap 5
for a list of terminal types.
.It Ev TERMCAP
The string describing the terminal in TERM, or, if
diff --git a/share/man/man7/mdoc.samples.7 b/share/man/man7/mdoc.samples.7
index 623913930018..c943953b0ecd 100644
--- a/share/man/man7/mdoc.samples.7
+++ b/share/man/man7/mdoc.samples.7
@@ -238,7 +238,7 @@ Title of article in a book or journal.
One way of passing a string
containing blank spaces is to use the hard or unpaddable space character
.Ql \e\ ,
-that is, a blank space preceeded by the escape character
+that is, a blank space preceded by the escape character
.Ql \e .
This method may be used with any macro but has the side effect
of interfering with the adjustment of text
@@ -517,7 +517,7 @@ arguments
.Ar infile
and
.Ar outfile
-from the example above might be refered to as
+from the example above might be referred to as
.Em operands
or
.Em file arguments .
@@ -1373,7 +1373,7 @@ Title of article.
Volume(s).
.El
.Pp
-The macros begining with
+The macros beginning with
.Ql %
are not callable, but may call only the trade name macro which
returns to its caller. The purpose is to allow trade names
@@ -1555,7 +1555,7 @@ in which they would be used.
.It \&.Sh ENVIRONMENT
The ENVIRONMENT section should reveal any related
environment
-variables and clues to their behaviour and/or usage.
+variables and clues to their behavior and/or usage.
.It \&.Sh EXAMPLES
There are several ways to create examples. See
the EXAMPLES section below
@@ -2130,7 +2130,7 @@ This is sufficient for the internal register names also.
.\" .Ed
.\" .Pp
If a non-escaped register name is given in the argument list of a request
-unpredictable behaviour will occur. In general, anytime huge portions
+unpredictable behavior will occur. In general, anytime huge portions
of text do not appear where expected in the output, or small strings
such as list tags disappear, chances are there is a misunderstanding
about an argument type in the argument list.
diff --git a/share/misc/inter.phone b/share/misc/inter.phone
index 3a4330794cfc..6085f9a6209e 100644
--- a/share/misc/inter.phone
+++ b/share/misc/inter.phone
@@ -104,7 +104,8 @@
43:222:Vienna:Austria
43:316:Graz:Austria
43:5222:Innsbruck:Austria
-44:1:London, Eng.:United Kingdom
+44:71:London (Inner), Eng.:United Kingdom
+44:81:London (Outer), Eng.:United Kingdom
44:203:Coventry, Eng.:United Kingdom
44:21:Birmingham, Eng.:United Kingdom
44:222:Cardiff, Wales:United Kingdom
@@ -125,10 +126,7 @@
44:752:Plymouth, Eng.:United Kingdom
44:782:Stoke-on-Trent, Eng.:United Kingdom
44:902:Wolverhampton, Eng.:United Kingdom
-45:3:Copenhagen:Denmark
-45:6:Aarhus:Denmark
-45:8:Aalborg:Denmark
-45:9:Odense:Denmark
+45:::Denmark
46:18:Uppsala:Sweden
46:21:Vasteras:Sweden
46:31:Goteborg:Sweden
diff --git a/share/mk/Makefile b/share/mk/Makefile
index ac05188323bc..4cd9f0bd35eb 100644
--- a/share/mk/Makefile
+++ b/share/mk/Makefile
@@ -1,7 +1,8 @@
-# @(#)Makefile 5.3 (Berkeley) 6/22/90
+# from: @(#)Makefile 5.3 (Berkeley) 6/22/90
+# $Id: Makefile,v 1.4 1994/02/13 18:14:57 jkh Exp $
-FILES= bsd.README bsd.doc.mk bsd.lib.mk bsd.man.mk bsd.own.mk \
- bsd.prog.mk bsd.subdir.mk sys.mk
+FILES= bsd.README bsd.dep.mk bsd.doc.mk bsd.lib.mk bsd.man.mk bsd.own.mk \
+ bsd.prog.mk bsd.subdir.mk sys.mk bsd.subdir_ports.mk
NOOBJ= noobj
all clean cleandir depend lint tags:
diff --git a/share/mk/bsd.README b/share/mk/bsd.README
index cfe2fdc7765a..2db42b425142 100644
--- a/share/mk/bsd.README
+++ b/share/mk/bsd.README
@@ -1,4 +1,5 @@
-# @(#)bsd.README 5.1 (Berkeley) 5/11/90
+# from:@(#)bsd.README 5.1 (Berkeley) 5/11/90
+# $Id: bsd.README,v 1.6 1994/01/31 06:10:29 rgrimes Exp $
This is the README file for the new make "include" files for the BSD
source tree. The files are installed in /usr/share/mk, and are, by
@@ -227,7 +228,6 @@ DPADD Additional dependencies for the program. Usually used for
LIBMP /usr/lib/libmp.a
LIBPC /usr/lib/libpc.a
LIBPLOT /usr/lib/libplot.a
- LIBRPC /usr/lib/sunrpc.a
LIBTELNET /usr/lib/libtelnet.a
LIBTERM /usr/lib/libterm.a
LIBUTIL /usr/lib/libutil.a
diff --git a/share/mk/bsd.dep.mk b/share/mk/bsd.dep.mk
new file mode 100644
index 000000000000..3663abd22361
--- /dev/null
+++ b/share/mk/bsd.dep.mk
@@ -0,0 +1,47 @@
+# $Id: bsd.dep.mk,v 1.3.2.1 1994/03/07 01:53:47 rgrimes Exp $
+
+# some of the rules involve .h sources, so remove them from mkdep line
+.if !target(depend)
+depend: beforedepend .depend afterdepend
+.if defined(SRCS)
+.depend: ${SRCS}
+ rm -f .depend
+ files="${.ALLSRC:M*.[sS]}"; \
+ if [ "$$files" != "" ]; then \
+ mkdep -a ${MKDEP} ${CFLAGS:M-[ID]*} ${AINC} $$files; \
+ fi
+ files="${.ALLSRC:M*.c}"; \
+ if [ "$$files" != "" ]; then \
+ mkdep -a ${MKDEP} ${CFLAGS:M-[ID]*} $$files; \
+ fi
+ files="${.ALLSRC:M*.cc} ${.ALLSRC:M*.C} ${.ALLSRC:M*.cxx}"; \
+ if [ "$$files" != " " ]; then \
+ mkdep -a ${MKDEP} ${CXXFLAGS:M-nostd*} ${CXXFLAGS:M-[ID]*} $$files; \
+ fi
+.else
+.depend:
+.endif
+.if !target(beforedepend)
+beforedepend:
+.endif
+.if !target(afterdepend)
+afterdepend:
+.endif
+.endif
+
+.if !target(tags)
+.if defined(SRCS)
+tags: ${SRCS}
+ -cd ${.CURDIR}; ctags -f /dev/stdout ${.ALLSRC:N*.h} | \
+ sed "s;\${.CURDIR}/;;" > tags
+.else
+tags:
+.endif
+.endif
+
+.if defined(SRCS)
+clean:
+cleandir: cleandepend
+cleandepend:
+ rm -f .depend ${.CURDIR}/tags
+.endif
diff --git a/share/mk/bsd.doc.mk b/share/mk/bsd.doc.mk
index 99089418741c..8d64918ddc74 100644
--- a/share/mk/bsd.doc.mk
+++ b/share/mk/bsd.doc.mk
@@ -1,5 +1,5 @@
# from: @(#)bsd.doc.mk 5.3 (Berkeley) 1/2/91
-# $Id: bsd.doc.mk,v 1.5 1993/10/11 03:48:05 rgrimes Exp $
+# $Id: bsd.doc.mk,v 1.6 1994/02/03 19:58:23 jkh Exp $
PRINTER?= ps
@@ -55,22 +55,25 @@ obj:
.endif
.endif
-clean cleandir:
+clean:
rm -f ${DOC}.* [eE]rrs mklog ${CLEANFILES}
- rm -rf obj
+
+cleandir:
+ rm -f ${DOC}.* [eE]rrs mklog ${CLEANFILES}
+ cd ${.CURDIR}; rm -rf obj
FILES?= ${SRCS}
install:
- @if [ ! -d "${DESTDIR}${BINDIR}/${DIR}" ]; then \
- /bin/rm -f ${DESTDIR}${BINDIR}/${DIR} ; \
- mkdir -p ${DESTDIR}${BINDIR}/${DIR} ; \
- chown root.wheel ${DESTDIR}${BINDIR}/${DIR} ; \
- chmod 755 ${DESTDIR}${BINDIR}/${DIR} ; \
+ @if [ ! -d "${DESTDIR}${BINDIR}/${VOLUME}" ]; then \
+ /bin/rm -f ${DESTDIR}${BINDIR}/${VOLUME} ; \
+ mkdir -p ${DESTDIR}${BINDIR}/${VOLUME} ; \
+ chown root.wheel ${DESTDIR}${BINDIR}/${VOLUME} ; \
+ chmod 755 ${DESTDIR}${BINDIR}/${VOLUME} ; \
else \
true ; \
fi
- ( cd ${.CURDIR} ; install ${COPY} -o ${BINOWN} -g ${BINGRP} -m 444 \
- Makefile ${FILES} ${EXTRA} ${DESTDIR}${BINDIR}/${DIR} )
+ install ${COPY} -o ${BINOWN} -g ${BINGRP} -m 444 ${DOC}.* \
+ ${DESTDIR}${BINDIR}/${VOLUME}
spell: ${SRCS}
(cd ${.CURDIR}; spell ${SRCS} ) | sort | \
diff --git a/share/mk/bsd.lib.mk b/share/mk/bsd.lib.mk
index 3ec696a8c5c0..313b52e72d9a 100644
--- a/share/mk/bsd.lib.mk
+++ b/share/mk/bsd.lib.mk
@@ -1,72 +1,17 @@
-# @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91
-#
-# $Log: bsd.lib.mk,v $
-# Revision 1.12 1993/10/08 12:19:22 rgrimes
-# This fix is from Chris Demetriou
-# You need a SUFFIX: line that has nothing on it so that the built-in
-# SUFFIX rules get cleared. This is why we did not build the c library
-# using the optimized assembler sources for the i386.
-#
-# You need to make clean in src/lib/libc and rebuild libc, then relink
-# the rest of the world for this fix to take effect.
-#
-# Revision 1.11 1993/08/15 01:27:28 nate
-# 1) Finishedup my DPSRCS fixes from way back. Now any .h files will
-# automatically be depended and stripped out of the SRCS line
-# (I also left the external definition as well, in case of non-src
-# dependencies)
-#
-# 2) Cleaned up some of the clean/cleandirs to have a more pleasing format
-# (rm -f on every line rather than line-continuations)
-#
-# 3) Added Charles Hannum's dependency fixes for a cleaner make depend that
-# works for both c/c++ files
-#
-# 4) Added default targets for (file.cc|cxx|C) -> file.o in the all
-# affected make macros. However, these as well as Charles c++
-# dependency fixes are commented out so that groff won't be broken.
-# I'll uncomment them after further testing on my box and seeing if
-# groff should be modified rather than relying on gcc2 doing the right
-# thing (subject to group vote)
-#
-# Revision 1.10 1993/08/11 03:15:20 alm
-# added rules .f.po (and .f.o) from Jonas.
-#
-# Revision 1.9 1993/08/05 18:45:53 nate
-# Removed the ranlib statements from before the install (since it's done
-# after the install as well), and changed ranlib -> ${RANLIB}
-#
-# Revision 1.8 1993/08/03 20:57:34 nate
-# Fixed macros so that you can do a
-# make maninstall at all times and have it not blow up
-#
-# Revision 1.7 1993/07/23 20:44:38 nate
-# Fixed a boo-boo and made the NOMAN environment variable work correctly with
-# both programs and libraries.
-#
-# Revision 1.6 1993/07/09 00:38:35 jkh
-# Removed $History$ line from hell (no leading #).
-#
-# Revision 1.5 1993/07/08 12:17:07 paul
-# Removed the core.* before disaster strikes.
-# I removed core as well since it's pretty redundant.
-#
-# Revision 1.4 1993/07/07 21:42:45 nate
-# Cleaned up header files and added core.* to clean directives
-#
-# Revision 1.3 1993/07/02 06:44:30 root
-# New manual page system
-#
-# Revision 1.2 1993/06/17 02:01:11 rgrimes
-# Make clean in src/lib/libc failed due to too many arguments to /bin/sh,
-# this was fixed for make cleandir in the patchkit, this fixes it for
-# make clean.
+# from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91
+# $Id: bsd.lib.mk,v 1.30 1994/02/09 16:23:21 ache Exp $
#
.if exists(${.CURDIR}/../Makefile.inc)
.include "${.CURDIR}/../Makefile.inc"
.endif
+.if exists(${.CURDIR}/shlib_version)
+SHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major
+SHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor
+.endif
+
+
LIBDIR?= /usr/lib
LINTLIBDIR?= /usr/libdata/lint
LIBGRP?= bin
@@ -82,12 +27,12 @@ BINMODE?= 555
.MAIN: all
# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
-#.SUFFIXES: .out .o .po .s .c .cc .cxx .C .f .y .l
+# .so used for PIC object files
.SUFFIXES:
-.SUFFIXES: .out .o .po .s .c .f .y .l
+.SUFFIXES: .out .o .po .so .s .S .c .cc .cxx .m .C .f .y .l
.c.o:
- ${CC} ${CFLAGS} -c ${.IMPSRC}
+ ${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
@${LD} -x -r ${.TARGET}
@mv a.out ${.TARGET}
@@ -96,26 +41,35 @@ BINMODE?= 555
@${LD} -X -r ${.TARGET}
@mv a.out ${.TARGET}
-#.cc.o .cxx.o .C.o:
-# ${CXX} ${CXXFLAGS} -c ${.IMPSRC}
-# @${LD} -x -r ${.TARGET}
-# @mv a.out ${.TARGET}
+.c.so:
+ ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
-#.cc.po .C.po .cxx.o:
-# ${CXX} -p ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
-# @${LD} -X -r ${.TARGET}
-# @mv a.out ${.TARGET}
+.cc.o .cxx.o .C.o:
+ ${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+ @${LD} -x -r ${.TARGET}
+ @mv a.out ${.TARGET}
+
+.cc.po .C.po .cxx.o:
+ ${CXX} -p ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+ @${LD} -X -r ${.TARGET}
+ @mv a.out ${.TARGET}
+
+.cc.so .C.so:
+ ${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
.f.o:
- ${FC} ${RFLAGS} -o ${.TARGET} -c ${.IMPSRC}
+ ${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
@${LD} -x -r ${.TARGET}
@mv a.out ${.TARGET}
.f.po:
- ${FC} -p ${RFLAGS} -o ${.TARGET} -c ${.IMPSRC}
+ ${FC} -p ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
@${LD} -X -r ${.TARGET}
@mv a.out ${.TARGET}
+.f.so:
+ ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
+
.s.o:
${CPP} -E ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
${AS} -o ${.TARGET}
@@ -128,12 +82,51 @@ BINMODE?= 555
@${LD} -X -r ${.TARGET}
@mv a.out ${.TARGET}
+.s.so:
+ ${CPP} -E -DPIC ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
+ ${AS} -k -o ${.TARGET}
+
+.S.o:
+ ${CPP} -E ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
+ ${AS} -o ${.TARGET}
+
+.S.po:
+ ${CPP} -E -DPROF ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
+ ${AS} -o ${.TARGET}
+
+.S.so:
+ ${CPP} -E -DPIC ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
+ ${AS} -k -o ${.TARGET}
+
+.m.po:
+ ${CC} ${CFLAGS} -p -c ${.IMPSRC} -o ${.TARGET}
+ @${LD} -X -r ${.TARGET}
+ @mv a.out ${.TARGET}
+
+.m.o:
+ ${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+ @${LD} -X -r ${.TARGET}
+ @mv a.out ${.TARGET}
+
.if !defined(NOPROFILE)
_LIBS=lib${LIB}.a lib${LIB}_p.a
.else
_LIBS=lib${LIB}.a
.endif
+.if !defined(NOPIC)
+.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
+_LIBS+=lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
+.endif
+.if defined(INSTALL_PIC_ARCHIVE)
+_LIBS+=lib${LIB}_pic.a
+.endif
+.endif
+
+.if !defined(PICFLAG)
+PICFLAG=-fpic
+.endif
+
all: ${_LIBS} # llib-l${LIB}.ln
OBJS+= ${SRCS:N*.h:R:S/$/.o/g}
@@ -151,6 +144,20 @@ lib${LIB}_p.a:: ${POBJS}
@${AR} cTq lib${LIB}_p.a `lorder ${POBJS} | tsort` ${LDADD}
${RANLIB} lib${LIB}_p.a
+SOBJS+= ${OBJS:.o=.so}
+lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: ${SOBJS}
+ @echo building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\)
+ @rm -f lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
+ @$(LD) -Bshareable \
+ -o lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
+ ${SOBJS} ${LDADD}
+
+lib${LIB}_pic.a:: ${SOBJS}
+ @echo building special pic ${LIB} library
+ @rm -f lib${LIB}_pic.a
+ @${AR} cTq lib${LIB}_pic.a ${SOBJS} ${LDADD}
+ ${RANLIB} lib${LIB}_pic.a
+
llib-l${LIB}.ln: ${SRCS}
${LINT} -C${LIB} ${CFLAGS} ${.ALLSRC:M*.c}
@@ -159,6 +166,8 @@ clean:
rm -f a.out Errs errs mklog ${CLEANFILES} ${OBJS}
rm -f lib${LIB}.a llib-l${LIB}.ln
rm -f ${POBJS} profiled/*.o lib${LIB}_p.a
+ rm -f ${SOBJS} shared/*.o
+ rm -f lib${LIB}.so.*.* lib${LIB}_pic.a
.endif
.if !target(cleandir)
@@ -167,24 +176,16 @@ cleandir:
rm -f lib${LIB}.a llib-l${LIB}.ln
rm -f ${.CURDIR}/tags .depend
rm -f ${POBJS} profiled/*.o lib${LIB}_p.a
+ rm -f ${SOBJS} shared/*.o
+ rm -f lib${LIB}.so.*.* lib${LIB}_pic.a
cd ${.CURDIR}; rm -rf obj;
.endif
-.if !target(depend)
-depend: .depend
-.depend: ${SRCS}
- rm -f .depend
- files="${.ALLSRC:M*.c}"; \
- if [ "$$files" != "" ]; then \
- mkdep -a ${MKDEP} ${CFLAGS:M-[ID]*} $$files; \
- fi
-# files="${.ALLSRC:M*.cc} ${.ALLSRC:M*.C} ${.ALLSRC:M*.cxx}"; \
-# if [ "$$files" != " " ]; then \
-# mkdep -a ${MKDEP} -+ ${CXXFLAGS:M-[ID]*} $$files; \
-# fi
+.if defined(SRCS)
+afterdepend:
@(TMP=/tmp/_depend$$$$; \
- sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po:/' < .depend > $$TMP; \
- mv $$TMP .depend)
+ sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so:/' < .depend > $$TMP; \
+ mv $$TMP .depend)
.endif
.if !target(install)
@@ -201,8 +202,17 @@ realinstall: beforeinstall
lib${LIB}_p.a ${DESTDIR}${LIBDIR}
${RANLIB} -t ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
.endif
-# install ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
-# llib-l${LIB}.ln ${DESTDIR}${LINTLIBDIR}
+.if !defined(NOPIC)
+.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
+ install ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
+ lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} ${DESTDIR}${LIBDIR}
+.endif
+.if defined(INSTALL_PIC_ARCHIVE)
+ install ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
+ lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
+ ${RANLIB} -t ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
+.endif
+.endif
.if defined(LINKS) && !empty(LINKS)
@set ${LINKS}; \
while test $$# -ge 2; do \
@@ -246,7 +256,7 @@ obj:
.else
obj:
@cd ${.CURDIR}; rm -rf obj; \
- here=`pwd`; dest=/usr/obj/`echo $$here | sed 's,/usr/src/,,'`; \
+ here=`pwd`; dest=/usr/obj`echo $$here | sed 's,^/usr/src,,'`; \
echo "$$here -> $$dest"; ln -s $$dest obj; \
if test -d /usr/obj -a ! -d $$dest; then \
mkdir -p $$dest; \
@@ -255,3 +265,5 @@ obj:
fi;
.endif
.endif
+
+.include <bsd.dep.mk>
diff --git a/share/mk/bsd.man.mk b/share/mk/bsd.man.mk
index 8abe4d3c2dbe..dd5aee25e345 100644
--- a/share/mk/bsd.man.mk
+++ b/share/mk/bsd.man.mk
@@ -1,4 +1,5 @@
-# @(#)bsd.man.mk 5.2 (Berkeley) 5/11/90
+# from: @(#)bsd.man.mk 5.2 (Berkeley) 5/11/90
+# $Id: bsd.man.mk,v 1.4 1994/01/31 06:10:33 rgrimes Exp $
.if exists(${.CURDIR}/../Makefile.inc)
.include "${.CURDIR}/../Makefile.inc"
diff --git a/share/mk/bsd.own.mk b/share/mk/bsd.own.mk
index 78b9a468b343..fb7a348c4633 100644
--- a/share/mk/bsd.own.mk
+++ b/share/mk/bsd.own.mk
@@ -1,4 +1,4 @@
-# @(#)bsd.own.mk 0.1 (RGrimes) 4/4/93
+# $Id: bsd.own.mk,v 1.3 1994/01/31 06:10:35 rgrimes Exp $
BINGRP?= bin
BINOWN?= bin
diff --git a/share/mk/bsd.prog.mk b/share/mk/bsd.prog.mk
index 0c569a83f9e0..80ab11fcf589 100644
--- a/share/mk/bsd.prog.mk
+++ b/share/mk/bsd.prog.mk
@@ -1,11 +1,11 @@
-# @(#)bsd.prog.mk 5.26 (Berkeley) 6/25/91
+# from: @(#)bsd.prog.mk 5.26 (Berkeley) 6/25/91
+# $Id: bsd.prog.mk,v 1.18 1994/01/31 06:10:37 rgrimes Exp $
.if exists(${.CURDIR}/../Makefile.inc)
.include "${.CURDIR}/../Makefile.inc"
.endif
-#.SUFFIXES: .out .o .c .cc .cxx .C .y .l .s
-.SUFFIXES: .out .o .c .y .l .s
+.SUFFIXES: .out .o .c .cc .cxx .C .y .l .s .S
CFLAGS+=${COPTS}
@@ -32,12 +32,15 @@ LIBMP?= /usr/lib/libmp.a
LIBPC?= /usr/lib/libpc.a
LIBPLOT?= /usr/lib/libplot.a
LIBRESOLV?= /usr/lib/libresolv.a
-LIBRPC?= /usr/lib/librpc.a
LIBRPCSVC?= /usr/lib/librpcsvc.a
LIBTELNET?= /usr/lib/libtelnet.a
LIBTERM?= /usr/lib/libterm.a
LIBUTIL?= /usr/lib/libutil.a
+.if defined(NOSHARED)
+LDFLAGS+= -static
+.endif
+
.if defined(SHAREDSTRINGS)
CLEANFILES+=strings
.c.o:
@@ -45,10 +48,10 @@ CLEANFILES+=strings
@${CC} ${CFLAGS} -c x.c -o ${.TARGET}
@rm -f x.c
-#.cc.o .cxx.o .C.o:
-# ${CXX} -E ${CXXFLAGS} ${.IMPSRC} | xstr -c -
-# @mv -f x.c x.cc
-# @${CXX} ${CXXFLAGS} -c x.cc -o ${.TARGET}
+.cc.o .cxx.o .C.o:
+ ${CXX} -E ${CXXFLAGS} ${.IMPSRC} | xstr -c -
+ @mv -f x.c x.cc
+ @${CXX} ${CXXFLAGS} -c x.cc -o ${.TARGET}
.endif
@@ -116,23 +119,6 @@ cleandir: _PROGSUBDIR
cd ${.CURDIR}; rm -rf obj;
.endif
-# some of the rules involve .h sources, so remove them from mkdep line
-.if !target(depend)
-depend: .depend _PROGSUBDIR
-.depend: ${DPSRCS} ${SRCS}
-.if defined(PROG)
- rm -f .depend
- files="${.ALLSRC:M*.c}"; \
- if [ "$$files" != "" ]; then \
- mkdep -a ${MKDEP} ${CFLAGS:M-[ID]*} $$files; \
- fi
-# files="${.ALLSRC:M*.cc} ${.ALLSRC:M*.C} ${.ALLSRC:M*.cxx}"; \
-# if [ "$$files" != " " ]; then \
-# mkdep -a ${MKDEP} -+ ${CXXFLAGS:M-[ID]*} $$files; \
-# fi
-.endif
-.endif
-
.if !target(install)
.if !target(beforeinstall)
beforeinstall:
@@ -185,7 +171,7 @@ obj: _PROGSUBDIR
.else
obj: _PROGSUBDIR
@cd ${.CURDIR}; rm -rf obj; \
- here=`pwd`; dest=/usr/obj/`echo $$here | sed 's,/usr/src/,,'`; \
+ here=`pwd`; dest=/usr/obj`echo $$here | sed 's,^/usr/src,,'`; \
echo "$$here -> $$dest"; ln -s $$dest obj; \
if test -d /usr/obj -a ! -d $$dest; then \
mkdir -p $$dest; \
@@ -208,3 +194,5 @@ tags: ${SRCS} _PROGSUBDIR
.elif !target(maninstall)
maninstall:
.endif
+
+.include <bsd.dep.mk>
diff --git a/share/mk/bsd.subdir.mk b/share/mk/bsd.subdir.mk
index d5e35a19d4e1..ef4108296fca 100644
--- a/share/mk/bsd.subdir.mk
+++ b/share/mk/bsd.subdir.mk
@@ -1,4 +1,5 @@
-# @(#)bsd.subdir.mk 5.9 (Berkeley) 2/1/91
+# from: @(#)bsd.subdir.mk 5.9 (Berkeley) 2/1/91
+# $Id: bsd.subdir.mk,v 1.5 1994/01/31 06:10:40 rgrimes Exp $
.MAIN: all
diff --git a/share/mk/bsd.subdir_ports.mk b/share/mk/bsd.subdir_ports.mk
new file mode 100644
index 000000000000..4bbcc3fe0c9d
--- /dev/null
+++ b/share/mk/bsd.subdir_ports.mk
@@ -0,0 +1,184 @@
+# bsd.subdir_ports.mk Thu Feb 17 17:26:04 MEZ 1994 by Julian Stacey <stacey@guug.de>
+# Copyright Julian Stacey, Munich Dec. 93, Free Software, No Liability.
+# For details see `Legalities' in /sys/Makefile.
+
+# This make include file was inspired by bsd.subdir.mk.
+# Some differences:
+# - Additional to SUBDIR, has been added G_SUBDIR,
+# G_SUBDIR directories re made with gmake rather than make.
+# - This make include file is tolerant of missing directories.
+# ( many people will only have partially populated ports trees )
+# This behaviour is very different from from bsd.subdir.mk,
+# that assumes all directories are present (even games).
+# (When bsd.subdir.mk fails to find a directory the cd fails,
+# the make saturates the cpu, recursive makes end in a series
+# of `cannot fork`s, also ruining performance for other users.
+
+# This commentary supplements ./bsd.README
+# Notes by Julian Stacey <stacey@guug.de> regarding :
+# bsd.prog.mk dependency _PROGSUBDIR: &
+# bsd.subdir.mk dependency _SUBDIRUSE: .
+# bsd.subdir_ports.mk dependency _SUBDIRUSE: .
+#
+# Name Description Example
+# DIRPRFX source tree prefix bin/ (when in bin/cat)
+# MACHINE i386
+# .TARGET all
+# .CURDIR current source directory
+# (though nate had expected it be what obj points to)
+# ref 940126_2031_39.nate
+# entry dependency currently being made all
+# edir evaluated next directory, libcsu.i386
+#
+# The {} in ---{> & <}--- are there so the % key in vi can be used,
+# thus allowing easy matching within long make logs.
+# The >< in ---{> & <}--- are retained for ornament.
+# The --- in ---{> & <}--- are retained both for ornament, &
+# to contribute to the uniqueness of forward & backward search keys.
+# The brackets () allow subsequent subsidiary makes to ignore possible
+# error results from previous sibling makes.
+# A "cd ${.CURDIR} ;" after the subsidiary make is not needed, as nothing
+# else happens inside the sub shell invoked by the ( ),
+# it has thus been omitted to assist shell interpreter speed.
+
+MFLAGS += -i # to be removed when ports tree error free
+# used to be MFLAGS ?= -i but something was always defining
+# MFLAGS, so -i was never seen.
+GMAKE = gmake
+MAKE ?= make
+MAKE_CMD = ${MAKE} ${MFLAGS}
+GMAKE_CMD = ${GMAKE} ${MFLAGS}
+AVOID ?= "AVOID set in bsd.subdir_ports.mk avoids broken packages."
+
+# Define WAIT_OK if you are prepared for the make to hang
+# on an open window awaiting a response.
+
+# You cant win with DESTDIR, once all packages use DESTDIR, no problem,
+# till then its a 4 way choice between throwing all stuff in
+# - ${DESTDIR}/usr/local,
+# - ${DESTDIR}/usr/gnu,
+# - ${DESTDIR}/
+# - wherever the package Makefile thinks it wants to put it.
+.if defined(DESTDIR)
+DESTDIR := ${DESTDIR}/usr/local
+.else
+DESTDIR = /usr/local
+.endif
+
+BINDIR?= ${DESTDIR}/bin
+# maybe BINDIR & DESTDIR interfere on some packages
+LIBDIR?= ${DESTDIR}/lib
+# maybe useful to have a default LIBDIR ?
+
+# Labels _SUBDIRUSE & ${SUBDIR} supercede labels in bsd.subdir.mk,
+
+DIR_EXIST = -e
+# DIR_EXIST -e rather than -d, as it may be a sym link to a directory
+FILE_EXIST = -r
+# FILE_EXIST not -f as it might be a sym link to a local
+# work_in_progress_Makefile
+
+_SUBDIRUSE: .USE
+ @# echo Starting directories that use BSD ${MAKE}
+ @for entry in ${SUBDIR} ; do \
+ ( \
+ if test ${DIR_EXIST} ${.CURDIR}/$${entry}.${MACHINE} ; then \
+ echo "Starting machine specific" > /dev/null ; \
+ edir=$${entry}.${MACHINE} ; \
+ else \
+ echo "Starting generic" > /dev/null ; \
+ edir=$${entry} ; \
+ fi ;\
+ echo -n "---{> $${edir}: " ;\
+ if test ${FILE_EXIST} ${.CURDIR}/$${edir}/Makefile ; then \
+ cmd="${MAKE_CMD} \
+ ${.TARGET:realinstall=install} \
+ DIRPRFX=${DIRPRFX}$${edir}/"; \
+ echo "$$cmd"; \
+ cd ${.CURDIR}/$${edir} ; \
+ $$cmd ; \
+ else \
+ echo "Warning missing directory or Makefile." ;\
+ fi ;\
+ echo "<}--- $${edir}" ;\
+ ) \
+ done
+ @# echo Finished BSD ${MAKE} directories, Starting ${GMAKE} directories.
+ @for entry in ${G_SUBDIR}; do \
+ ( \
+ if test ${DIR_EXIST} ${.CURDIR}/$${entry}.${MACHINE} ; then \
+ echo "Starting machine specific" > /dev/null ; \
+ edir=$${entry}.${MACHINE} ; \
+ else \
+ echo "Starting generic" > /dev/null ; \
+ edir=$${entry} ; \
+ fi ;\
+ echo -n "---{> $${edir}: " ;\
+ if test ${FILE_EXIST} ${.CURDIR}/$${edir}/Makefile ; then \
+ cmd="${GMAKE_CMD} MAKE=${GMAKE} \
+ ${.TARGET:realinstall=install} \
+ DIRPRFX=${DIRPRFX}$${edir}/"; \
+ echo "$$cmd"; \
+ cd ${.CURDIR}/$${edir} ; \
+ $$cmd ; \
+ else \
+ echo "Warning missing directory or Makefile." ;\
+ fi ;\
+ echo "<}--- $${edir}" ;\
+ ) \
+ done
+ @# echo Finished ${GMAKE} directories.
+
+${SUBDIR}::
+ @# echo Starting directories that use BSD ${MAKE}
+ if test ${DIR_EXIST} ${.CURDIR}/${.TARGET}.${MACHINE} ; then \
+ echo "Starting machine specific" > /dev/null ; \
+ edir=${.CURDIR}/${.TARGET}.${MACHINE};\
+ else \
+ edir=${.CURDIR}/${.TARGET};\
+ echo "Starting generic" > /dev/null ; \
+ fi ;\
+ echo -n "---{> $${edir}: " ;\
+ if test ${FILE_EXIST} ${.CURDIR}/$${edir}/Makefile ; then \
+ cmd="${MAKE_CMD} -f $${edir}/Makefile all";\
+ echo "$$cmd"; \
+ cd ${.CURDIR}/$${edir} ; \
+ $$cmd ; \
+ else \
+ echo "Warning missing directory or Makefile." ;\
+ fi ;\
+ echo "<}--- $${edir}" ;\
+
+${G_SUBDIR}::
+ @# echo Starting directories that use BSD ${MAKE}
+ if test ${DIR_EXIST} ${.CURDIR}/${.TARGET}.${MACHINE} ; then \
+ echo "Starting machine specific" > /dev/null ; \
+ edir=${.CURDIR}/${.TARGET}.${MACHINE};\
+ else \
+ edir=${.CURDIR}/${.TARGET};\
+ echo "Starting generic" > /dev/null ; \
+ fi ;\
+ echo -n "---{> $${edir}: " ;\
+ if test ${FILE_EXIST} ${.CURDIR}/$${edir}/Makefile ; then \
+ cmd="${GMAKE_CMD} MAKE=${GMAKE} -f $${edir}/Makefile all";\
+ echo "$$cmd"; \
+ cd ${.CURDIR}/$${edir} ; \
+ $$cmd ; \
+ else \
+ echo "Warning missing directory or Makefile." ;\
+ fi ;\
+ echo "<}--- $${edir}" ;\
+
+.include <bsd.subdir.mk>
+
+.if !target(pkg)
+pkg: _SUBDIRUSE
+.endif
+
+.if !target(world)
+world: _SUBDIRUSE
+# note if we append `all' after `_SUBDIRUSE'
+# then with several levels of SUBDIR makes, we'd get far too many `make all's
+.endif
+
+# End Of File
diff --git a/share/mk/sys.mk b/share/mk/sys.mk
index 41710fb8e157..71d12562ed44 100644
--- a/share/mk/sys.mk
+++ b/share/mk/sys.mk
@@ -1,9 +1,9 @@
-# @(#)sys.mk 5.11 (Berkeley) 3/13/91
+# from: @(#)sys.mk 5.11 (Berkeley) 3/13/91
+# $Id: sys.mk,v 1.5 1994/02/04 03:19:16 wollman Exp $
-unix= We run UNIX.
+unix= We run FreeBSD, not UNIX.
-#.SUFFIXES: .out .a .ln .o .c .cc .cxx .C .F .f .e .r .y .l .s .cl .p .h
-.SUFFIXES: .out .a .ln .o .c .F .f .e .r .y .l .s .cl .p .h
+.SUFFIXES: .out .a .ln .o .c .cc .cxx .C .F .f .e .r .y .l .s .cl .p .h
.LIBS: .a
@@ -51,8 +51,8 @@ YFLAGS=-d
.c.o:
${CC} ${CFLAGS} -c ${.IMPSRC}
-#.cc.o .cxx.o .C.o:
-# ${CXX} ${CXXFLAGS} -c ${.IMPSRC}
+.cc.o .cxx.o .C.o:
+ ${CXX} ${CXXFLAGS} -c ${.IMPSRC}
.p.o:
${PC} ${PFLAGS} -c ${.IMPSRC}
diff --git a/share/syscons/examples/setrus b/share/syscons/examples/setrus
new file mode 100755
index 000000000000..d88f4ac273a5
--- /dev/null
+++ b/share/syscons/examples/setrus
@@ -0,0 +1,17 @@
+#!/bin/sh
+# Load KOI8-R screen mapping.
+syscons -S koi8-r2alt
+# Load Alternate Codes screen font.
+syscons -f 16 alt8x16
+syscons -f 14 alt-8x14
+syscons -f 8 alt-8x8
+# Install JCUKEN keyboard mapping.
+# syscons -k ru.koi8-r # Not needed for kernel compiled with RUKEYMAP option
+# Remap Del to Esc[K.
+syscons -F 54 ""
+# Remap -5- to Esc[E.
+syscons -F 48 ""
+# Maximum key rate
+syscons -r fast
+# Blank after 5 min
+syscons -s 300
diff --git a/share/syscons/keymaps/Makefile b/share/syscons/keymaps/Makefile
index e7a8920f9168..9ee24f47c9fa 100644
--- a/share/syscons/keymaps/Makefile
+++ b/share/syscons/keymaps/Makefile
@@ -1,9 +1,10 @@
-KEYMAPS = danish.cp865.map danish.iso.map fff.map german.cp850.map \
- german.iso.map swedish.cp850.map swedish.iso.map uk.cp850.map \
- uk.iso.map us.iso.map
+KEYMAPS=danish.cp865.map danish.iso.map german.cp850.map german.iso.map \
+ ru.koi8-r.map swedish.cp850.map swedish.iso.map uk.cp850.map uk.iso.map \
+ us.iso.map
KEYMAPS_MK = ${KEYMAPS:R:S/$/.mk/g}
MAPSDIR = /usr/share/syscons/keymaps
NOMAN = noman
+CLEANFILES += ${KEYMAPS} ${KEYMAPS_MK}
all: ${KEYMAPS}
diff --git a/share/syscons/keymaps/fff b/share/syscons/keymaps/fff
deleted file mode 100644
index c8e12fdf8bac..000000000000
--- a/share/syscons/keymaps/fff
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * This program is free software; you can do with it as you see fit,
- * as long as you leave this header intact.
- *
- * This program 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.
- *
- * Soren Schmidt Email: sos@kmd-ac.dk
- * Tritonvej 36 UUCP: ...uunet!dkuug!kmd-ac!sos
- * DK9210 Aalborg SO Phone: +45 9814 8076
- */
-
-keymap_t keymap = { 107, /* DK iso8859 keymap */
-/* alt
- * scan cntrl alt alt cntrl
- * code base shift cntrl shift alt shift cntrl shift spcl flgs
- * ---------------------------------------------------------------------------
- */
-/* sc=00 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
-/* sc=01 */ 0x1B, 0x1B, NOP, NOP, 0x1B, 0x1B, NOP, NOP, 0x33, 0x00,
-/* sc=02 */ '1', '!', NOP, NOP, '1', '!', NOP, NOP, 0x33, 0x00,
-/* sc=03 */ '2', '"', 0x00, 0x00, '@', '"', 0x00, 0x00, 0x00, 0x00,
-/* sc=04 */ '3', '#', NOP, NOP, 0x9E, '#', NOP, NOP, 0x33, 0x00,
-/* sc=05 */ '4', 0xA4, NOP, NOP, '$', 0xA4, NOP, NOP, 0x33, 0x00,
-/* sc=06 */ '5', '%', NOP, NOP, '5', '%', NOP, NOP, 0x33, 0x00,
-/* sc=07 */ '6', '&', NOP, NOP, '6', '&', NOP, NOP, 0x33, 0x00,
-/* sc=08 */ '7', '/', NOP, NOP, '{', '/', NOP, NOP, 0x33, 0x00,
-/* sc=09 */ '8', '(', 0x1B, 0x1B, '[', '(', 0x1B, 0x1B, 0x00, 0x00,
-/* sc=0a */ '9', ')', 0x1D, 0x1D, ']', ')', 0x1D, 0x1D, 0x00, 0x00,
-/* sc=0b */ '0', '=', NOP, NOP, '}', '=', NOP, NOP, 0x33, 0x00,
-/* sc=0c */ '+', '?', NOP, NOP, '+', '?', NOP, NOP, 0x33, 0x00,
-/* sc=0d */ '\'', '`', NOP, NOP, '|', '`', NOP, NOP, 0x33, 0x00,
-/* sc=0e */ 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00,
-/* sc=0f */ 0x09, 0x08, NOP, NOP, 0x09, 0x08, NOP, NOP, 0x33, 0x00,
-/* sc=10 */ 'q', 'Q', 0x11, 0x11, 'q', 'Q', 0x11, 0x11, 0x00, 0x01,
-/* sc=11 */ 'w', 'W', 0x17, 0x17, 'w', 'W', 0x17, 0x17, 0x00, 0x01,
-/* sc=12 */ 'e', 'E', 0x05, 0x05, 'e', 'E', 0x05, 0x05, 0x00, 0x01,
-/* sc=13 */ 'r', 'R', 0x12, 0x12, 'r', 'R', 0x12, 0x12, 0x00, 0x01,
-/* sc=14 */ 't', 'T', 0x14, 0x14, 't', 'T', 0x14, 0x14, 0x00, 0x01,
-/* sc=15 */ 'y', 'Y', 0x19, 0x19, 'y', 'Y', 0x19, 0x19, 0x00, 0x01,
-/* sc=16 */ 'u', 'U', 0x15, 0x15, 'u', 'U', 0x15, 0x15, 0x00, 0x01,
-/* sc=17 */ 'i', 'I', 0x09, 0x09, 'i', 'I', 0x09, 0x09, 0x00, 0x01,
-/* sc=18 */ 'o', 'O', 0x0F, 0x0F, 'o', 'O', 0x0F, 0x0F, 0x00, 0x01,
-/* sc=19 */ 'p', 'P', 0x10, 0x10, 'p', 'P', 0x10, 0x10, 0x00, 0x01,
-/* sc=1a */ 0xE5, 0xC5, NOP, NOP, 0x86, 0x8F, NOP, NOP, 0x33, 0x01,
-/* sc=1b */ '"', '^', 0x1E, 0x1E, '~', '^', 0x1E, 0x1E, 0x00, 0x00,
-/* sc=1c */ 0x0D, 0x0D, 0x0A, 0x0A, 0x0D, 0x0D, 0x0A, 0x0A, 0x00, 0x00,
-/* sc=1d */ LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, 0xFF, 0x00,
-/* sc=1e */ 'a', 'A', 0x01, 0x01, 'a', 'A', 0x01, 0x01, 0x00, 0x01,
-/* sc=1f */ 's', 'S', 0x13, 0x13, 's', 'S', 0x13, 0x13, 0x00, 0x01,
-/* sc=20 */ 'd', 'D', 0x04, 0x04, 'd', 'D', 0x04, 0x04, 0x00, 0x01,
-/* sc=21 */ 'f', 'F', 0x06, 0x06, 'f', 'F', 0x06, 0x06, 0x00, 0x01,
-/* sc=22 */ 'g', 'G', 0x07, 0x07, 'g', 'G', 0x07, 0x07, 0x00, 0x01,
-/* sc=23 */ 'h', 'H', 0x08, 0x08, 'h', 'H', 0x08, 0x08, 0x00, 0x01,
-/* sc=24 */ 'j', 'J', 0x0A, 0x0A, 'j', 'J', 0x0A, 0x0A, 0x00, 0x01,
-/* sc=25 */ 'k', 'K', 0x0B, 0x0B, 'k', 'K', 0x0B, 0x0B, 0x00, 0x01,
-/* sc=26 */ 'l', 'L', 0x0C, 0x0C, 'l', 'L', 0x0C, 0x0C, 0x00, 0x01,
-/* sc=27 */ 0xE6, 0xC6, NOP, NOP, 0x91, 0x92, NOP, NOP, 0x33, 0x01,
-/* sc=28 */ 0xF8, 0xD8, NOP, NOP, 0x9B, 0x9D, NOP, NOP, 0x33, 0x01,
-/* sc=29 */ 0xBD, 0xA7, NOP, NOP, 0xBD, 0xA7, NOP, NOP, 0x33, 0x00,
-/* sc=2a */ LSH, LSH, LSH, LSH, LSH, LSH, LSH, LSH, 0xFF, 0x00,
-/* sc=2b */ '\'', '*', NOP, NOP, '\'', '*', NOP, NOP, 0x33, 0x00,
-/* sc=2c */ 'z', 'Z', 0x1A, 0x1A, 'z', 'Z', 0x1A, 0x1A, 0x00, 0x01,
-/* sc=2d */ 'x', 'X', 0x18, 0x18, 'x', 'X', 0x18, 0x18, 0x00, 0x01,
-/* sc=2e */ 'c', 'C', 0x03, 0x03, 'c', 'C', 0x03, 0x03, 0x00, 0x01,
-/* sc=2f */ 'v', 'V', 0x16, 0x16, 'v', 'V', 0x16, 0x16, 0x00, 0x01,
-/* sc=30 */ 'b', 'B', 0x02, 0x02, 'b', 'B', 0x02, 0x02, 0x00, 0x01,
-/* sc=31 */ 'n', 'N', 0x0E, 0x0E, 'n', 'N', 0x0E, 0x0E, 0x00, 0x01,
-/* sc=32 */ 'm', 'M', 0x0D, 0x0D, 'm', 'M', 0x0D, 0x0D, 0x00, 0x01,
-/* sc=33 */ ',', ';', NOP, NOP, ',', ';', NOP, NOP, 0x33, 0x00,
-/* sc=34 */ '.', ':', NOP, NOP, '.', ':', NOP, NOP, 0x33, 0x00,
-/* sc=35 */ '-', '_', 0x1F, 0x1F, '-', '_', 0x1F, 0x1F, 0x00, 0x00,
-/* sc=36 */ RSH, RSH, RSH, RSH, RSH, RSH, RSH, RSH, 0xFF, 0x00,
-/* sc=37 */ '*', '*', '*', '*', '*', '*', '*', '*', 0x33, 0x00,
-/* sc=38 */ LALT, LALT, LALT, LALT, LALT, LALT, LALT, LALT, 0xFF, 0x00,
-/* sc=39 */ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 0x00, 0x00,
-/* sc=3a */ CLK, CLK, CLK, CLK, CLK, CLK, CLK, CLK, 0xFF, 0x00,
-/* sc=3b */ F( 1), F(13), F(25), F(37), S( 1), S(11), S( 1), S(11), 0xFF, 0x00,
-/* sc=3c */ F( 2), F(14), F(26), F(38), S( 2), S(12), S( 2), S(12), 0xFF, 0x00,
-/* sc=3d */ F( 3), F(15), F(27), F(39), S( 3), S(13), S( 3), S(13), 0xFF, 0x00,
-/* sc=3e */ F( 4), F(16), F(28), F(40), S( 4), S(14), S( 4), S(14), 0xFF, 0x00,
-/* sc=3f */ F( 5), F(17), F(29), F(41), S( 5), S(15), S( 5), S(15), 0xFF, 0x00,
-/* sc=40 */ F( 6), F(18), F(30), F(42), S( 6), S(16), S( 6), S(16), 0xFF, 0x00,
-/* sc=41 */ F( 7), F(19), F(31), F(43), S( 7), S( 7), S( 7), S( 7), 0xFF, 0x00,
-/* sc=42 */ F( 8), F(20), F(32), F(44), S( 8), S( 8), S( 8), S( 8), 0xFF, 0x00,
-/* sc=43 */ F( 9), F(21), F(33), F(45), S( 9), S( 9), S( 9), S( 9), 0xFF, 0x00,
-/* sc=44 */ F(10), F(22), F(34), F(46), S(10), S(10), S(10), S(10), 0xFF, 0x00,
-/* sc=45 */ NLK, NLK, NLK, NLK, NLK, NLK, NLK, NLK, 0xFF, 0x00,
-/* sc=46 */ SLK, SLK, SLK, SLK, SLK, SLK, SLK, SLK, 0xFF, 0x00,
-/* sc=47 */ F(49), '7', '7', '7', '7', '7', '7', '7', 0x80, 0x02,
-/* sc=48 */ F(50), '8', '8', '8', '8', '8', '8', '8', 0x80, 0x02,
-/* sc=49 */ F(51), '9', '9', '9', '9', '9', '9', '9', 0x80, 0x02,
-/* sc=4a */ F(52), '/', '/', '/', '/', '/', '/', '/', 0x80, 0x02,
-/* sc=4b */ F(53), '4', '4', '4', '4', '4', '4', '4', 0x80, 0x02,
-/* sc=4c */ F(54), '5', '5', '5', '5', '5', '5', '5', 0x80, 0x02,
-/* sc=4d */ F(55), '6', '6', '6', '6', '6', '6', '6', 0x80, 0x02,
-/* sc=4e */ F(56), '+', '+', '+', '+', '+', '+', '+', 0x80, 0x02,
-/* sc=4f */ F(57), '1', '1', '1', '1', '1', '1', '1', 0x80, 0x02,
-/* sc=50 */ F(58), '2', '2', '2', '2', '2', '2', '2', 0x80, 0x02,
-/* sc=51 */ F(59), '3', '3', '3', '3', '3', '3', '3', 0x80, 0x02,
-/* sc=52 */ F(60), '0', '0', '0', '0', '0', '0', '0', 0x80, 0x02,
-/* sc=53 */ 0x7F, '.', '.', '.', '.', '.', '.', '.', 0x00, 0x02,
-/* sc=54 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
-/* sc=55 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
-/* sc=56 */ '<', '>', 0x1C, 0x1C, '\\', '>', 0x1C, 0x1C, 0x00, 0x00,
-/* sc=57 */ F(11), F(23), F(35), F(47), S(11), S(11), S(11), S(11), 0xFF, 0x00,
-/* sc=58 */ F(12), F(24), F(36), F(48), S(12), S(12), S(12), S(12), 0xFF, 0x00,
-/* sc=59 */ 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0xFF, 0x02,
-/* sc=5a */ RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, 0xFF, 0x00,
-/* sc=5b */ '#', '€', '/', '/', '/', '/', '/', '/', 0x00, 0x02,
-/* sc=5c */ '1', '2', '*', '*', '*', '*', '*', '*', 0x00, 0x02,
-/* sc=5d */ RALT, RALT, RALT, RALT, RALT, RALT, RALT, RALT, 0xFF, 0x00,
-/* sc=5e */ F(49), '7', '7', '7', '7', '7', '7', '7', 0x80, 0x02,
-/* sc=5f */ F(50), '8', '8', '8', '8', '8', '8', '8', 0x80, 0x02,
-/* sc=60 */ F(51), '9', '9', '9', '9', '9', '9', '9', 0x80, 0x02,
-/* sc=61 */ F(53), '4', '4', '4', '4', '4', '4', '4', 0x80, 0x02,
-/* sc=62 */ F(55), '6', '6', '6', '6', '6', '6', '6', 0x80, 0x02,
-/* sc=63 */ F(57), '1', '1', '1', '1', '1', '1', '1', 0x80, 0x02,
-/* sc=64 */ F(58), '2', '2', '2', '2', '2', '2', '2', 0x80, 0x02,
-/* sc=65 */ F(59), '3', '3', '3', '3', '3', '3', '3', 0x80, 0x02,
-/* sc=66 */ F(60), '0', '0', '0', '0', '0', '0', '0', 0x80, 0x02,
-/* sc=67 */ F(54), '5', '5', '5', '5', '5', '5', '5', 0x80, 0x02,
-/* sc=68 */ SLK, SLK, SLK, SLK, SLK, SLK, SLK, SLK, 0xFF, 0x00,
-/* sc=69 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
-/* sc=6a */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
-};
diff --git a/share/syscons/keymaps/ru.koi8-r b/share/syscons/keymaps/ru.koi8-r
new file mode 100644
index 000000000000..20f263655d85
--- /dev/null
+++ b/share/syscons/keymaps/ru.koi8-r
@@ -0,0 +1,270 @@
+/*
+ * Copyright (C) 1994 by Andrew A. Chernov, Moscow, Russia.
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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.
+ */
+
+#define SET8 0x80 /* eight bit for emacs SET8-key */
+
+keymap_t keymap = { 0xe9, /* keys number */
+/* alt
+ * scan cntrl alt alt cntrl
+ * code base shift cntrl shift alt shift cntrl shift spcl flgs
+ * -------------------------------------------------------------------------------------------
+ */
+/* sc=00 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=01 */ 0x1B, 0x1B, NOP, NOP, SET8|0x1B, SET8|0x1B, DBG, NOP, 0x33, 0x00,
+/* sc=02 */ '1', '!', NOP, NOP, SET8|'1', SET8|'!', NOP, NOP, 0x33, 0x00,
+/* sc=03 */ '2', '@', 0x00, 0x00, SET8|'2', SET8|'@', SET8|0x00, SET8|0x00, 0x00, 0x00,
+/* sc=04 */ '3', '#', NOP, NOP, SET8|'3', SET8|'#', NOP, NOP, 0x33, 0x00,
+/* sc=05 */ '4', '$', NOP, NOP, SET8|'4', SET8|'$', NOP, NOP, 0x33, 0x00,
+/* sc=06 */ '5', '%', NOP, NOP, SET8|'5', SET8|'%', NOP, NOP, 0x33, 0x00,
+/* sc=07 */ '6', '^', 0x1E, 0x1E, SET8|'6', SET8|'^', SET8|0x1E, SET8|0x1E, 0x00, 0x00,
+/* sc=08 */ '7', '&', NOP, NOP, SET8|'7', SET8|'&', NOP, NOP, 0x33, 0x00,
+/* sc=09 */ '8', '*', NOP, NOP, SET8|'8', SET8|'*', NOP, NOP, 0x33, 0x00,
+/* sc=0a */ '9', '(', NOP, NOP, SET8|'9', SET8|'(', NOP, NOP, 0x33, 0x00,
+/* sc=0b */ '0', ')', NOP, NOP, SET8|'0', SET8|')', NOP, NOP, 0x33, 0x00,
+/* sc=0c */ '-', '_', 0x1F, 0x1F, SET8|'-', SET8|'_', SET8|0x1F, SET8|0x1F, 0x00, 0x00,
+/* sc=0d */ '=', '+', NOP, NOP, SET8|'=', SET8|'+', NOP, NOP, 0x33, 0x00,
+/* sc=0e */ 0x08, 0x08, 0x7F, 0x7F, SET8|0x08, SET8|0x08, SET8|0x7F, SET8|0x7F, 0x00, 0x00,
+/* sc=0f */ 0x09, F(16), NOP, NOP, SET8|0x09, F(16), NOP, NOP, 0x77, 0x00,
+/* sc=10 */ 'q', 'Q', 0x11, 0x11, SET8|'q', SET8|'Q', SET8|0x11, SET8|0x11, 0x00, 0x01,
+/* sc=11 */ 'w', 'W', 0x17, 0x17, SET8|'w', SET8|'W', SET8|0x17, SET8|0x17, 0x00, 0x01,
+/* sc=12 */ 'e', 'E', 0x05, 0x05, SET8|'e', SET8|'E', SET8|0x05, SET8|0x05, 0x00, 0x01,
+/* sc=13 */ 'r', 'R', 0x12, 0x12, SET8|'r', SET8|'R', SET8|0x12, SET8|0x12, 0x00, 0x01,
+/* sc=14 */ 't', 'T', 0x14, 0x14, SET8|'t', SET8|'T', SET8|0x14, SET8|0x14, 0x00, 0x01,
+/* sc=15 */ 'y', 'Y', 0x19, 0x19, SET8|'y', SET8|'Y', SET8|0x19, SET8|0x19, 0x00, 0x01,
+/* sc=16 */ 'u', 'U', 0x15, 0x15, SET8|'u', SET8|'U', SET8|0x15, SET8|0x15, 0x00, 0x01,
+/* sc=17 */ 'i', 'I', 0x09, 0x09, SET8|'i', SET8|'I', SET8|0x09, SET8|0x09, 0x00, 0x01,
+/* sc=18 */ 'o', 'O', 0x0F, 0x0F, SET8|'o', SET8|'O', SET8|0x0F, SET8|0x0F, 0x00, 0x01,
+/* sc=19 */ 'p', 'P', 0x10, 0x10, SET8|'p', SET8|'P', SET8|0x10, SET8|0x10, 0x00, 0x01,
+/* sc=1a */ '[', '{', 0x1B, 0x1B, SET8|'[', SET8|'{', SET8|0x1B, SET8|0x1B, 0x00, 0x00,
+/* sc=1b */ ']', '}', 0x1D, 0x1D, SET8|']', SET8|'}', SET8|0x1D, SET8|0x1D, 0x00, 0x00,
+/* sc=1c */ 0x0D, 0x0D, 0x0A, 0x0A, SET8|0x0D, SET8|0x0D, SET8|0x0A, SET8|0x0A, 0x00, 0x00,
+/* sc=1d */ LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, 0xFF, 0x00,
+/* sc=1e */ 'a', 'A', 0x01, 0x01, SET8|'a', SET8|'A', SET8|0x01, SET8|0x01, 0x00, 0x01,
+/* sc=1f */ 's', 'S', 0x13, 0x13, SET8|'s', SET8|'S', SET8|0x13, SET8|0x13, 0x00, 0x01,
+/* sc=20 */ 'd', 'D', 0x04, 0x04, SET8|'d', SET8|'D', SET8|0x04, SET8|0x04, 0x00, 0x01,
+/* sc=21 */ 'f', 'F', 0x06, 0x06, SET8|'f', SET8|'F', SET8|0x06, SET8|0x06, 0x00, 0x01,
+/* sc=22 */ 'g', 'G', 0x07, 0x07, SET8|'g', SET8|'G', SET8|0x07, SET8|0x07, 0x00, 0x01,
+/* sc=23 */ 'h', 'H', 0x08, 0x08, SET8|'h', SET8|'H', SET8|0x08, SET8|0x08, 0x00, 0x01,
+/* sc=24 */ 'j', 'J', 0x0A, 0x0A, SET8|'j', SET8|'J', SET8|0x0A, SET8|0x0A, 0x00, 0x01,
+/* sc=25 */ 'k', 'K', 0x0B, 0x0B, SET8|'k', SET8|'K', SET8|0x0B, SET8|0x0B, 0x00, 0x01,
+/* sc=26 */ 'l', 'L', 0x0C, 0x0C, SET8|'l', SET8|'L', SET8|0x0C, SET8|0x0C, 0x00, 0x01,
+/* sc=27 */ ';', ':', NOP, NOP, SET8|';', SET8|':', NOP, NOP, 0x33, 0x00,
+/* sc=28 */ '\'', '"', NOP, NOP, SET8|'\'', SET8|'"', NOP, NOP, 0x33, 0x00,
+/* sc=29 */ '`', '~', NOP, NOP, SET8|'`', SET8|'~', NOP, NOP, 0x33, 0x00,
+/* sc=2a */ LSH, LSH, LSH, LSH, LSH, LSH, LSH, LSH, 0xFF, 0x00,
+/* sc=2b */ '\\', '|', 0x1C, 0x1C, SET8|'\\', SET8|'|', SET8|0x1C, SET8|0x1C, 0x00, 0x00,
+/* sc=2c */ 'z', 'Z', 0x1A, 0x1A, SET8|'z', SET8|'Z', SET8|0x1A, SET8|0x1A, 0x00, 0x01,
+/* sc=2d */ 'x', 'X', 0x18, 0x18, SET8|'x', SET8|'X', SET8|0x18, SET8|0x18, 0x00, 0x01,
+/* sc=2e */ 'c', 'C', 0x03, 0x03, SET8|'c', SET8|'C', SET8|0x03, SET8|0x03, 0x00, 0x01,
+/* sc=2f */ 'v', 'V', 0x16, 0x16, SET8|'v', SET8|'V', SET8|0x16, SET8|0x16, 0x00, 0x01,
+/* sc=30 */ 'b', 'B', 0x02, 0x02, SET8|'b', SET8|'B', SET8|0x02, SET8|0x02, 0x00, 0x01,
+/* sc=31 */ 'n', 'N', 0x0E, 0x0E, SET8|'n', SET8|'N', SET8|0x0E, SET8|0x0E, 0x00, 0x01,
+/* sc=32 */ 'm', 'M', 0x0D, 0x0D, SET8|'m', SET8|'M', SET8|0x0D, SET8|0x0D, 0x00, 0x01,
+/* sc=33 */ ',', '<', NOP, NOP, SET8|',', SET8|'<', NOP, NOP, 0x33, 0x00,
+/* sc=34 */ '.', '>', NOP, NOP, SET8|'.', SET8|'>', NOP, NOP, 0x33, 0x00,
+/* sc=35 */ '/', '?', NOP, NOP, SET8|'/', SET8|'?', NOP, NOP, 0x33, 0x00,
+/* sc=36 */ RSH, RSH, RSH, RSH, RSH, RSH, RSH, RSH, 0xFF, 0x00,
+/* sc=37 */ '*', '*', 0x0A, 0x0A, SET8|'*', SET8|'*', SET8|0x0A, SET8|0x0A, 0x00, 0x00,
+/* sc=38 */ LALT, LALT, LALT, LALT, LALT, LALT, LALT, LALT, 0xFF, 0x00,
+/* sc=39 */ ' ', ' ', ' ', ' ', SET8|' ', SET8|' ', SET8|' ', SET8|' ', 0x00, 0x00,
+/* sc=3a */ ALK, CLK, CLK, CLK, CLK, CLK, CLK, CLK, 0xFF, 0x00,
+/* sc=3b */ F( 1), F(13), F(25), F(37), S( 1), S(11), S( 1), S(11), 0xFF, 0x00,
+/* sc=3c */ F( 2), F(14), F(26), F(38), S( 2), S(12), S( 2), S(12), 0xFF, 0x00,
+/* sc=3d */ F( 3), F(15), F(27), F(39), S( 3), S(13), S( 3), S(13), 0xFF, 0x00,
+/* sc=3e */ F( 4), F(16), F(28), F(40), S( 4), S(14), S( 4), S(14), 0xFF, 0x00,
+/* sc=3f */ F( 5), F(17), F(29), F(41), S( 5), S(15), S( 5), S(15), 0xFF, 0x00,
+/* sc=40 */ F( 6), F(18), F(30), F(42), S( 6), S(16), S( 6), S(16), 0xFF, 0x00,
+/* sc=41 */ F( 7), F(19), F(31), F(43), S( 7), S( 7), S( 7), S( 7), 0xFF, 0x00,
+/* sc=42 */ F( 8), F(20), F(32), F(44), S( 8), S( 8), S( 8), S( 8), 0xFF, 0x00,
+/* sc=43 */ F( 9), F(21), F(33), F(45), S( 9), S( 9), S( 9), S( 9), 0xFF, 0x00,
+/* sc=44 */ F(10), F(22), F(34), F(46), S(10), S(10), S(10), S(10), 0xFF, 0x00,
+/* sc=45 */ NLK, NLK, NLK, NLK, NLK, NLK, NLK, NLK, 0xFF, 0x00,
+/* sc=46 */ SLK, SLK, SLK, SLK, SLK, SLK, SLK, SLK, 0xFF, 0x00,
+/* sc=47 */ F(49), '7', '7', '7', SET8|'7', SET8|'7', SET8|'7', SET8|'7', 0x80, 0x02,
+/* sc=48 */ F(50), '8', '8', '8', SET8|'8', SET8|'8', SET8|'8', SET8|'8', 0x80, 0x02,
+/* sc=49 */ F(51), '9', '9', '9', SET8|'9', SET8|'9', SET8|'9', SET8|'9', 0x80, 0x02,
+/* sc=4a */ F(52), '-', '-', '-', SET8|'-', SET8|'-', SET8|'-', SET8|'-', 0x80, 0x02,
+/* sc=4b */ F(53), '4', '4', '4', SET8|'4', SET8|'4', SET8|'4', SET8|'4', 0x80, 0x02,
+/* sc=4c */ F(48), '5', '5', '5', SET8|'5', SET8|'5', SET8|'5', SET8|'5', 0x80, 0x02,
+/* sc=4d */ F(55), '6', '6', '6', SET8|'6', SET8|'6', SET8|'6', SET8|'6', 0x80, 0x02,
+/* sc=4e */ F(56), '+', '+', '+', SET8|'+', SET8|'+', SET8|'+', SET8|'+', 0x80, 0x02,
+/* sc=4f */ F(57), '1', '1', '1', SET8|'1', SET8|'1', SET8|'1', SET8|'1', 0x80, 0x02,
+/* sc=50 */ F(58), '2', '2', '2', SET8|'2', SET8|'2', SET8|'2', SET8|'2', 0x80, 0x02,
+/* sc=51 */ F(59), '3', '3', '3', SET8|'3', SET8|'3', SET8|'3', SET8|'3', 0x80, 0x02,
+/* sc=52 */ F(60), '0', '0', '0', SET8|'0', SET8|'0', SET8|'0', SET8|'0', 0x80, 0x02,
+/* sc=53 */ F(54), '.', 0x7F, 0x7F, SET8|0x7F, SET8|0x7F, RBT, SET8|0x7F, 0x82, 0x02,
+/* sc=54 */ ALK, ALK, ALK, ALK, ALK, ALK, ALK, ALK, 0xFF, 0x00,
+/* sc=55 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=56 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=57 */ F(11), F(23), F(35), F(47), S(11), S(11), S(11), S(11), 0xFF, 0x00,
+/* sc=58 */ F(12), F(24), F(36), F(48), S(12), S(12), S(12), S(12), 0xFF, 0x00,
+/* sc=59 */ 0x0D, 0x0D, 0x0A, 0x0A, SET8|0x0D, SET8|0x0D, SET8|0x0A, SET8|0x0A, 0x00, 0x00,
+/* sc=5a */ RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, 0xFF, 0x00,
+/* sc=5b */ '/', '/', NOP, NOP, SET8|'/', SET8|'/', NOP, NOP, 0x33, 0x00,
+/* sc=5c */ NEXT, NOP, DBG, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=5d */ RALT, RALT, RALT, RALT, RALT, RALT, RALT, RALT, 0xFF, 0x00,
+/* sc=5e */ F(49), F(49), F(49), F(49), F(49), F(49), F(49), F(49), 0xFF, 0x00,
+/* sc=5f */ F(50), F(50), F(50), F(50), F(50), F(50), F(50), F(50), 0xFF, 0x00,
+/* sc=60 */ F(51), F(51), F(51), F(51), F(51), F(51), F(51), F(51), 0xFF, 0x00,
+/* sc=61 */ F(53), F(53), F(53), F(53), F(53), F(53), F(53), F(53), 0xFF, 0x00,
+/* sc=62 */ F(55), F(55), F(55), F(55), F(55), F(55), F(55), F(55), 0xFF, 0x00,
+/* sc=63 */ F(57), F(57), F(57), F(57), F(57), F(57), F(57), F(57), 0xFF, 0x00,
+/* sc=64 */ F(58), F(58), F(58), F(58), F(58), F(58), F(58), F(58), 0xFF, 0x00,
+/* sc=65 */ F(59), F(59), F(59), F(59), F(59), F(59), F(59), F(59), 0xFF, 0x00,
+/* sc=66 */ F(60), F(60), F(60), F(60), F(60), F(60), F(60), F(60), 0xFF, 0x00,
+/* sc=67 */ F(54), F(54), 0x7F, 0x7F, SET8|0x7F, SET8|0x7F, RBT, SET8|0x7F, 0xC2, 0x00,
+/* sc=68 */ SLK, SLK, SLK, SLK, SLK, SLK, SLK, SLK, 0xFF, 0x00,
+/* sc=69 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=6a */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=6b */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=6c */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=6d */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=6e */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=6f */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=70 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=71 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=72 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=73 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=74 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=75 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=76 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=77 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=78 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=79 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=7a */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=7b */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=7c */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=7d */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=7e */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=7f */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* extended (ALTGR LOCK keys) */
+/* sc=00 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=01 */ 0x1B, 0x1B, NOP, NOP, SET8|0x1B, SET8|0x1B, DBG, NOP, 0x33, 0x00,
+/* sc=02 */ '!', '1', NOP, NOP, SET8|'1', SET8|'!', NOP, NOP, 0x33, 0x00,
+/* sc=03 */ '"', '2', 0x00, 0x00, SET8|'2', SET8|'@', SET8|0x00, SET8|0x00, 0x00, 0x00,
+/* sc=04 */ '\'', '3', NOP, NOP, SET8|'3', SET8|'#', NOP, NOP, 0x33, 0x00,
+/* sc=05 */ ';', '4', NOP, NOP, SET8|'4', SET8|'$', NOP, NOP, 0x33, 0x00,
+/* sc=06 */ ':', '5', NOP, NOP, SET8|'5', SET8|'%', NOP, NOP, 0x33, 0x00,
+/* sc=07 */ ',', '6', 0x1E, 0x1E, SET8|'6', SET8|'^', SET8|0x1E, SET8|0x1E, 0x00, 0x00,
+/* sc=08 */ '.', '7', NOP, NOP, SET8|'7', SET8|'&', NOP, NOP, 0x33, 0x00,
+/* sc=09 */ '*', '8', NOP, NOP, SET8|'8', SET8|'*', NOP, NOP, 0x33, 0x00,
+/* sc=0a */ '(', '9', NOP, NOP, SET8|'9', SET8|'(', NOP, NOP, 0x33, 0x00,
+/* sc=0b */ ')', '0', NOP, NOP, SET8|'0', SET8|')', NOP, NOP, 0x33, 0x00,
+/* sc=0c */ '-', '_', 0x1F, 0x1F, SET8|'-', SET8|'_', SET8|0x1F, SET8|0x1F, 0x00, 0x00,
+/* sc=0d */ '=', '+', NOP, NOP, SET8|'=', SET8|'+', NOP, NOP, 0x33, 0x00,
+/* sc=0e */ 0x08, 0x08, 0x7F, 0x7F, SET8|0x08, SET8|0x08, SET8|0x7F, SET8|0x7F, 0x00, 0x00,
+/* sc=0f */ 0x09, F(16), NOP, NOP, SET8|0x09, F(16), NOP, NOP, 0x77, 0x00,
+/* sc=10 */ 0xca, 0xea, 0x11, 0x11, SET8|'q', SET8|'Q', SET8|0x11, SET8|0x11, 0x00, 0x01,
+/* sc=11 */ 0xc3, 0xe3, 0x17, 0x17, SET8|'w', SET8|'W', SET8|0x17, SET8|0x17, 0x00, 0x01,
+/* sc=12 */ 0xd5, 0xf5, 0x05, 0x05, SET8|'e', SET8|'E', SET8|0x05, SET8|0x05, 0x00, 0x01,
+/* sc=13 */ 0xcb, 0xeb, 0x12, 0x12, SET8|'r', SET8|'R', SET8|0x12, SET8|0x12, 0x00, 0x01,
+/* sc=14 */ 0xc5, 0xe5, 0x14, 0x14, SET8|'t', SET8|'T', SET8|0x14, SET8|0x14, 0x00, 0x01,
+/* sc=15 */ 0xce, 0xee, 0x19, 0x19, SET8|'y', SET8|'Y', SET8|0x19, SET8|0x19, 0x00, 0x01,
+/* sc=16 */ 0xc7, 0xe7, 0x15, 0x15, SET8|'u', SET8|'U', SET8|0x15, SET8|0x15, 0x00, 0x01,
+/* sc=17 */ 0xdb, 0xfb, 0x09, 0x09, SET8|'i', SET8|'I', SET8|0x09, SET8|0x09, 0x00, 0x01,
+/* sc=18 */ 0xdd, 0xfd, 0x0F, 0x0F, SET8|'o', SET8|'O', SET8|0x0F, SET8|0x0F, 0x00, 0x01,
+/* sc=19 */ 0xda, 0xfa, 0x10, 0x10, SET8|'p', SET8|'P', SET8|0x10, SET8|0x10, 0x00, 0x01,
+/* sc=1a */ 0xc8, 0xe8, 0x1B, 0x1B, SET8|'[', SET8|'{', SET8|0x1B, SET8|0x1B, 0x00, 0x01,
+/* sc=1b */ 0xdf, 0xff, 0x1D, 0x1D, SET8|']', SET8|'}', SET8|0x1D, SET8|0x1D, 0x00, 0x01,
+/* sc=1c */ 0x0D, 0x0D, 0x0A, 0x0A, SET8|0x0D, SET8|0x0D, SET8|0x0A, SET8|0x0A, 0x00, 0x00,
+/* sc=1d */ LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, 0xFF, 0x00,
+/* sc=1e */ 0xc6, 0xe6, 0x01, 0x01, SET8|'a', SET8|'A', SET8|0x01, SET8|0x01, 0x00, 0x01,
+/* sc=1f */ 0xd9, 0xf9, 0x13, 0x13, SET8|'s', SET8|'S', SET8|0x13, SET8|0x13, 0x00, 0x01,
+/* sc=20 */ 0xd7, 0xf7, 0x04, 0x04, SET8|'d', SET8|'D', SET8|0x04, SET8|0x04, 0x00, 0x01,
+/* sc=21 */ 0xc1, 0xe1, 0x06, 0x06, SET8|'f', SET8|'F', SET8|0x06, SET8|0x06, 0x00, 0x01,
+/* sc=22 */ 0xd0, 0xf0, 0x07, 0x07, SET8|'g', SET8|'G', SET8|0x07, SET8|0x07, 0x00, 0x01,
+/* sc=23 */ 0xd2, 0xf2, 0x08, 0x08, SET8|'h', SET8|'H', SET8|0x08, SET8|0x08, 0x00, 0x01,
+/* sc=24 */ 0xcf, 0xef, 0x0A, 0x0A, SET8|'j', SET8|'J', SET8|0x0A, SET8|0x0A, 0x00, 0x01,
+/* sc=25 */ 0xcc, 0xec, 0x0B, 0x0B, SET8|'k', SET8|'K', SET8|0x0B, SET8|0x0B, 0x00, 0x01,
+/* sc=26 */ 0xc4, 0xe4, 0x0C, 0x0C, SET8|'l', SET8|'L', SET8|0x0C, SET8|0x0C, 0x00, 0x01,
+/* sc=27 */ 0xd6, 0xf6, NOP, NOP, SET8|';', SET8|':', NOP, NOP, 0x33, 0x01,
+/* sc=28 */ 0xdc, 0xfc, NOP, NOP, SET8|'\'', SET8|'"', NOP, NOP, 0x33, 0x01,
+/* sc=29 */ 0xa3, 0xb3, NOP, NOP, SET8|'`', SET8|'~', NOP, NOP, 0x33, 0x01,
+/* sc=2a */ LSH, LSH, LSH, LSH, LSH, LSH, LSH, LSH, 0xFF, 0x00,
+/* sc=2b */ '\\', '|', 0x1C, 0x1C, SET8|'\\', SET8|'|', SET8|0x1C, SET8|0x1C, 0x00, 0x00,
+/* sc=2c */ 0xd1, 0xf1, 0x1A, 0x1A, SET8|'z', SET8|'Z', SET8|0x1A, SET8|0x1A, 0x00, 0x01,
+/* sc=2d */ 0xde, 0xfe, 0x18, 0x18, SET8|'x', SET8|'X', SET8|0x18, SET8|0x18, 0x00, 0x01,
+/* sc=2e */ 0xd3, 0xf3, 0x03, 0x03, SET8|'c', SET8|'C', SET8|0x03, SET8|0x03, 0x00, 0x01,
+/* sc=2f */ 0xcd, 0xed, 0x16, 0x16, SET8|'v', SET8|'V', SET8|0x16, SET8|0x16, 0x00, 0x01,
+/* sc=30 */ 0xc9, 0xe9, 0x02, 0x02, SET8|'b', SET8|'B', SET8|0x02, SET8|0x02, 0x00, 0x01,
+/* sc=31 */ 0xd4, 0xf4, 0x0E, 0x0E, SET8|'n', SET8|'N', SET8|0x0E, SET8|0x0E, 0x00, 0x01,
+/* sc=32 */ 0xd8, 0xf8, 0x0D, 0x0D, SET8|'m', SET8|'M', SET8|0x0D, SET8|0x0D, 0x00, 0x01,
+/* sc=33 */ 0xc2, 0xe2, NOP, NOP, SET8|',', SET8|'<', NOP, NOP, 0x33, 0x01,
+/* sc=34 */ 0xc0, 0xe0, NOP, NOP, SET8|'.', SET8|'>', NOP, NOP, 0x33, 0x01,
+/* sc=35 */ '/', '?', NOP, NOP, SET8|'/', SET8|'?', NOP, NOP, 0x33, 0x00,
+/* sc=36 */ RSH, RSH, RSH, RSH, RSH, RSH, RSH, RSH, 0xFF, 0x00,
+/* sc=37 */ '*', '*', 0x0A, 0x0A, SET8|'*', SET8|'*', SET8|0x0A, SET8|0x0A, 0x00, 0x00,
+/* sc=38 */ LALT, LALT, LALT, LALT, LALT, LALT, LALT, LALT, 0xFF, 0x00,
+/* sc=39 */ ' ', ' ', ' ', ' ', SET8|' ', SET8|' ', SET8|' ', SET8|' ', 0x00, 0x00,
+/* sc=3a */ ALK, CLK, CLK, CLK, CLK, CLK, CLK, CLK, 0xFF, 0x00,
+/* sc=3b */ F( 1), F(13), F(25), F(37), S( 1), S(11), S( 1), S(11), 0xFF, 0x00,
+/* sc=3c */ F( 2), F(14), F(26), F(38), S( 2), S(12), S( 2), S(12), 0xFF, 0x00,
+/* sc=3d */ F( 3), F(15), F(27), F(39), S( 3), S(13), S( 3), S(13), 0xFF, 0x00,
+/* sc=3e */ F( 4), F(16), F(28), F(40), S( 4), S(14), S( 4), S(14), 0xFF, 0x00,
+/* sc=3f */ F( 5), F(17), F(29), F(41), S( 5), S(15), S( 5), S(15), 0xFF, 0x00,
+/* sc=40 */ F( 6), F(18), F(30), F(42), S( 6), S(16), S( 6), S(16), 0xFF, 0x00,
+/* sc=41 */ F( 7), F(19), F(31), F(43), S( 7), S( 7), S( 7), S( 7), 0xFF, 0x00,
+/* sc=42 */ F( 8), F(20), F(32), F(44), S( 8), S( 8), S( 8), S( 8), 0xFF, 0x00,
+/* sc=43 */ F( 9), F(21), F(33), F(45), S( 9), S( 9), S( 9), S( 9), 0xFF, 0x00,
+/* sc=44 */ F(10), F(22), F(34), F(46), S(10), S(10), S(10), S(10), 0xFF, 0x00,
+/* sc=45 */ NLK, NLK, NLK, NLK, NLK, NLK, NLK, NLK, 0xFF, 0x00,
+/* sc=46 */ SLK, SLK, SLK, SLK, SLK, SLK, SLK, SLK, 0xFF, 0x00,
+/* sc=47 */ F(49), '7', '7', '7', SET8|'7', SET8|'7', SET8|'7', SET8|'7', 0x80, 0x02,
+/* sc=48 */ F(50), '8', '8', '8', SET8|'8', SET8|'8', SET8|'8', SET8|'8', 0x80, 0x02,
+/* sc=49 */ F(51), '9', '9', '9', SET8|'9', SET8|'9', SET8|'9', SET8|'9', 0x80, 0x02,
+/* sc=4a */ F(52), '-', '-', '-', SET8|'-', SET8|'-', SET8|'-', SET8|'-', 0x80, 0x02,
+/* sc=4b */ F(53), '4', '4', '4', SET8|'4', SET8|'4', SET8|'4', SET8|'4', 0x80, 0x02,
+/* sc=4c */ F(48), '5', '5', '5', SET8|'5', SET8|'5', SET8|'5', SET8|'5', 0x80, 0x02,
+/* sc=4d */ F(55), '6', '6', '6', SET8|'6', SET8|'6', SET8|'6', SET8|'6', 0x80, 0x02,
+/* sc=4e */ F(56), '+', '+', '+', SET8|'+', SET8|'+', SET8|'+', SET8|'+', 0x80, 0x02,
+/* sc=4f */ F(57), '1', '1', '1', SET8|'1', SET8|'1', SET8|'1', SET8|'1', 0x80, 0x02,
+/* sc=50 */ F(58), '2', '2', '2', SET8|'2', SET8|'2', SET8|'2', SET8|'2', 0x80, 0x02,
+/* sc=51 */ F(59), '3', '3', '3', SET8|'3', SET8|'3', SET8|'3', SET8|'3', 0x80, 0x02,
+/* sc=52 */ F(60), '0', '0', '0', SET8|'0', SET8|'0', SET8|'0', SET8|'0', 0x80, 0x02,
+/* sc=53 */ F(54), '.', 0x7F, 0x7F, SET8|0x7F, SET8|0x7F, RBT, SET8|0x7F, 0x82, 0x02,
+/* sc=54 */ ALK, ALK, ALK, ALK, ALK, ALK, ALK, ALK, 0xFF, 0x00,
+/* sc=55 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=56 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=57 */ F(11), F(23), F(35), F(47), S(11), S(11), S(11), S(11), 0xFF, 0x00,
+/* sc=58 */ F(12), F(24), F(36), F(48), S(12), S(12), S(12), S(12), 0xFF, 0x00,
+/* sc=59 */ 0x0D, 0x0D, 0x0A, 0x0A, SET8|0x0D, SET8|0x0D, SET8|0x0A, SET8|0x0A, 0x00, 0x00,
+/* sc=5a */ RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, 0xFF, 0x00,
+/* sc=5b */ '/', '/', NOP, NOP, SET8|'/', SET8|'/', NOP, NOP, 0x33, 0x00,
+/* sc=5c */ NEXT, NOP, DBG, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00,
+/* sc=5d */ RALT, RALT, RALT, RALT, RALT, RALT, RALT, RALT, 0xFF, 0x00,
+/* sc=5e */ F(49), F(49), F(49), F(49), F(49), F(49), F(49), F(49), 0xFF, 0x00,
+/* sc=5f */ F(50), F(50), F(50), F(50), F(50), F(50), F(50), F(50), 0xFF, 0x00,
+/* sc=60 */ F(51), F(51), F(51), F(51), F(51), F(51), F(51), F(51), 0xFF, 0x00,
+/* sc=61 */ F(53), F(53), F(53), F(53), F(53), F(53), F(53), F(53), 0xFF, 0x00,
+/* sc=62 */ F(55), F(55), F(55), F(55), F(55), F(55), F(55), F(55), 0xFF, 0x00,
+/* sc=63 */ F(57), F(57), F(57), F(57), F(57), F(57), F(57), F(57), 0xFF, 0x00,
+/* sc=64 */ F(58), F(58), F(58), F(58), F(58), F(58), F(58), F(58), 0xFF, 0x00,
+/* sc=65 */ F(59), F(59), F(59), F(59), F(59), F(59), F(59), F(59), 0xFF, 0x00,
+/* sc=66 */ F(60), F(60), F(60), F(60), F(60), F(60), F(60), F(60), 0xFF, 0x00,
+/* sc=67 */ F(54), F(54), 0x7F, 0x7F, SET8|0x7F, SET8|0x7F, RBT, SET8|0x7F, 0xC2, 0x00,
+/* sc=68 */ SLK, SLK, SLK, SLK, SLK, SLK, SLK, SLK, 0xFF, 0x00,
+};
+
diff --git a/share/syscons/keymaps/ru.koi8.map b/share/syscons/keymaps/ru.koi8.map
deleted file mode 100644
index 19d49d8c3018..000000000000
--- a/share/syscons/keymaps/ru.koi8.map
+++ /dev/null
Binary files differ
diff --git a/share/syscons/keymaps/rus.koi8.map b/share/syscons/keymaps/rus.koi8.map
deleted file mode 100644
index dfe7fd9e7adf..000000000000
--- a/share/syscons/keymaps/rus.koi8.map
+++ /dev/null
Binary files differ
diff --git a/share/syscons/scrnmaps/Makefile b/share/syscons/scrnmaps/Makefile
index 3c35575244b3..5a78201820b6 100644
--- a/share/syscons/scrnmaps/Makefile
+++ b/share/syscons/scrnmaps/Makefile
@@ -1,10 +1,21 @@
-SCRMAPS = koi82alt.scr
+SCRMAPS = koi8-r2alt.scr
+SCRMAPS_MK = ${SCRMAPS:R:S/$/.mk/g}
SCRDIR = /usr/share/syscons/scrnmaps
+CLEANFILES+= ${SCRMAPS} ${SCRMAPS_MK}
+NOMAN = noman
+
+all: ${SCRMAPS}
install:
- cd ${.CURDIR}; \
install -c -o ${BINOWN} -g ${BINGRP} -m 444 ${SCRMAPS} \
${DESTDIR}${SCRDIR}
+${SCRMAPS}: ${.TARGET:R}.mk
+ ./${.TARGET:R}.mk ${.TARGET}
+
+${SCRMAPS_MK}: ${.TARGET:R} mkscrfil.c
+ ${CC} ${CFLAGS} -I${.CURDIR} -DFIL=\"${.TARGET:R}\" \
+ -o ${.TARGET} ${.CURDIR}/mkscrfil.c
+
.include <bsd.prog.mk>
diff --git a/share/syscons/scrnmaps/koi8-r2alt b/share/syscons/scrnmaps/koi8-r2alt
new file mode 100644
index 000000000000..9f300a85eba4
--- /dev/null
+++ b/share/syscons/scrnmaps/koi8-r2alt
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 1994 by Andrew A. Chernov, Moscow, Russia.
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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.
+ */
+
+scrmap_t scrmap = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+ 0xc4, 0xb3, 0xda, 0xbf, 0xc0, 0xd9, 0xc3, 0xb4,
+ 0xc2, 0xc1, 0xc5, 0xdf, 0xdc, 0xdb, 0xdd, 0xde,
+ 0xb0, 0xb1, 0xb2, 0xf4, 0xfe, 0xf9, 0xfb, 0xf7,
+ 0xf3, 0xf2, 0xff, 0xf5, 0xf8, 0xfd, 0xfa, 0xf6,
+ 0xcd, 0xba, 0xd5, 0xf1, 0xd6, 0xc9, 0xb8, 0xb7,
+ 0xbb, 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6,
+ 0xc7, 0xcc, 0xb5, 0xf0, 0xb6, 0xb9, 0xd1, 0xd2,
+ 0xcb, 0xcf, 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0xfc,
+ 0xee, 0xa0, 0xa1, 0xe6, 0xa4, 0xa5, 0xe4, 0xa3,
+ 0xe5, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae,
+ 0xaf, 0xef, 0xe0, 0xe1, 0xe2, 0xe3, 0xa6, 0xa2,
+ 0xec, 0xeb, 0xa7, 0xe8, 0xed, 0xe9, 0xe7, 0xea,
+ 0x9e, 0x80, 0x81, 0x96, 0x84, 0x85, 0x94, 0x83,
+ 0x95, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e,
+ 0x8f, 0x9f, 0x90, 0x91, 0x92, 0x93, 0x86, 0x82,
+ 0x9c, 0x9b, 0x87, 0x98, 0x9d, 0x99, 0x97, 0x9a
+};
diff --git a/share/syscons/scrnmaps/koi82alt.scr b/share/syscons/scrnmaps/koi82alt.scr
deleted file mode 100644
index 6c6256d260d7..000000000000
--- a/share/syscons/scrnmaps/koi82alt.scr
+++ /dev/null
Binary files differ
diff --git a/share/syscons/scrnmaps/mkscrfil.c b/share/syscons/scrnmaps/mkscrfil.c
new file mode 100644
index 000000000000..d66283e1c8c3
--- /dev/null
+++ b/share/syscons/scrnmaps/mkscrfil.c
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 1994 by Andrew A. Chernov, Moscow, Russia.
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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/ioctl.h>
+#include <machine/console.h>
+#include <stdio.h>
+
+#include FIL
+
+int main(int argc, char **argv)
+{
+ FILE *fd;
+
+ if (argc == 2) {
+ if ((fd = fopen(argv[1], "w")) == NULL) {
+ perror(argv[1]);
+ return 1;
+ }
+ fwrite(&scrmap, sizeof(scrmap_t), 1, fd);
+ fclose(fd);
+ return 0;
+ }
+ else {
+ fprintf(stderr, "usage: %s <mapfile>\n", argv[0]);
+ return 1;
+ }
+}
diff --git a/share/termcap/Makefile b/share/termcap/Makefile
index 5a9c52c5089a..ae0afc6acd47 100644
--- a/share/termcap/Makefile
+++ b/share/termcap/Makefile
@@ -18,6 +18,8 @@ beforeinstall:
${DESTDIR}${BINDIR}/misc
install -c -o ${BINOWN} -g ${BINGRP} -m 444 ${.CURDIR}/map3270 \
${DESTDIR}${BINDIR}/misc
+ rm -f ${DESTDIR}/etc/map3270
+ ln -s ${BINDIR}/misc/map3270 ${DESTDIR}/etc/map3270
rm -f ${DESTDIR}/etc/termcap
ln -s ${BINDIR}/misc/termcap ${DESTDIR}/etc/termcap
diff --git a/share/termcap/termcap.src b/share/termcap/termcap.src
index b8d7f4e8664a..7938ef059587 100644
--- a/share/termcap/termcap.src
+++ b/share/termcap/termcap.src
@@ -1899,10 +1899,12 @@ cf|c100-rv-s|concept-rv-s|concept100-rv-s|c100rvs|slow reverse concept 100:\
cons25|ansi|ansi80x25:\
:al=\E[L:am:bs:cd=\E[J:ce=\E[K:cl=\E[2J\E[H:cm=\E[%i%d;%dH:co#80:\
:dc=\E[P:dl=\E[M:do=\E[B:bt=\E[Z:ei=:ho=\E[H:ic=\E[@:im=:li#25:\
- :nd=\E[C:pt:so=\E[7m:se=\E[m:us=\E[4m:ue=\E[m:up=\E[A:\
+ :ms:nd=\E[C:pt:rs=\E[x\E[m\Ec:so=\E[7m:se=\E[m:us=\E[4m:ue=\E[m:up=\E[A:\
:k1=\E[M:k2=\E[N:k3=\E[O:k4=\E[P:k5=\E[Q:k6=\E[R:\
:k7=\E[S:k8=\E[T:k9=\E[U:k0=\E[V:k10=\E[V:k11=\E[W:k12=\E[X:\
- :kb=^h:ku=\E[A:kd=\E[B:kl=\E[D:kr=\E[C:eo:sf=\E[S:sr=\E[T:\
+ :kb=^h:ku=\E[A:kd=\E[B:kl=\E[D:kr=\E[C:le=^H:eo:sf=\E[S:sr=\E[T:\
+ :IC=\E[%d@:DC=\E[%dP:SF=\E[%dS:SR=\E[%dT:AL=\E[%dL:DL=\E[%dM:\
+ :DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:\
:mb=\E[5m:md=\E[1m:me=\E[m:
cons50|ansil|ansi80x50:\
:li#50:tc=cons25:
@@ -3249,6 +3251,8 @@ pc|ibmpc|ibm pc PC/IX:\
pc3mono|IBM PC 386BSD Console with monochrome monitor:\
:so=\E[0;1r\E[m:tc=pc3:
pc3|ibmpc3|IBM PC 386BSD Console:\
+ :AL=\E[%dL:\
+ :DL=\E[%dM:\
:DO=\E[%dB:\
:K1=\E[H:\
:K2=\E[I:\
@@ -3257,7 +3261,10 @@ pc3|ibmpc3|IBM PC 386BSD Console:\
:K5=\E[G:\
:LE=\E[%dD:\
:RI=\E[%dC:\
+ :SF=\E[%dS:\
+ :SR=\E[%dT:\
:UP=\E[%dA:\
+ :al=\E[L:\
:am:\
:bl=^G:\
:bs:\
@@ -3268,6 +3275,7 @@ pc3|ibmpc3|IBM PC 386BSD Console:\
:cm=\E[%i%d;%dH:\
:co#80:\
:cr=^M:\
+ :dl=\E[M:\
:do=^J:\
:ho=\E[H:\
:is=\E[m:\
@@ -3295,6 +3303,7 @@ pc3|ibmpc3|IBM PC 386BSD Console:\
:li#25:\
:ms:\
:nd=\E[C:\
+ :pt:\
:rs=\E[m:\
:se=\E[m:\
:sf=\E[S:\
@@ -3304,6 +3313,28 @@ pc3|ibmpc3|IBM PC 386BSD Console:\
:te=\E[m:\
:ti=\E[m:\
:up=\E[A:
+# Syscons console with koi8-r russian code table.
+# Some non-standard termcap extentions added at the end (after 'ac')
+# for compatibility with current russian software.
+# You might need to add correct filename to Ct entry
+pc3r|ibmpc3r|FreeBSD console for syscons koi8-r code table:\
+ :li#25:co#80:am:bs:bw:eo:cu=\222:\
+ :UP=\E[%dA:DO=\E[%dB:RI=\E[%dC:LE=\E[%dD:AL=\E[%dL:DL=\E[%dM:\
+ :IC=\E[%d@:DC=\E[%dP:le=^H:ic=\E[@:dc=\E[P:cd=\E[J:ce=\E[K:cl=\E[H\E[J:\
+ :cm=\E[%i%d;%dH:do=^J:ho=\E[H:al=\E[L:dl=\E[M:nd=\E[C:up=\E[A:\
+ :so=\E[7m:se=\E[m:ms:rs=\E[x\E[m\Ec:pt:\
+ :mb=\E[5m:mr=\E[7m:md=\E[1m:mh=\E[30m\E[1m:me=\E[m:\
+ :kb=^H:kh=\E[H:ku=\E[A:kd=\E[B:kl=\E[D:kr=\E[C:\
+ :kN=\E[G:kP=\E[I:kH=\E[F:kI=\E[L:kD=\E[K:kB=\E[Z:\
+ :k1=\E[M:k2=\E[N:k3=\E[O:k4=\E[P:k5=\E[Q:k6=\E[R:k7=\E[S:k8=\E[T:\
+ :k9=\E[U:k0=\E[V:k.=\E[W:k-=\E[X:ko=k.,k-:kC=\E[E:\
+ :sr=\E[T:sf=\E[S:SR=\E[%dT:SF=\E[%dS:\
+ :ac=q\200x\201m\204v\211j\205t\206n\212u\207l\202w\210k\203y\230z\231f\234~\225a\221:\
+ :Nf#16:Nb#8:Cf=\E[=%dF:Cb=\E[=%dG:\
+ :gs=:ge=:g1=\200\201\204\211\205\206\212\207\202\210\203:\
+ :g2=\240\241\253\273\256\261\276\265\245\270\250:\
+ :f1=\E[M:f2=\E[N:f3=\E[O:f4=\E[P:f5=\E[Q:f6=\E[R:f7=\E[S:f8=\E[T:\
+ :f9=\E[U:f0=\E[V:f.=\E[W:f-=\E[X:CY:Cs=:Ce=:Ct=:
# Codrv 0.1.2
pc3n|ibmpc3|386BSD Console:\
:C2:Nf#16:Nb#8:Cf=\E[3;%p2%{16}%*%p1%+%dx:\
diff --git a/share/tmac/doc-common b/share/tmac/doc-common
index 2d25d0b7867c..8554d463f444 100644
--- a/share/tmac/doc-common
+++ b/share/tmac/doc-common
@@ -157,9 +157,9 @@
. ds cH \\$2
.\" . if "\\$3"" \{\
. if \\$2>=1 .if \\$2<=8 \{\
-. ds vT UNIX Reference Manual
-. if \\$2>1 .if \\$2<6 .ds vT UNIX Programmer's Manual
-. if "\\$2"8" .ds vT UNIX System Manager's Manual
+. ds vT FreeBSD Reference Manual
+. if \\$2>1 .if \\$2<6 .ds vT FreeBSD Programmer's Manual
+. if "\\$2"8" .ds vT FreeBSD System Manager's Manual
. nr sN \\$2
. \}
. if "\\$2"unass" .ds vT DRAFT
@@ -168,17 +168,17 @@
.\" . \}
.\}
.if !"\\$3"" \{\
-. if "\\$3"USD" .ds vT UNIX User's Supplementary Documents
-. if "\\$3"PS1" .ds vT UNIX Programmers's Supplementary Documents
-. if "\\$3"AMD" .ds vT UNIX Ancestral Manual Documents
-. if "\\$3"SMM" .ds vT UNIX System Manager's Manual
-. if "\\$3"URM" .ds vT UNIX Reference Manual
-. if "\\$3"PRM" .ds vT UNIX Programmers's Manual
-. if "\\$3"IND" .ds vT UNIX Manual Master Index
-.\" . if "\\$3"CON" .ds vT UNIX Contributed Software Manual
-.\" . if "\\$3"IMP" .ds vT UNIX Implementation Notes
-.\" . if "\\$3"HOW" .ds vT UNIX How Pocket Manual
-. if "\\$3"LOCAL" .ds vT UNIX Local Manual
+. if "\\$3"USD" .ds vT FreeBSD User's Supplementary Documents
+. if "\\$3"PS1" .ds vT FreeBSD Programmers's Supplementary Documents
+. if "\\$3"AMD" .ds vT FreeBSD Ancestral Manual Documents
+. if "\\$3"SMM" .ds vT FreeBSD System Manager's Manual
+. if "\\$3"URM" .ds vT FreeBSD Reference Manual
+. if "\\$3"PRM" .ds vT FreeBSD Programmers's Manual
+. if "\\$3"IND" .ds vT FreeBSD Manual Master Index
+.\" . if "\\$3"CON" .ds vT FreeBSD Contributed Software Manual
+.\" . if "\\$3"IMP" .ds vT FreeBSD Implementation Notes
+.\" . if "\\$3"HOW" .ds vT FreeBSD How Pocket Manual
+. if "\\$3"LOCAL" .ds vT FreeBSD Local Manual
. if "\\$3"tahoe" .as vT \ (Tahoe Architecture)
. if "\\$3"vax" .as vT \ (VAX Architecture)
. if "\\$3"hp300" .as vT \ (HP300 Architecture)
@@ -193,7 +193,7 @@
.de Os
.ds oS Null
.if "\\$1"" \{\
-. ds oS BSD Experimental
+. ds oS FreeBSD
.\}
.if "\\$2"" \{\
. ds aa Non-Null
@@ -220,7 +220,7 @@
. if "\\$2"4.3R" .ds oS 4.3-Reno Berkeley Distribution
. if "\\$2"4.3t" .ds oS 4.3-Tahoe Berkeley Distribution
. if "\\$2"4.3r" .ds oS 4.3-Reno Berkeley Distribution
-. if "\\$2"4.4" .ds oS BSD Experimental
+. if "\\$2"4.4" .ds oS 4.4 Berkeley Distribution
.\}
.if "\\*(oS"Null" .ds oS \0\\$1
.if "\\*(aa"Non-Null" .as oS \0\\$2
diff --git a/share/tmac/doc-syms b/share/tmac/doc-syms
index e8ae1846c393..fc1e2a639834 100644
--- a/share/tmac/doc-syms
+++ b/share/tmac/doc-syms
@@ -119,6 +119,32 @@
.de Ud
\&currently under development.
..
+.\" Ns Fx macro - FreeBSD
+.de Fx
+.nr cF \\n(.f
+.nr cZ \\n(.s
+.ds aa \&\f\\n(cF\s\\n(cZ
+.if \\n(.$==2 \{\
+. if "\\$1"Pk024" \&\\*(tN386BSD\\*(aa patchkit 0.2.4\\$2
+. if "\\$1"1.0a" \&\\*(tNFreeBSD\\*(aa version 1.0 ALPHA\\$2
+. if "\\$1"1.0b" \&\\*(tNFreeBSD\\*(aa version 1.0 BETA\\$2
+. if "\\$1"1.0g" \&\\*(tNFreeBSD\\*(aa version 1.0 GAMMA\\$2
+. if "\\$1"1.0e" \&\\*(tNFreeBSD\\*(aa version 1.0 EPSILON\\$2
+. if "\\$1"1.0" \&\\*(tNFreeBSD\\*(aa version 1.0\\$2
+. if "\\$1"1.0.2" \&\\*(tNFreeBSD\\*(aa version 1.0.2\\$2
+. if "\\$1"1.1" \&\\*(tNFreeBSD\\*(aa version 1.1\\$2
+.\}
+.if \\n(.$==1 \{\
+.\}
+. if "\\$1"Pk024" \&\\*(tN386BSD\\*(aa patchkit 0.2.4
+. if "\\$1"1.0a" \&\\*(tNFreeBSD\\*(aa version 1.0 ALPHA
+. if "\\$1"1.0b" \&\\*(tNFreeBSD\\*(aa version 1.0 BETA
+. if "\\$1"1.0g" \&\\*(tNFreeBSD\\*(aa version 1.0 GAMMA
+. if "\\$1"1.0e" \&\\*(tNFreeBSD\\*(aa version 1.0 EPSILON
+. if "\\$1"1.0" \&\\*(tNFreeBSD\\*(aa version 1.0
+. if "\\$1"1.0.2" \&\\*(tNFreeBSD\\*(aa version 1.0.2
+. if "\\$1"1.1" \&\\*(tNFreeBSD\\*(aa version 1.1
+..
.\" Ns At macro - AT&T UNIX
.de At
.nr cF \\n(.f
@@ -130,6 +156,8 @@
. if "\\$1"v7" \&Version 7 \\*(tNAT&T UNIX\\*(aa\\$2
. if "\\$1"V" \&\\*(tNAT&T\\*(aa System V \\*(tNUNIX\\*(aa\\$2
. if "\\$1"V.1" \&\\*(tNAT&T\\*(aa System V.1 \\*(tNUNIX\\*(aa\\$2
+. if "\\$1"V.2" \&\\*(tNAT&T\\*(aa System V.2 \\*(tNUNIX\\*(aa\\$2
+. if "\\$1"V.3" \&\\*(tNAT&T\\*(aa System V.3 \\*(tNUNIX\\*(aa\\$2
. if "\\$1"V.4" \&\\*(tNAT&T\\*(aa System V.4 \\*(tNUNIX\\*(aa\\$2
.\}
.if \\n(.$==1 \{\
@@ -138,6 +166,8 @@
. if "\\$1"v7" \&Version 7 \\*(tNAT&T UNIX\\*(aa
. if "\\$1"V" \&\\*(tNAT&T\\*(aa System V \\*(tNUNIX\\*(aa
. if "\\$1"V.1" \&\\*(tNAT&T\\*(aa System V.1 \\*(tNUNIX\\*(aa
+. if "\\$1"V.2" \&\\*(tNAT&T\\*(aa System V.2 \\*(tNUNIX\\*(aa
+. if "\\$1"V.3" \&\\*(tNAT&T\\*(aa System V.3 \\*(tNUNIX\\*(aa
. if "\\$1"V.4" \&\\*(tNAT&T\\*(aa System V.4 \\*(tNUNIX\\*(aa
.\}
..
@@ -152,7 +182,7 @@
.de St
.if \\n(aC==0 \{\
. ie \\n(.$==0 \{\
-.tm Usage: .St [-p1003.1-88 | -p1003.2 | -ansiC-89 | -iso ] \\*(Pu ... (#\\n(.c)
+.tm Usage: .St [-p1003.2-92 | -p1003.1-88 | -p1003.2 | -ansiC-89 | -iso ] \\*(Pu ... (#\\n(.c)
. \}
. el \{\
. ds mN St
@@ -185,6 +215,16 @@
. as b1 (``\\*(tN\\*(Px\\*(aa'')
. \}
. \}
+. if "\\*(A\\n(aP"-p1003.2-92" \{\
+. ie \\n(sT==1 \{\
+. ds b1 \&\\*(tNIEEE Std\\*(aa1003.2-1992\\*(sV
+. as b1 (``\\*(tN\\*(Px\\*(aa'')
+. \}
+. el \{\
+. ds b1 \&\\*(tNIEEE Std\\*(aa1003.2-1992\\*(sV
+. as b1 (``\\*(tN\\*(Px\\*(aa'')
+. \}
+. \}
. if "\\*(A\\n(aP"-p1003.2" \{\
. ie \\n(sT==1 \{\
. ds b1 \&\\*(tNIEEE Std\\*(aa1003.2
diff --git a/share/tmac/strip.sed b/share/tmac/strip.sed
deleted file mode 120000
index 707714fbb79f..000000000000
--- a/share/tmac/strip.sed
+++ /dev/null
@@ -1 +0,0 @@
-../me/strip.sed \ No newline at end of file
diff --git a/share/zoneinfo/Makefile b/share/zoneinfo/Makefile
index 844abd0422b9..b0cbbe14db4c 100644
--- a/share/zoneinfo/Makefile
+++ b/share/zoneinfo/Makefile
@@ -5,7 +5,7 @@
# Alternately, if you discover you've got the wrong time zone, you can just
# zic -l rightzone
-LOCALTIME= US/Pacific
+LOCALTIME= Factory
# If you want something other than Eastern United States time as a template
# for handling POSIX-style time zone environment variables,
@@ -14,7 +14,7 @@ LOCALTIME= US/Pacific
# Alternately, if you discover you've got the wrong time zone, you can just
# zic -p rightzone
-POSIXRULES= US/Pacific
+POSIXRULES= America/New_York
# Use an absolute path name for TZDIR unless you're just testing the software.
@@ -34,7 +34,7 @@ TZDIR= ${DESTDIR}/usr/share/zoneinfo
# REDO= right_posix
# below.
-REDO= right_only
+REDO= right_posix
# If you're running on a System V-style system and don't want lint grief,
# add
@@ -109,7 +109,7 @@ MAN5= tzfile.5
SRCS= zic.c scheck.c ialloc.c
YDATA= africa antarctica asia australasia europe northamerica \
- southamerica pacificnew russia etcetera factory
+ southamerica pacificnew etcetera factory backward
NDATA= systemv
#SDATA= solar87 solar88 solar89
TDATA= ${YDATA} ${NDATA} ${SDATA}
diff --git a/share/zoneinfo/README b/share/zoneinfo/README
new file mode 100644
index 000000000000..47607971eef2
--- /dev/null
+++ b/share/zoneinfo/README
@@ -0,0 +1,72 @@
+@(#)README 7.3
+
+"What time is it?" -- Richard Deacon as The King
+"Any time you want it to be." -- Frank Baxter as The Scientist
+ (from the Bell System film on time)
+
+The 1989 update of the time zone package featured
+
+* POSIXization (including interpretation of POSIX-style TZ environment
+ variables, provided by Guy Harris),
+* ANSIfication (including versions of "mktime" and "difftime"),
+* SVIDulation (an "altzone" variable)
+* MACHination (the "gtime" function)
+* corrections to some time zone data (including corrections to the rules
+ for Great Britain and New Zealand)
+* reference data from the United States Naval Observatory for folks who
+ want to do additional time zones
+* and the 1989 data for Saudi Arabia.
+
+(Since this code will be treated as "part of the implementation" in some places
+and as "part of the application" in others, there's no good way to name
+functions, such as timegm, that are not part of the proposed ANSI C standard;
+such functions have kept their old, underscore-free names in this update.)
+
+Support for the tz_abbr variable has been eliminated from this version
+(to forestall "kitchen sink" complaints from certain quarters :-).
+
+Support for Turbo C compilation has also been eliminated; it was present to
+allow checking in an ANSI-style environment, and such checking is now done with
+gcc.
+
+And the "dysize" function has disappeared; it was present to allow compilation
+of the "date" command on old BSD systems, and a version of "date" is now
+provided in the package. The "date" command is not created when you "make all"
+since it may lack options provided by the version distributed with your
+operating system, or may not interact with the system in the same way the
+native version does.
+
+Since POSIX frowns on correct leap second handling, the default behavior of
+the "zic" command (in the absence of a "-L" option) has been changed to omit
+leap second information from its output files.
+
+Be sure to read the comments in "Makefile" and make any changes
+needed to make things right for your system.
+
+To use the new functions, use a "-lz" option when compiling or linking.
+
+Historical local time information has been included here not because it
+is particularly useful, but rather to:
+
+* give an idea of the variety of local time rules that have
+ existed in the past and thus an idea of the variety that may be
+ expected in the future;
+
+* provide a test of the generality of the local time rule description
+ system.
+
+The information in the time zone data files is by no means authoritative;
+if you know that the rules are different from those in a file, by all means
+feel free to change file (and please send the changed version to
+ado@ncifcrf.gov for use in the future). Europeans take note!
+
+Thanks to these Timezone Caballeros who've made major contributions to the
+time conversion package: Keith Bostic; Bob Devine; Robert Elz; Guy Harris;
+Mark Horton; John Mackin; and Bradley White. Thanks also to Michael Bloom,
+Art Neilson, Stephen Prince, John Sovereign, and Frank Wales for testing work.
+None of them are responsible for remaining errors.
+
+Look in the ~ftp/pub directory of elsie.nci.nih.gov (128.231.16.1)
+for updated versions of these files.
+
+Please send comments or information to ado@elsie.nci.nih.gov.
diff --git a/share/zoneinfo/Theory b/share/zoneinfo/Theory
new file mode 100644
index 000000000000..93a07c0f7da4
--- /dev/null
+++ b/share/zoneinfo/Theory
@@ -0,0 +1,120 @@
+@(#)Theory 7.2
+
+These time and date functions are much like the System V Release 2.0 (SVR2)
+time and date functions; there are a few additions and changes to extend
+the usefulness of the SVR2 functions:
+
+* In SVR2, time display in a process is controlled by the environment
+ variable TZ, which "must be a three-letter time zone name, followed
+ by a number representing the difference between local time and
+ Greenwich Mean Time in hours, followed by an optional three-letter
+ name for a daylight time zone;" when the optional daylight time zone is
+ present, "standard U.S.A. Daylight Savings Time conversion is applied."
+ This means that SVR2 can't deal with other (for example, Australian)
+ daylight savings time rules, or situations where more than two
+ time zone abbreviations are used in an area.
+
+* In SVR2, time conversion information is compiled into each program
+ that does time conversion. This means that when time conversion
+ rules change (as in the United States in 1987), all programs that
+ do time conversion must be recompiled to ensure proper results.
+
+* In SVR2, time conversion fails for near-minimum or near-maximum
+ time_t values when doing conversions for places that don't use GMT.
+
+* In SVR2, there's no tamper-proof way for a process to learn the
+ system's best idea of local wall clock. (This is important for
+ applications that an administrator wants used only at certain times--
+ without regard to whether the user has fiddled the "TZ" environment
+ variable. While an administrator can "do everything in GMT" to get
+ around the problem, doing so is inconvenient and precludes handling
+ daylight savings time shifts--as might be required to limit phone
+ calls to off-peak hours.)
+
+* These functions can account for leap seconds, thanks to Bradley White
+ (bww@k.cs.cmu.edu).
+
+These are the changes that have been made to the SVR2 functions:
+
+* The "TZ" environment variable is used in generating the name of a file
+ from which time zone information is read (or is interpreted a la
+ POSIX); "TZ" is no longer constrained to be a three-letter time zone
+ name followed by a number of hours and an optional three-letter
+ daylight time zone name. The daylight saving time rules to be used
+ for a particular time zone are encoded in the time zone file;
+ the format of the file allows U.S., Australian, and other rules to be
+ encoded, and allows for situations where more than two time zone
+ abbreviations are used.
+
+ It was recognized that allowing the "TZ" environment variable to
+ take on values such as "US/Eastern" might cause "old" programs
+ (that expect "TZ" to have a certain form) to operate incorrectly;
+ consideration was given to using some other environment variable
+ (for example, "TIMEZONE") to hold the string used to generate the
+ time zone information file name. In the end, however, it was decided
+ to continue using "TZ": it is widely used for time zone purposes;
+ separately maintaining both "TZ" and "TIMEZONE" seemed a nuisance;
+ and systems where "new" forms of "TZ" might cause problems can simply
+ use TZ values such as "EST5EDT" which can be used both by
+ "new" programs (a la POSIX) and "old" programs (as zone names and
+ offsets).
+
+* To handle places where more than two time zone abbreviations are used,
+ the functions "localtime" and "gmtime" set tzname[tmp->tm_isdst]
+ (where "tmp" is the value the function returns) to the time zone
+ abbreviation to be used. This differs from SVR2, where the elements
+ of tzname are only changed as a result of calls to tzset.
+
+* Since the "TZ" environment variable can now be used to control time
+ conversion, the "daylight" and "timezone" variables are no longer
+ needed or supported. (You can use a compile-time option to cause
+ these variables to be defined and to be set by "tzset"; however, their
+ values will not be used by "localtime.")
+
+* The "localtime" function has been set up to deliver correct results
+ for near-minimum or near-maximum time_t values. (A comment in the
+ source code tells how to get compatibly wrong results).
+
+* A function "tzsetwall" has been added to arrange for the system's
+ best approximation to local wall clock time to be delivered by
+ subsequent calls to "localtime." Source code for portable
+ applications that "must" run on local wall clock time should call
+ "tzsetwall();" if such code is moved to "old" systems that don't provide
+ tzsetwall, you won't be able to generate an executable program.
+ (These time zone functions also arrange for local wall clock time to be
+ used if tzset is called--directly or indirectly--and there's no "TZ"
+ environment variable; portable applications should not, however, rely
+ on this behavior since it's not the way SVR2 systems behave.)
+
+Points of interest to folks with Version 7 or BSD systems:
+
+* The BSD "timezone" function is not present in this package;
+ it's impossible to reliably map timezone's arguments (a "minutes west
+ of GMT" value and a "daylight saving time in effect" flag) to a
+ time zone abbreviation, and we refuse to guess.
+ Programs that in the past used the timezone function may now examine
+ tzname[localtime(&clock)->tm_isdst] to learn the correct time
+ zone abbreviation to use. Alternatively, use localtime(&clock)->tm_zone
+ if this has been enabled.
+
+* The BSD gettimeofday function is not used in this package;
+ this lets users control the time zone used in doing time conversions.
+ Users who don't try to control things (that is, users who do not set
+ the environment variable TZ) get the time conversion specified in the
+ file "/etc/zoneinfo/localtime"; see the time zone compiler writeup for
+ information on how to initialize this file.
+
+The functions that are conditionally compiled if STD_INSPIRED is defined should,
+at this point, be looked on primarily as food for thought. They are not in
+any sense "standard compatible"--some are not, in fact, specified in *any*
+standard. They do, however, represent responses of various authors to
+standardization proposals.
+
+Other time conversion proposals, in particular the one developed by folks at
+Hewlett Packard, offer a wider selection of functions that provide capabilities
+beyond those provided here. The absence of such functions from this package
+is not meant to discourage the development, standardization, or use of such
+functions. Rather, their absence reflects the decision to make this package
+close to SVR2 (with the exceptions outlined above) to ensure its broad
+acceptability. If more powerful time conversion functions can be standardized,
+so much the better.
diff --git a/share/zoneinfo/datfiles/africa b/share/zoneinfo/datfiles/africa
index bed0252ea01a..6a56d890dd6a 100644
--- a/share/zoneinfo/datfiles/africa
+++ b/share/zoneinfo/datfiles/africa
@@ -1,4 +1,177 @@
-# @(#)africa 4.3
+# @(#)africa 7.4
+
+# 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):
+#
+# 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 added so many Zone names that the old, mostly flat name space was unwieldy.
+# So I renamed the Zones to have the form AREA/LOCATION, where
+# AREA is the name of a continent or ocean, and
+# LOCATION is the name of a specific location within that region.
+# For example, the old zone name `Egypt' is now `Africa/Cairo'.
+#
+# Here are the general rules I used for choosing location names,
+# in decreasing order of importance:
+#
+# Use only valid Posix file names. Use only Ascii letters, digits, `.',
+# `-' and `_'. Do not exceed 14 characters or start with `-'.
+# E.g. prefer `Brunei' to `Bandar_Seri_Begawan'.
+# Include at least one location per time zone rule set per country.
+# One such location is enough.
+# If a name is ambiguous, use a less ambiguous alternative;
+# e.g. many cities are named San Jose and Georgetown, so
+# prefer `Costa_Rica' to `San_Jose' and `Guyana' to `Georgetown'.
+# Keep locations compact. Use cities or small islands, not countries
+# or regions, so that any future time zone changes do not split
+# locations into different time zones. E.g. prefer `Paris'
+# to `France', since France has had multiple time zones.
+# Use traditional English spelling, e.g. prefer `Rome' to `Roma', and
+# prefer `Athens' to the true name (which uses Greek letters).
+# The Posix file name restrictions encourage this rule.
+# Use the most populous among locations in a country's time zone,
+# e.g. prefer `Shanghai' to `Beijing'. Among locations with
+# similar populations, pick the best-known location,
+# e.g. prefer `Rome' to `Milan'.
+# Use the singular form, e.g. prefer `Canary' to `Canaries'.
+# Omit common suffixes like `_Islands' and `_City', unless that
+# would lead to ambiguity. E.g. prefer `Cayman' to
+# `Cayman_Islands' and `Guatemala' to `Guatemala_City',
+# but prefer `Mexico_City' to `Mexico' because the country
+# of Mexico has several time zones.
+# Use `_' to represent a space.
+# Omit `.' from abbreviations in names, e.g. prefer `St_Helena'
+# to `St._Helena'.
+#
+# I made up the following time zone abbreviations; corrections are welcome!
+# LMT Local Mean Time
+# -2:00 CVT Cape Verde Time (no longer used)
+# -1:00 AAT Atlantic Africa Time
+# 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 1911 only - Jan 1 0:00s 0 -
+Rule Algeria 1916 only - Jun 14 23:00s 1:00 " DST"
+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 1920 only - Oct 23 23:00s 0 -
+Rule Algeria 1921 only - Mar 14 23:00s 1:00 " DST"
+Rule Algeria 1921 only - Jun 21 23:00s 0 -
+Rule Algeria 1939 only - Sep 11 23:00s 1:00 " DST"
+Rule Algeria 1939 only - Nov 19 1:00 0 -
+Rule Algeria 1944 1945 - Apr Mon<=7 2:00 1:00 " DST"
+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 - Sep 26 23:00s 0 -
+Rule Algeria 1977 only - May 6 0:00 1:00 " DST"
+Rule Algeria 1977 only - Oct 21 0:00 0 -
+Rule Algeria 1978 only - Mar 24 1:00 1:00 " DST"
+Rule Algeria 1978 only - Sep 22 3:00 0 -
+Rule Algeria 1980 only - Apr 25 0:00 1:00 " DST"
+Rule Algeria 1980 only - Oct 31 2:00 0 -
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01
+ 0:09 - 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 - 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
+
+# Angola
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Luanda 0:52:56 - LMT 1892
+ 0:52 - LMT 1911 May 26 # Luanda Mean Time
+ 1:00 - CAT
+
+# Benin
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Porto-Novo 0:10:28 - LMT 1912
+ 0:00 - WAT 1934 Feb 26
+ 1:00 - CAT
+
+# Botswana
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Gaborone 1:43:40 - LMT 1885
+ 2:00 - SAT 1943 Sep 19 2:00
+ 2:00 1:00 SAST 1944 Mar 19 2:00
+ 2:00 - SAT
+
+# Burkina Faso
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Ouagadougou -0:06:04 - LMT 1912
+ 0:00 - WAT
+
+# Burundi
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Bujumbura 1:57:28 - LMT 1890
+ 2:00 - SAT
+
+# Cameroon
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Douala 0:38:48 - LMT 1912
+ 1:00 - CAT
+
+# Cape Verde
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+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
+
+# Central African Republic
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Bangui 1:14:20 - LMT 1912
+ 1:00 - CAT
+
+# Chad
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Ndjamena 1:00:12 - LMT 1912
+ 1:00 - CAT 1979 Oct 14
+ 1:00 1:00 CAST 1980 Mar 8
+ 1:00 - CAT
+
+# Comoros
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Indian/Comoro 2:53:04 - LMT 1911 Jul # Moroni, Gran Comoro
+ 3:00 - EAT
+
+# Congo
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Brazzaville 1:01:08 - LMT 1912
+ 1:00 - CAT
+
+# Cote D'Ivoire
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Abidjan -0:16:08 - LMT 1912
+ 0:00 - WAT
+
+# Djibouti
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Djibouti 2:52:36 - LMT 1911 Jul
+ 3:00 - EAT
###############################################################################
@@ -15,14 +188,116 @@
# EGYPT 3 H AHEAD OF UTC MAY 17 - SEP 30 (AFTER
# EGYPT RAMADAN)
+# From Shanks (1991):
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Egypt 1900 only - Oct 1 0:00 0 -
+Rule Egypt 1940 only - Jul 15 0:00 1:00 " DST"
+Rule Egypt 1940 only - Oct 1 0:00 0 -
+Rule Egypt 1941 only - Apr 15 0:00 1:00 " DST"
+Rule Egypt 1941 only - Sep 16 0:00 0 -
+Rule Egypt 1942 1944 - Apr 1 0:00 1:00 " DST"
+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 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 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"
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Cairo 2:05:00 - LMT 1900 Oct
+ 2:00 Egypt EET%s
+
+# Equatorial Guinea
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Malabo 0:35:08 - LMT 1912
+ 0:00 - WAT 1963 Dec 15
+ 1:00 - CAT
+
+# 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
+ 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
+ 3:00 - EAT
+
+# Gabon
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Libreville 0:37:48 - LMT 1912
+ 1:00 - CAT
+
+# Gambia
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Banjul -1:06:36 - LMT 1912
+ -1:07 - BMT 1935 # Banjul Mean Time
+ -1:00 - AAT 1964
+ 0:00 - WAT
+
+# Ghana
+# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+# WATST is my invention for ``West Africa one-Third Daylight Time''.
+# From Shanks (1991):
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Egypt 1960 max - May 1 2:00 1:00 " DST"
-Rule Egypt 1960 max - Oct 1 2:00 0 -
+Rule Ghana 1918 only - Jan 1 0:00 0 WAT
+Rule Ghana 1936 1942 - Sep 1 0:00 0:20 WATDT
+Rule Ghana 1936 1942 - Dec 31 0:00 0 WAT
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Accra -0:00:52 - LMT 1918
+ 0:00 Ghana %s
+
+# Guinea
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Conakry -0:54:52 - LMT 1912
+ 0:00 - WAT 1934 Feb 26
+ 1:00 - CAT 1960
+ 0:00 - WAT
+
+# Guinea-Bissau
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Bissau -1:02:20 - LMT 1911 May 26
+ 1:00 - CAT 1975
+ 0:00 - WAT
+
+# Kenya
+# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+# Shanks says the transition to 2:45 was in 1940, but it must have been 1948.
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Nairobi 2:27:16 - LMT 1928 Jul
+ 3:00 - EAT 1930
+ 2:30 - BEAT 1948
+ 2:45 - BEAT 1960
+ 3:00 - EAT
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone Egypt 2:00 Egypt EET%s 1981
- 2:00 - EET 1983
- 2:00 Egypt EET%s
+# Lesotho
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Maseru 1:50:00 - LMT 1903 Mar
+ 2:00 - SAT 1943 Sep 19 2:00
+ 2:00 1:00 SAST 1944 Mar 19 2:00
+ 2:00 - SAT
+
+# Liberia
+# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+# In 1972 Liberia was the last country to switch
+# from a GMT offset that was not a multiple of 15 minutes.
+# Time magazine reported that it was in honor of their leader's birthday.
+# From Shanks (1991):
+# 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 - MMT 1972 May
+ 0:00 - WAT
###############################################################################
@@ -35,9 +310,275 @@ Zone Egypt 2:00 Egypt EET%s 1981
# LIBYAN ARAB 1 H AHEAD OF UTC JAMAHIRIYA/LIBYA
# LIBYAN ARAB 2 H AHEAD OF UTC APR 1 - SEP 30 JAMAHIRIYA/LIBYA
+# From Shanks (1991):
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Libya 1982 max - Apr 1 2:00 1:00 " DST"
-Rule Libya 1982 max - Sep 30 2:00 0 -
+Rule Libya 1920 only - Jan 1 0:00 0 -
+Rule Libya 1951 only - Oct 14 2:00 1:00 " DST"
+Rule Libya 1952 only - Jan 1 0:00 0 -
+Rule Libya 1953 only - Oct 9 2:00 1:00 " DST"
+Rule Libya 1954 only - Jan 1 0:00 0 -
+Rule Libya 1955 only - Sep 30 0:00 1:00 " DST"
+Rule Libya 1956 only - Jan 1 0:00 0 -
+Rule Libya 1982 1984 - Apr 1 0:00 1:00 " DST"
+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 1986 only - Oct 3 0:00 0 -
+Rule Libya 1987 1989 - Apr 1 0:00 1:00 " DST"
+Rule Libya 1987 1990 - Oct 1 0:00 0 -
+Rule Libya 1990 only - May 4 0:00 1:00 " DST"
+# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+# Here's a guess for years starting with 1991.
+Rule Libya 1991 max - Apr 1 0:00 1:00 " DST"
+Rule Libya 1991 max - Oct 1 0:00 0 -
+
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Tripoli 0:52:44 - LMT 1920
+ 1:00 Libya MET%s 1959
+ 2:00 - EET 1982
+ 1:00 Libya MET%s
+
+# Madagascar
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Indian/Antananarivo 3:10:04 - LMT 1911 Jul
+ 3:00 - EAT 1954 Feb 27 23:00s
+ 3:00 1:00 EAST 1954 May 29 23:00s
+ 3:00 - EAT
+
+# Malawi
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Blantyre 2:20:00 - LMT 1903 Mar
+ 2:00 - SAT
+
+# Mali
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Bamako -0:32:00 - LMT 1912
+ 0:00 - WAT 1934 Feb 26
+ -1:00 - AAT 1960 Jun 20
+ 0:00 - WAT
+# no longer different from Bamako, but too famous to omit
+Zone Africa/Timbuktu -0:12:04 - LMT 1912
+ 0:00 - WAT
+
+# Mauritania
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Nouakchott -1:03:48 - LMT 1912
+ 0:00 - WAT 1934 Feb 26
+ -1:00 - AAT 1960 Jun 20
+ 0:00 - WAT
+
+# Mauritius
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis
+ 4:00 - SMT
+# Agalega Is, Rodriguez
+# no information; probably like Indian/Mauritius
+
+# Mayotte
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Indian/Mayotte 3:01:08 - LMT 1911 Jul # Dzaoudzi
+ 3:00 - EAT
+
+# Morocco
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Morocco 1913 only - Oct 26 0:00 0 -
+Rule Morocco 1939 only - Sep 12 0:00 1:00 " DST"
+Rule Morocco 1939 only - Nov 19 0:00 0 -
+Rule Morocco 1940 only - Feb 25 0:00 1:00 " DST"
+Rule Morocco 1945 only - Nov 18 0:00 0 -
+Rule Morocco 1950 only - Jun 11 0:00 1:00 " DST"
+Rule Morocco 1950 only - Oct 29 0:00 0 -
+Rule Morocco 1967 only - Jun 3 12:00 1:00 " DST"
+Rule Morocco 1967 only - Oct 1 0:00 0 -
+Rule Morocco 1974 only - Jun 24 0:00 1:00 " DST"
+Rule Morocco 1974 only - Sep 1 0:00 0 -
+Rule Morocco 1976 1977 - May 1 0:00 1:00 " DST"
+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 - 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 - WET
+# The following are controlled by Spain, and are like Europe/Madrid:
+# Alboran, Alhucemas Is, Ceuta, Chafarinas Is, Mellila.
+
+# Mozambique
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Maputo 2:10:20 - LMT 1903 Mar
+ 2:00 - SAT
+
+# Namibia
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8
+ 1:30 - SWAT 1903 Mar # SW Africa Time
+ 2:00 - SAT 1942 Sep 20 2:00
+ 2:00 1:00 SAST 1943 Mar 21 2:00
+ 2:00 - SAT
+
+# Niger
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Niamey 0:08:28 - LMT 1912
+ 1:00 - CAT 1934 Feb 26
+ 0:00 - WAT 1960
+ 1:00 - CAT
+
+# Nigeria
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Lagos 0:13:36 - LMT 1919 Sep
+ 1:00 - CAT
+
+# Reunion
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # St Denis
+ 4:00 - SMT
+
+# Rwanda
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Kigali 2:00:16 - LMT 1935 Jun
+ 2:00 - SAT
+
+# 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:00 - GMT
+# Ascension, Gough, Inaccessible, Nightingale, Tristan da Cunha
+# no information; probably like Atlantic/St_Helena
+
+# 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:00 - WAT
+
+# Senegal
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Dakar -1:09:44 - LMT 1912
+ -1:00 - AAT 1941 Jun
+ 0:00 - WAT
+
+# Seychelles
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria
+ 4:00 - SMT
+
+# Sierra Leone
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule SL 1913 only - Oct 26 0:00 0 -
+Rule SL 1935 1942 - Jun 1 0:00 1:00 S
+Rule SL 1935 1942 - Oct 1 0:00 0 -
+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
+ -1:00 SL AA%sT 1957
+ 0:00 SL WA%sT
+
+# Somalia
+# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+# Shanks omits the 1948 transition to 2:45; this is probably a typo.
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Mogadishu 3:01:28 - LMT 1893 Nov
+ 3:00 - EAT 1931
+ 2:30 - BEAT 1948
+ 2:45 - BEAT 1957 # not in Shanks
+ 3:00 - EAT
+
+# South Africa
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule SA 1892 only - Feb 8 0:00 0 -
+Rule SA 1942 1943 - Sep Sun>=15 2:00 1:00 S
+Rule SA 1943 1944 - Mar Sun>=15 2:00 0 -
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Johannesburg 1:52:00 - LMT 1892 Feb 8
+ 1:30 - SAT 1903 Mar
+ 2:00 SA SA%sT
+# Prince Edward Is
+# no information
+
+# Sudan
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Sudan 1931 only - Feb 8 0:00 0 -
+Rule Sudan 1970 only - May 1 0:00 1:00 " DST"
+Rule Sudan 1970 max - Oct 15 0:00 0 -
+Rule Sudan 1971 only - Apr 30 0:00 1:00 " DST"
+Rule Sudan 1972 max - Apr lastSun 0:00 1:00 " DST"
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Khartoum 2:10:08 - LMT 1931
+ 2:00 Sudan EET%s
+
+# Swaziland
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Mbabane 2:04:24 - LMT 1903 Mar
+ 2:00 - SAT
+
+# Tanzania
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Dar_es_Salaam 2:37:08 - LMT 1931
+ 3:00 - EAT 1948
+ 2:45 - BEAT 1961
+ 3:00 - EAT
+
+# Togo
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Lome 0:04:52 - LMT 1893
+ 0:00 - WAT
+
+# Tunisia
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Tunisia 1911 only - Mar 9 0:00 0 -
+Rule Tunisia 1939 only - Apr 15 23:00s 1:00 " DST"
+Rule Tunisia 1939 only - Nov 18 23:00s 0 -
+Rule Tunisia 1940 only - Feb 25 23:00s 1:00 " DST"
+Rule Tunisia 1941 only - Oct 6 0:00 0 -
+Rule Tunisia 1942 only - Mar 9 0:00 1:00 " DST"
+Rule Tunisia 1942 only - Nov 2 3:00 0 -
+Rule Tunisia 1943 only - Mar 29 2:00 1:00 " DST"
+Rule Tunisia 1943 only - Apr 17 2:00 0 -
+Rule Tunisia 1943 only - Apr 25 2:00 1:00 " DST"
+Rule Tunisia 1943 only - Oct 4 2:00 0 -
+Rule Tunisia 1944 1945 - Apr Mon>=1 2:00 1:00 " DST"
+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 - Sep 24 0:00s 0 -
+Rule Tunisia 1978 only - May 1 0:00s 1:00 " DST"
+Rule Tunisia 1978 only - Oct 1 0:00s 0 -
+Rule Tunisia 1988 only - Jun 1 0:00s 1:00 " DST"
+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"
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Tunis 0:40:44 - LMT 1881 May 12
+ 0:09 - PMT 1911 Mar 9 # Paris Mean Time
+ 1:00 Tunisia MET%s
+
+# Uganda
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Kampala 2:09:40 - LMT 1928 Jul
+ 3:00 - EAT 1930
+ 2:30 - BEAT 1948
+ 2:45 - BEAT 1957
+ 3:00 - EAT
+
+# Zaire
+# 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
+ 2:00 - SAT
+
+# Zambia
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Lusaka 1:53:08 - LMT 1903 Mar
+ 2:00 - SAT
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone Libya 2:00 Libya EET%s
+# Zimbabwe
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Africa/Harare 2:04:12 - LMT 1903 Mar
+ 2:00 - SAT
diff --git a/share/zoneinfo/datfiles/antarctica b/share/zoneinfo/datfiles/antarctica
index 276dda1fa55d..f5ed31370d50 100644
--- a/share/zoneinfo/datfiles/antarctica
+++ b/share/zoneinfo/datfiles/antarctica
@@ -1,4 +1,19 @@
-# @(#)antarctica 4.1
+# @(#)antarctica 7.2
# From Arthur David Olson (February 13, 1988):
# No data available.
+
+# Balleny Is
+
+# British Antarctic Territories include
+# South Orkney Is
+# South Shetland Is
+
+# Amsterdam Island
+# Bouvet
+# Crozet Is
+# Heard and McDonald Is
+# Kerguelen Is
+# St Paul Island
+# Peter I Island
+# Scott Island
diff --git a/share/zoneinfo/datfiles/asia b/share/zoneinfo/datfiles/asia
index 13185b0f58c9..2419269c38a0 100644
--- a/share/zoneinfo/datfiles/asia
+++ b/share/zoneinfo/datfiles/asia
@@ -1,4 +1,52 @@
-# @(#)asia 7.1
+# @(#)asia 7.8
+
+# 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):
+#
+# 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.
+# Corrections are welcome!
+# std dst
+# LMT Local Mean Time
+# LST Local Star Time (Russian ``mestnoe zvezdnoe vremya'')
+# 2:00 EET EET DST Eastern European Time
+# 2:00 IST IDT Israel
+# 3:00 AST ADT Arabia*
+# 3:00 MSK MSD Moscow
+# 3:30 IST IDT Iran
+# 4:00 BSK BSD Baku*
+# 4:00 GST GDT Gulf*
+# 4:30 AFT Afghanistan*
+# 5:00 TSK TSD Tashkent*
+# 5:00 PKT Pakistan*
+# 5:30 IST IST India
+# 5:45 NPT Nepal*
+# 6:00 BGT Bengal, Bangladesh*
+# 6:30 BMT Burma*
+# 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 Phillippines*
+# 8:00 SGT Singapore
+# 8:00 UST UDT Ulan Bator*
+# 9:00 JST Japan
+# 9:00 KST KDT Korea
+# 9:00 MLT Moluccas*
+# 9:30 CST Australian Central Standard Time
+#
+# See the `europe' file for Russia in Asia.
+#
+# See the `africa' file for Zone naming conventions.
# From Guy Harris:
# Incorporates data for Singapore from Robert Elz' asia 1.1, as well as
@@ -8,6 +56,80 @@
###############################################################################
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Russia 1981 1984 - Apr 1 0:00 1:00 D
+Rule Russia 1981 1983 - Oct 1 0:00 0 K
+Rule Russia 1984 1990 - Sep lastSun 3:00 0 K
+Rule Russia 1985 1990 - Mar lastSun 2:00 1:00 D
+Rule Russia 1992 max - Sep lastSun 2:00s 0 K
+Rule Russia 1992 max - Mar lastSun 2:00s 1:00 D
+
+# Afghanistan
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Kabul 4:36:48 - LMT 1890
+ 4:00 - GST 1945
+ 4:30 - AFT
+
+# Armenia
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2
+ 3:00 - MSK 1957 Mar
+ 4:00 Russia BS%s 1991 Sep 29 3:00
+ 3:00 Russia MS%s
+
+# Azerbaijan
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Baku 3:19:24 - LMT 1924 May 2
+ 3:00 - MSK 1957 Mar
+ 4:00 Russia BS%s 1991 Sep 29 3:00
+ 3:00 Russia MS%s
+
+# Bahrain
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Bahrain 3:22:20 - LMT 1920 # Al-Manamah
+ 4:00 - GST 1972 Jun
+ 3:00 - AST
+
+# 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:30 - IST 1942 Sep
+ 6:30 - BMT 1951 Sep 30
+ 6:00 - BGT
+
+# 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
+
+# British Indian Ocean Territory (Chagos Archipelago, Diego Garcia)
+# no information
+
+# Brunei
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Brunei 7:39:40 - LMT 1926 Mar # Bandar Seri Begawan
+ 7:30 - BNT 1933
+ 8:00 - BNT
+
+# Burma
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Rangoon 6:24:40 - LMT 1880
+ 6:25 - RMT 1920
+ 6:30 - BMT 1942 May
+ 9:00 - JST 1945 May 3
+ 6:30 - BMT
+
+# 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:00 - ICT 1912 May
+ 8:00 - ICT 1931 May
+ 7:00 - ICT
+
# People's Republic of China
# From Guy Harris:
@@ -27,39 +149,169 @@
# 1986 May 4 - Sept 14
# 1987 mid-April - ??
+# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+# According to Shanks, China started using DST in 1986,
+# but it's still all one big happy time zone.
+
# From U. S. Naval Observatory (January 19, 1989):
# CHINA 8 H AHEAD OF UTC ALL OF CHINA, INCL TAIWAN
# CHINA 9 H AHEAD OF UTC APR 17 - SEP 10
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule PRC 1970 max - Apr Sun<=14 2:00 1:00 D
-Rule PRC 1970 max - Sep Sun<=14 3:00 0 S
+# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+# 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,
+# and that they instituted DST on 1986 May 4; this contradicts Devine's
+# note about Time magazine, though apparently _something_ happened in 1986.
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone PRC 8:00 PRC C%sT
+# From Shanks (1991):
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Shang 1928 only - Jan 1 0:00 0 S
+Rule Shang 1940 only - Jun 3 0:00 1:00 D
+Rule Shang 1940 1941 - Oct 1 0:00 0 S
+Rule Shang 1941 only - Mar 16 0:00 1:00 D
+Rule PRC 1949 only - Jan 1 0:00 0 S
+Rule PRC 1986 only - May 4 0:00 1:00 D
+Rule PRC 1986 max - Sep Sun>=11 0:00 0 S
+Rule PRC 1987 max - Apr Sun>=10 0:00 1:00 D
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Shanghai 8:05:52 - LMT 1928
+ 8:00 Shang C%sT 1949
+ 8:00 PRC C%sT
###############################################################################
# Republic of China
-# From Guy Harris
-
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone ROC 8:00 - CST
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Taiwan 1896 only - Jan 1 0:00 0 S
+Rule Taiwan 1945 1951 - May 1 0:00 1:00 D
+Rule Taiwan 1945 1951 - Oct 1 0:00 0 S
+Rule Taiwan 1952 only - Mar 1 0:00 1:00 D
+Rule Taiwan 1952 1954 - Nov 1 0:00 0 S
+Rule Taiwan 1953 1959 - Apr 1 0:00 1:00 D
+Rule Taiwan 1955 1961 - Oct 1 0:00 0 S
+Rule Taiwan 1960 1961 - Jun 1 0:00 1:00 D
+Rule Taiwan 1974 1975 - Apr 1 0:00 1:00 D
+Rule Taiwan 1974 1975 - Oct 1 0:00 0 S
+Rule Taiwan 1980 only - Jun 30 0:00 1:00 D
+Rule Taiwan 1980 only - Sep 30 0:00 0 S
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Taipei 8:06:00 - LMT 1896
+ 8:00 Taiwan C%sT
###############################################################################
+# Hong Kong
+# Presumably Hong Kong will have DST again when it merges with China,
+# but it's too early to predict the details.
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule HK 1904 only - Oct 30 0:00 0 -
+Rule HK 1946 only - Apr 20 3:30 1:00 S
+Rule HK 1946 only - Dec 1 3:30 0 -
+Rule HK 1947 only - Apr 13 3:30 1:00 S
+Rule HK 1947 only - Dec 30 3:30 0 -
+Rule HK 1948 only - May 2 3:30 1:00 S
+Rule HK 1948 1952 - Oct lastSun 3:30 0 -
+Rule HK 1949 1953 - Apr Sun>=1 3:30 1:00 S
+Rule HK 1953 only - Nov 1 3:30 0 -
+Rule HK 1954 1964 - Mar Sun>=18 3:30 1:00 S
+Rule HK 1954 only - Oct 31 3:30 0 -
+Rule HK 1955 1964 - Nov Sun>=1 3:30 0 -
+Rule HK 1965 1977 - Apr Sun>=16 3:30 1:00 S
+Rule HK 1965 1977 - Oct Sun>=16 3:30 0 -
+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
+
+# Macao
+# Presumably Macao will have DST again when it merges with China,
+# but it's too early to predict the details.
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Macao 1912 only - Jan 1 0:00 0 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
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Macao 7:34:20 - LMT 1912
+ 8:00 Macao C%sT
-# Hongkong
-
-# From Guy Harris
-
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone Hongkong 8:00 - HKT
###############################################################################
+# Cyprus
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Cyprus 1921 only - Nov 14 0:00 0 -
+Rule Cyprus 1975 only - Apr 13 0:00 1:00 " DST"
+Rule Cyprus 1975 only - Oct 12 0:00 0 -
+Rule Cyprus 1976 only - May 15 0:00 1:00 " DST"
+Rule Cyprus 1976 only - Oct 11 0:00 0 -
+Rule Cyprus 1977 1980 - Apr Sun>=1 0:00 1:00 " DST"
+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"
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Nicosia 2:13:28 - LMT 1921 Nov 14
+ 2:00 Cyprus EET%s
+
+# Georgia
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Tbilisi 2:59:16 - LMT 1880
+ 2:59 - LST 1924 May 2
+ 3:00 - MSK 1957 Mar
+ 4:00 Russia BS%s 1991 Sep 29 3:00
+ 3:00 Russia MS%s
+
+# 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:30 - IST 1942 Sep
+ 5:30 1:00 IST 1945 Oct 15
+ 5:30 - IST
+# The following are like India/Calcutta:
+# Andaman Is
+# Lakshadweep (Laccadive, Minicoy and Amindivi Is)
+# Nicobar Is
+
+# 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
+ 9:00 - JST 1945 Aug
+ 7:30 - JVT 1948 May
+ 8:00 - JVT 1950 May
+ 7:30 - JVT 1964
+ 7:00 - JVT
+Zone Asia/Ujung_Pandang 7:57:36 - LMT 1920
+ 7:58 - MMT 1932 Nov # Macassar Mean Time
+ 8:00 - BNT 1942 Feb 9
+ 9:00 - JST 1945 Aug
+ 8:00 - BNT
+Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
+ 9:00 - MLT 1944
+ 9:30 - CST 1964
+ 9:00 - MLT
+
# Iran
+# Shanks has no record of DST after 1980.
+
# From Bob Devine (January 28, 1988):
# Iran: Last Sunday in March to third (?) Sunday in
# September. Since the revolution, the official calendar is Monarchic
@@ -68,12 +320,36 @@ Zone Hongkong 8:00 - HKT
# From U. S. Naval Observatory (January 19, 1989):
# IRAN 3.5H AHEAD OF UTC
+# From Shanks (1991), with corrections from Devine:
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Iran 1977 only - Nov 1 0:00 0 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 1988 max - Mar lastSun 2:00 1:00 D
Rule Iran 1988 max - Sep Sun>=15 2:00 0 S
+# 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
+
+# Iraq
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Iraq 1982 only - May 1 0:00 1:00 D
+Rule Iraq 1982 1984 - Oct 1 0:00 0 S
+Rule Iraq 1983 only - Mar 31 0:00 1:00 D
+Rule Iraq 1984 1985 - Apr 1 0:00 1:00 D
+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
+ 3:00 - AST 1982 May
+ 3:00 Iraq A%sT
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone Iran 3:30 Iran I%sT
###############################################################################
@@ -83,180 +359,437 @@ Zone Iran 3:30 Iran I%sT
# ISRAEL 2 H AHEAD OF UTC
# ISRAEL 3 H AHEAD OF UTC APR 10 - SEP 3
-# From Ephraim Silverberg (April 18, 1989):
-
-# Prior to 1989, the rules concerning Daylight Savings Time changed every
-# year; as information, regarding exact times and dates during this period,
-# is not readily available at the present time, the rules commence starting
-# with the year 1989.
-
-# From 1989 onwards the rules are as follows:
-#
-# 1. Daylight Savings Time commences midnight of the first Saturday night
-# following the seven-day festival of Pesach (Passover). The transition
-# is from midnight Israel Standard Time to 1 a.m. Israel Daylight Savings
-# time. As the Pesach festival is dependent on the Lunar calendar (the
-# first day is always on the 15th day of the month of Nisan), the rule
-# changes every year on the Gregorian calendar.
-#
-# 2. Standard Time is reinstated on the Saturday night whereupon Jews
-# following the Ashkenazi (European) rite begin to recite the Selichot
-# (forgiveness) prayers prior to the Jewish Lunar New Year. The transition
-# is from midnight Israel Daylight Savings time to 11 p.m. Israel Standard
-# Time. The law (according to the Ashkenazi custom) concerning the
-# commencement of the Selichot prayers is described in chapter 128, section
-# 5 of the "Code of Jewish Law," by Rabbi Shlomo Ganzfried (translated by
-# Hyman E. Goldin):
+# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
#
-# Beginning with the Sunday [**] before Rosh Hashanah [***],
-# we rise early for the service of Selichot (supplications for
-# forgiveness). If Rosh Hashanah occurs on Monday or Tuesday, we
-# begin saying the Selichot from the Sunday of the preceding week.
-#
-# This, too, varies from year to year on the Gregorian calendar and, thus,
-# two explicit timezone rules are required for each Gregorian year.
+# Shanks gives the following rules for Jerusalem from 1918 through 1991.
+# After 1989 Shanks often disagrees with Silverberg; we go with Silverberg.
+
+# From Shanks (1991):
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Zion 1918 only - Jan 1 0:00 0 S
+Rule Zion 1940 only - Jun 1 0:00 1:00 D
+Rule Zion 1942 1944 - Nov 1 0:00 0 S
+Rule Zion 1943 only - Apr 1 2:00 1:00 D
+Rule Zion 1944 only - Apr 1 0:00 1:00 D
+Rule Zion 1945 only - Apr 16 0:00 1:00 D
+Rule Zion 1945 only - Nov 1 2:00 0 S
+Rule Zion 1946 only - Apr 16 2:00 1:00 D
+Rule Zion 1946 only - Nov 1 0:00 0 S
+Rule Zion 1948 only - May 23 0:00 2:00 DD
+Rule Zion 1948 only - Sep 1 0:00 1:00 D
+Rule Zion 1948 1949 - Nov 1 2:00 0 S
+Rule Zion 1949 only - May 1 0:00 1:00 D
+Rule Zion 1950 only - Apr 16 0:00 1:00 D
+Rule Zion 1950 only - Sep 15 3:00 0 S
+Rule Zion 1951 only - Apr 1 0:00 1:00 D
+Rule Zion 1951 only - Nov 11 3:00 0 S
+Rule Zion 1952 only - Apr 20 2:00 1:00 D
+Rule Zion 1952 only - Oct 19 3:00 0 S
+Rule Zion 1953 only - Apr 12 2:00 1:00 D
+Rule Zion 1953 only - Sep 13 3:00 0 S
+Rule Zion 1954 only - Jun 13 0:00 1:00 D
+Rule Zion 1954 only - Sep 12 0:00 0 S
+Rule Zion 1955 only - Jun 11 2:00 1:00 D
+Rule Zion 1955 only - Sep 11 0:00 0 S
+Rule Zion 1956 only - Jun 3 0:00 1:00 D
+Rule Zion 1956 only - Sep 30 3:00 0 S
+Rule Zion 1957 only - Apr 29 2:00 1:00 D
+Rule Zion 1957 only - Sep 22 0:00 0 S
+Rule Zion 1974 only - Jul 7 0:00 1:00 D
+Rule Zion 1974 only - Oct 13 0:00 0 S
+Rule Zion 1975 only - Apr 20 0:00 1:00 D
+Rule Zion 1975 only - Aug 31 0:00 0 S
+Rule Zion 1985 only - Apr 14 0:00 1:00 D
+Rule Zion 1985 only - Sep 15 0:00 0 S
+Rule Zion 1986 only - May 18 0:00 1:00 D
+Rule Zion 1986 only - Sep 7 0:00 0 S
+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 (September 5, 1993):
#
-# [**] actually Saturday night as the Jewish day commences at nightfall.
-# [***] the Jewish Lunar New Year.
+# According to the Office of the Secretary General of the Ministry of
+# Interior, there is NO set rule for Daylight-Savings/Standard time changes.
+# Each year they decide anew what havoc to wreak on the country. However,
+# there is a "supposed" set of rules which is subject to change depending
+# on the party the Minister of Interior, the size of the coalition
+# government, the phase of the moon and the direction of the wind. Hence,
+# changes may need to be made on a semi-annual basis. One thing is entrenched
+# in law, however: that there must be at least 150 days on daylight savings
+# time annually.
# 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 24 0:00 0:00 S
-Rule Zion 1990 only - Apr 22 0:00 1:00 D
-Rule Zion 1990 only - Sep 16 0:00 0:00 S
-Rule Zion 1991 only - Apr 7 0:00 1:00 D
+Rule Zion 1989 only - Sep 3 0:00 0:00 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 1991 only - Mar 24 0:00 1:00 D
Rule Zion 1991 only - Sep 1 0:00 0:00 S
-Rule Zion 1992 only - Apr 26 0:00 1:00 D
-Rule Zion 1992 only - Sep 20 0:00 0:00 S
-Rule Zion 1993 only - Apr 18 0:00 1:00 D
-Rule Zion 1993 only - Sep 12 0:00 0:00 S
-Rule Zion 1994 only - Apr 3 0:00 1:00 D
-Rule Zion 1994 only - Aug 28 0:00 0:00 S
-Rule Zion 1995 only - Apr 23 0:00 1:00 D
-Rule Zion 1995 only - Sep 17 0:00 0:00 S
-Rule Zion 1996 only - Apr 14 0:00 1:00 D
-Rule Zion 1996 only - Sep 8 0:00 0:00 S
-Rule Zion 1997 only - May 4 0:00 1:00 D
-Rule Zion 1997 only - Sep 28 0:00 0:00 S
-Rule Zion 1998 only - Apr 19 0:00 1:00 D
-Rule Zion 1998 only - Sep 13 0:00 0:00 S
-Rule Zion 1999 only - Apr 11 0:00 1:00 D
-Rule Zion 1999 only - Sep 5 0:00 0:00 S
-Rule Zion 2000 only - Apr 30 0:00 1:00 D
-Rule Zion 2000 only - Sep 24 0:00 0:00 S
-Rule Zion 2001 only - Apr 15 0:00 1:00 D
-Rule Zion 2001 only - Sep 9 0:00 0:00 S
-Rule Zion 2002 only - Apr 7 0:00 1:00 D
-Rule Zion 2002 only - Sep 1 0:00 0:00 S
-Rule Zion 2003 only - Apr 27 0:00 1:00 D
-Rule Zion 2003 only - Sep 21 0:00 0:00 S
-Rule Zion 2004 only - Apr 18 0:00 1:00 D
-Rule Zion 2004 only - Sep 12 0:00 0:00 S
-Rule Zion 2005 only - May 1 0:00 1:00 D
-Rule Zion 2005 only - Sep 25 0:00 0:00 S
-Rule Zion 2006 only - Apr 23 0:00 1:00 D
-Rule Zion 2006 only - Sep 17 0:00 0:00 S
-Rule Zion 2007 only - Apr 15 0:00 1:00 D
-Rule Zion 2007 only - Sep 9 0:00 0:00 S
-Rule Zion 2008 only - Apr 27 0:00 1:00 D
-Rule Zion 2008 only - Sep 21 0:00 0:00 S
-Rule Zion 2009 only - Apr 19 0:00 1:00 D
-Rule Zion 2009 only - Sep 13 0:00 0:00 S
-
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone Israel 2:00 Zion I%sT
-
-# The following is a chart of the day of the week and Gregorian date of
-# the first day of Pesach and the first day of Rosh Hashanah for the years
-# 1989 through 2009 inclusive.
-#
-# First Day of Passover
-# ---------------------
-# Gregorian Year Day of Week Month Day
-# -------------- ----------- ----- ---
-# 1989 Thursday April 20
-# 1990 Tuesday April 10
-# 1991 Saturday March 30
-# 1992 Saturday April 18
-# 1993 Tuesday April 6
-# 1994 Sunday March 27
-# 1995 Saturday April 15
-# 1996 Thursday April 4
-# 1997 Tuesday April 22
-# 1998 Saturday April 11
-# 1999 Thursday April 1
-# 2000 Thursday April 20
-# 2001 Sunday April 8
-# 2002 Thursday March 28
-# 2003 Thursday April 17
-# 2004 Tuesday April 6
-# 2005 Sunday April 24
-# 2006 Thursday April 13
-# 2007 Tuesday April 3
-# 2008 Sunday April 20
-# 2009 Thursday April 9
-#
-# First Day of Rosh Hashanah
-# --------------------------
-# Gregorian Year Day of Week Month Day
-# -------------- ----------- ----- ---
-# 1989 Saturday September 30
-# 1990 Thursday September 20
-# 1991 Monday September 9
-# 1992 Monday September 28
-# 1993 Thursday September 16
-# 1994 Tuesday September 6
-# 1995 Monday September 25
-# 1996 Saturday September 14
-# 1997 Thursday October 2
-# 1998 Monday September 21
-# 1999 Saturday September 11
-# 2000 Saturday September 30
-# 2001 Tuesday September 18
-# 2002 Saturday September 7
-# 2003 Saturday September 27
-# 2004 Thursday September 16
-# 2005 Tuesday October 4
-# 2006 Saturday September 23
-# 2007 Thursday September 13
-# 2008 Tuesday September 30
-# 2009 Saturday September 19
+Rule Zion 1992 only - Mar 29 0:00 1:00 D
+Rule Zion 1992 only - Sep 6 0:00 0:00 S
+Rule Zion 1993 only - Apr 2 0:00 1:00 D
+Rule Zion 1993 only - Sep 5 0:00 0:00 S
+
+# The dates for 1994-1995 were obtained from Office of the Spokeswoman for
+# the Ministry of Interior, Jerusalem. There are no dates yet for 1996 and
+# beyond so your guess is as good as theirs (those who are interested can
+# call 972-2-701411 and ask 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 - Aug 27 0:00 0:00 S
+
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Tel_Aviv 2:19:04 - LMT 1880
+ 2:21 - JMT 1918
+ 2:00 Zion I%sT
+
###############################################################################
# Japan
-# From Guy Harris
+# `9:00' and `JST' is from Guy Harris.
+
+# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+# Shanks says that the far southern Ryukyu Is (Nansei-Shoto) are 8:00,
+# but we don't have a good location name for them;
+# we don't even know the name of the principal town.
+# There is no information for Marcus.
+# Other Japanese possessions are probably like Asia/Tokyo.
+
+# 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
+#Zone Asia/South_Ryukyu 8:14:44 - LMT 1896 # Amitori
+# 8:00 - CST
+
+# Jordan
+# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+# 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 1931 only - Jan 1 0:00 0 -
+Rule Jordan 1973 only - Jun 6 0:00 1:00 " DST"
+Rule Jordan 1973 1975 - Oct 1 0:00 0 -
+Rule Jordan 1974 1977 - May 1 0:00 1:00 " DST"
+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 - Sep 30 0:00 0 -
+Rule Jordan 1985 only - Apr 1 0:00 1:00 " DST"
+Rule Jordan 1985 only - Oct 1 0:00 0 -
+Rule Jordan 1986 1988 - Apr Fri>=1 0:00 1:00 " DST"
+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 1991 only - Sep 27 0:00 0 -
+Rule Jordan 1992 max - Apr Fri>=1 0:00 1:00 " DST"
+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
+
+# Kazakhstan
+# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+# Before 1993, Almaty was known by its Russian name ``Alma-Ata''.
+# From Shanks (1991):
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Almaty 5:07:48 - LMT 1924 May 2
+ 5:00 - TSK 1957 Mar
+ 6:00 Russia TS%s 1991 Sep 29 3:00
+ 5:00 Russia TS%s
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone Japan 9:00 - JST
###############################################################################
-# Republic of Korea
+# Korea
# From Guy Harris:
# According to someone at the Korean Times in San Francisco,
# Daylight Savings Time was not observed until 1987. He did not know
# at what time of day DST starts or ends.
+# From Shanks (1991):
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule ROK 1987 max - May Sun<=14 2:00 1:00 D
-Rule ROK 1987 max - Oct Sun<=14 3:00 0 S
-
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone ROK 9:00 ROK K%sT
+Rule ROK 1960 only - May 15 0:00 1:00 D
+Rule ROK 1960 only - Sep 13 0:00 0 S
+Rule ROK 1987 1988 - May Sun<=14 0:00 1:00 D
+Rule ROK 1987 1988 - Oct Sun<=14 0:00 0 S
+
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Seoul 8:27:52 - LMT 1890
+ 8:30 - KST 1904 Dec
+ 9:00 - KST 1928
+ 8:30 - KST 1932
+ 9:00 - KST 1954 Mar 21
+ 8:00 ROK K%sT 1961 Aug 10
+ 8:30 - KST 1968 Oct
+ 9:00 ROK K%sT
+Zone Asia/Pyongyang 8:23:00 - LMT 1890
+ 8:30 - KST 1904 Dec
+ 9:00 - KST 1928
+ 8:30 - KST 1932
+ 9:00 - KST 1954 Mar 21
+ 8:00 - KST 1961 Aug 10
+ 9:00 - KST
###############################################################################
-# Lebanon
-# From Bob Devine (January 28, 1988):
-# Lebanon: They do have DST but I don't know the dates.
+# Kuwait
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Kuwait 3:11:56 - LMT 1950
+ 3:00 - AST
-###############################################################################
+# Kyrgyzstan
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Frunze 4:58:24 - LMT 1924 May 2
+ 5:00 - TSK 1957 Mar
+ 6:00 Russia TS%s 1991 Sep 29 3:00
+ 5:00 Russia TS%s
-# Singapore
+# 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: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 1880 only - Jan 1 0:00 0 -
+Rule Lebanon 1920 only - Mar 28 0:00 1:00 " DST"
+Rule Lebanon 1920 only - Oct 25 0:00 0 -
+Rule Lebanon 1921 only - Apr 3 0:00 1:00 " DST"
+Rule Lebanon 1921 only - Oct 3 0:00 0 -
+Rule Lebanon 1922 only - Mar 26 0:00 1:00 " DST"
+Rule Lebanon 1922 only - Oct 8 0:00 0 -
+Rule Lebanon 1923 only - Apr 22 0:00 1:00 " DST"
+Rule Lebanon 1923 only - Sep 16 0:00 0 -
+Rule Lebanon 1957 1961 - May 1 0:00 1:00 " DST"
+Rule Lebanon 1957 1961 - Oct 1 0:00 0 -
+Rule Lebanon 1972 only - Jun 22 0:00 1:00 " DST"
+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 1978 only - Sep 30 0:00 0 -
+Rule Lebanon 1984 1987 - May 1 0:00 1:00 " DST"
+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"
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Beirut 2:22:00 - LMT 1880
+ 2:00 Lebanon EET%s
+
+# Malaysia
+# 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
+ 9:00 - JST 1945 Sep 2
+ 7:20 - SGT 1950
+ 7:30 - SGT 1982 May
+ 8:00 - SGT
+
+# Maldives
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
+ 4:54 - MMT 1960
+ 5:00 - PKT
+
+# Mongolia
+# 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 1978 only - Jan 1 0:00 0 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
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+#Zone Asia/Dariv 6:14:32 - LMT 1905 Aug
+# 6:00 - DST 1978
+# 7:00 Mongol D%sT
+Zone Asia/Ulan_Bator 7:07:32 - LMT 1905 Aug
+ 7:00 - UST 1978
+ 8:00 Mongol U%sT
+#Zone Asia/Baruun-Urt 7:33:00 - LMT 1905 Aug
+# 8:00 - BST 1978
+# 9:00 Mongol B%sT
+
+# Nepal
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Katmandu 5:41:16 - LMT 1920
+ 5:30 - IST 1986
+ 5:45 - NPT
+
+# Oman
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Muscat 3:54:20 - LMT 1920
+ 4:00 - GST
+
+# Pakistan
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+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
+
+# Palestine
+# These rules for Egypt are stolen from the `africa' file.
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Egypt 1957 only - May 10 0:00 1:00 " DST"
+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 1959 1965 - Sep 30 3:00 0 -
+Rule Egypt 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 Egypt EET%s 1967 Jun 30
+ 2:00 Zion I%sT
+# This will undoubtedly change soon.
+
+# Philippines
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Phil 1899 only - May 11 0:00 0 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
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Manila 8:04:00 - LMT 1899 May 11
+ 8:00 Phil P%sT 1942 May
+ 9:00 - JST 1944 Nov
+ 8:00 Phil P%sT
+
+# Qatar
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah
+ 4:00 - GST 1972 Jun
+ 3:00 - AST
+
+# Saudi Arabia
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Riyadh 3:06:52 - LMT 1950
+ 3:00 - AST
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone Singapore 8:00 - SST
+# 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
+ 9:00 - JST 1945 Sep 2
+ 7:20 - SGT 1950
+ 7:30 - SGT 1982 May
+ 8:00 - SGT
+
+# Sri Lanka
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Colombo 5:19:24 - LMT 1880
+ 5:20 - JMT 1906
+ 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
+
+# Syria
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Syria 1920 only - Jan 1 0:00 0 -
+Rule Syria 1920 1923 - Apr Sun>=15 2:00 1:00 " DST"
+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 - Oct 1 2:00 0 -
+Rule Syria 1963 1965 - May 1 2:00 1:00 " DST"
+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 1976 - Oct 1 2:00 0 -
+Rule Syria 1967 1978 - May 1 2:00 1:00 " DST"
+Rule Syria 1977 1978 - Sep 1 2:00 0 -
+Rule Syria 1983 1984 - Apr 9 2:00 1:00 " DST"
+Rule Syria 1983 1984 - Oct 1 2:00 0 -
+Rule Syria 1986 only - Feb 16 2:00 1:00 " DST"
+Rule Syria 1986 only - Oct 9 2:00 0 -
+Rule Syria 1987 only - Mar 1 2:00 1:00 " DST"
+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 1989 only - Oct 1 2:00 0 -
+Rule Syria 1990 max - Apr 1 2:00 1:00 " DST"
+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
+
+# Tajikistan
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
+ 5:00 - TSK 1957 Mar
+ 6:00 Russia TS%s 1991 Sep 29 3:00
+ 5:00 Russia TS%s
+
+# Thailand
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Bangkok 6:42:04 - LMT 1880
+ 6:42 - BMT 1920 Apr
+ 7:00 - ICT
+
+# Turkmenistan
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Ashkhabad 3:53:32 - LMT 1924 May 2
+ 4:00 - BSK 1957 Mar
+ 5:00 Russia SS%s 1991 Sep 29 3:00
+ 4:00 Russia BS%s
+
+# United Arab Emirates
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Dubai 3:41:12 - LMT 1920
+ 4:00 - GST
+
+# Uzbekistan
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Tashkent 4:37:12 - LMT 1924 May 2
+ 5:00 - TSK 1957 Mar
+ 6:00 Russia TS%s 1991 Sep 29 3:00
+ 5:00 Russia TS%s
+
+# Vietnam
+# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+# Saigon's official name is Thanh-Pho Ho Chi Minh, but it's too long.
+# We'll stick with the traditional name for now.
+# 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:00 - ICT 1912 May
+ 8:00 - ICT 1931 May
+ 7:00 - ICT
+
+# Yemen
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Asia/Aden 3:00:48 - LMT 1950
+ 3:00 - AST
diff --git a/share/zoneinfo/datfiles/australasia b/share/zoneinfo/datfiles/australasia
index 749a7afb791e..c3f23ada9b57 100644
--- a/share/zoneinfo/datfiles/australasia
+++ b/share/zoneinfo/datfiles/australasia
@@ -1,36 +1,606 @@
-# @(#)australasia 4.4
+# @(#)australasia 7.18
+# This file also includes Pacific islands.
-# Incorporates updates for Australia from Robert Elz' australia 1.1
-# and further updates from the Australian consulate.
+# Notes are at the end of this file
###############################################################################
# Australia
-# Australian Data (for states with DST), standard rules
-# Includes shift in 1987 to follow Vic/NSW rules for ending DST,
-# and shift in 1986 to start DST earlier.
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Aus 1895 only - Jan 1 0:00 0 -
+Rule Aus 1917 only - Jan 1 0:01 1:00 -
+Rule Aus 1917 only - Mar 25 2:00 0 -
+Rule Aus 1942 only - Jan 1 2:00 1:00 -
+Rule Aus 1942 only - Mar 20 2:00 0 -
+Rule Aus 1942 only - Sep 27 2:00 1:00 -
+Rule Aus 1943 1944 - Mar lastSun 2:00 0 -
+Rule Aus 1943 only - Oct 3 2:00 1:00 -
+
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Australia/Darwin 8:43:20 - LMT 1895 Feb
+ 9:30 - CST 1917 Jan 1 0:01
+ 9:30 Aus CST
+Zone Australia/Perth 7:43:24 - LMT 1895 Dec
+ 8:00 - WST 1917 Jan 1 0:01
+ 8:00 Aus WST 1974 Oct lastSun 2:00
+ 8:00 1:00 WST 1975 Mar Sun>=1 3:00
+ 8:00 - WST 1983 Oct lastSun 2:00
+ 8:00 1:00 WST 1984 Mar Sun>=1 3:00
+ 8:00 - WST 1991 Nov 17 2:00
+ 8:00 1:00 WST 1992 Mar Sun>=1 3:00
+ 8:00 - WST
+Zone Australia/Brisbane 10:12:08 - LMT 1895
+ 10:00 - EST 1917 Jan 1 0:01
+ 10:00 Aus EST 1971 Oct lastSun 2:00
+ 10:00 1:00 EST 1972 Feb lastSun 3:00
+ 10:00 - EST 1989 Oct lastSun 2:00
+ 10:00 1:00 EST 1990 Mar Sun>=1 3:00
+ 10:00 - EST 1990 Oct lastSun 2:00
+ 10:00 1:00 EST 1991 Mar Sun>=1 3:00
+ 10:00 - EST 1991 Oct lastSun 2:00
+ 10:00 1:00 EST 1992 Mar Sun>=1 3:00
+ 10:00 - EST
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule AS 1971 1985 - Oct lastSun 2:00 1:00 -
+Rule AS 1986 only - Oct 19 2:00 1:00 -
+Rule AS 1987 max - Oct lastSun 2:00 1:00 -
+Rule AS 1972 only - Feb 27 3:00 0 -
+Rule AS 1973 1985 - Mar Sun>=1 3:00 0 -
+Rule AS 1986 1989 - Mar Sun>=15 3:00 0 -
+Rule AS 1990 max even Mar Sun>=22 3:00 0 -
+Rule AS 1990 max odd Mar Sun>=1 3:00 0 -
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Australia/Adelaide 9:14:20 - LMT 1895 Feb
+ 9:00 - CST 1899 May
+ 9:30 - CST 1917 Jan 1 0:01
+ 9:30 Aus CST 1971 Oct lastSun 2:00
+ 9:30 AS CST
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule AT 1967 only - Oct 1 2:00 1:00 -
+Rule AT 1968 only - Mar 31 3:00 0 -
+Rule AT 1968 1985 - Oct lastSun 2:00 1:00 -
+Rule AT 1969 1971 - Mar Sun>=8 3:00 0 -
+Rule AT 1972 only - Feb 27 3:00 0 -
+Rule AT 1973 1981 - Mar Sun>=1 3:00 0 -
+Rule AT 1982 1983 - Mar lastSun 3:00 0 -
+Rule AT 1984 1986 - Mar Sun>=1 3:00 0 -
+Rule AT 1986 only - Oct 19 2:00 1:00 -
+Rule AT 1987 1990 - Mar Sun>=15 3:00 0 -
+Rule AT 1987 1990 - Oct lastSun 2:00 1:00 -
+Rule AT 1991 max - Oct Sun>=1 2:00 1:00 -
+Rule AT 1991 max - Mar lastSun 3:00 0 -
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Australia/Hobart 9:49:16 - LMT 1895 Sep
+ 10:00 - EST 1917 Jan 1 0:01
+ 10:00 Aus EST 1967 Oct 1 2:00
+ 10:00 AT EST
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule AV 1971 1985 - Oct lastSun 2:00 1:00 -
+Rule AV 1972 only - Feb 27 3:00 0 -
+Rule AV 1973 1985 - Mar Sun>=1 3:00 0 -
+Rule AV 1986 1990 - Mar Sun>=15 3:00 0 -
+Rule AV 1986 only - Oct 19 2:00 1:00 -
+Rule AV 1987 max - Oct lastSun 2:00 1:00 -
+Rule AV 1991 max - Mar Sun>=1 3:00 0 -
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Australia/Melbourne 9:39:52 - LMT 1895 Feb
+ 10:00 - EST 1917 Jan 1 0:01
+ 10:00 Aus EST 1971 Oct 31 2:00
+ 10:00 AV EST
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule AN 1971 1985 - Oct lastSun 2:00 1:00 -
+Rule AN 1972 only - Feb 27 3:00 0 -
+Rule AN 1973 1981 - Mar Sun>=1 3:00 0 -
+Rule AN 1982 only - Apr 4 3:00 0 -
+Rule AN 1983 1985 - Mar Sun>=1 3:00 0 -
+Rule AN 1986 1989 - Mar Sun>=15 3:00 0 -
+Rule AN 1986 only - Oct 19 2:00 1:00 -
+Rule AN 1987 max - Oct lastSun 2:00 1:00 -
+Rule AN 1990 max - Mar Sun>=1 3:00 0 -
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Australia/Sydney 10:04:52 - LMT 1895 Feb
+ 10:00 - EST 1917 Jan 1 0:01
+ 10:00 Aus EST 1971 Oct 31 2:00
+ 10:00 AN EST
+Zone Australia/Broken_Hill 9:25:48 - LMT 1895 Feb
+ 10:00 - EST 1896 Aug 23
+ 9:00 - CST 1899 May
+ 9:30 - CST 1917 Jan 1 0:01
+ 9:30 Aus CST 1971 Oct 31 2:00
+ 9:30 AN CST
+Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb
+ 10:00 - EST 1981 Mar
+ 10:30 AN LHST
+Zone Indian/Christmas 7:02:52 - LMT 1895 Feb
+ 7:00 - JT
+
+#
+# Ashmore Is, Cartier
+# no information; probably like Australia/Perth
+#
+# Macquarie, Manihiki, Penrhyn, Rakehanga
+# no information
+
+
+# Belau
+Zone Pacific/Belau 8:58:00 - LMT 1901
+ 9:00 - BLT
+
+# Cook Is
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Cook 1978 only - Nov 12 0:00 0:30 HD
+Rule Cook 1979 max - Mar Sun>=1 0:00 0 H
+Rule Cook 1979 max - Oct lastSun 0:00 0:30 HD
+# 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
+
+# Cocos
+# From USNO (1989):
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Cocos 6:30 - CCT
+
+# Fiji
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Fiji 11:53:40 - LMT 1915 Oct 26 # Suva
+ 12:00 - NZST
+
+# French Polynesia
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct # Rikitea
+ -9:00 - GBT
+Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct
+ -9:30 - MQT
+Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct # Papeete
+ -10:00 - THT
+
+# Guam
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Guam 9:39:00 - LMT 1901 # Agana
+ 10:00 - GST
+
+# Howland, Baker
+# no information; probably like Pacific/Samoa
+
+# Jarvis
+# no information; probably like Pacific/Kiritimati
+
+# Johnston
+# no information; probably like Pacific/Honolulu
+
+# Kiribati
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki
+ 12:00 - NZST
+Zone Pacific/Enderbury -12:35:40 - LMT 1901
+ -12:00 - KJT 1979 Oct
+ -11:00 - SST
+Zone Pacific/Kiritimati -10:29:20 - LMT 1901
+ -10:40 - LIT 1979 Oct # Line Is Time
+ -10:00 - THT
+
+# Nauru
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe
+ 11:30 - NST 1942 Mar 15
+ 9:00 - JST 1944 Aug 15
+ 11:30 - NST 1979 May
+ 12:00 - NZST
+
+# New Caledonia
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule NC 1912 only - Jan 13 0:00 0 S
+Rule NC 1977 1978 - Dec Sun>=1 0:00 1:00 D
+Rule NC 1978 1979 - Feb 27 0:00 0 S
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Noumea 11:05:48 - LMT 1912 Jan 13
+ 11:00 NC NC%sT
+
+
+###############################################################################
+
+# New Zealand
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Oz 1971 1985 - Oct lastSun 2:00 1:00 -
-Rule Oz 1986 max - Oct Sun<=24 2:00 1:00 -
-Rule Oz 1972 only - Feb 27 3:00 0 -
-Rule Oz 1973 1986 - Mar Sun>=1 3:00 0 -
-Rule Oz 1987 max - Mar Sun<=21 3:00 0 -
+Rule NZ 1868 only - Jan 1 0:00 0 S
+Rule NZ 1927 only - Nov 6 2:00 1:00 D
+Rule NZ 1928 only - Mar 4 2:00 0 S
+Rule NZ 1928 1933 - Oct Sun>=8 2:00 1:00 D
+Rule NZ 1929 1933 - Mar Sun>=15 2:00 0 S
+Rule NZ 1934 1940 - Apr lastSun 2:00 0 S
+Rule NZ 1934 1939 - Sep lastSun 2:00 1:00 D
+Rule NZ 1974 only - Nov 3 2:00 1:00 D
+Rule NZ 1975 1988 - Oct lastSun 2:00 1:00 D
+Rule NZ 1989 only - Oct 8 2:00 1:00 D
+Rule NZ 1990 max - Oct Sun>=1 2:00 1:00 D
+Rule NZ 1975 only - Feb 23 3:00 0 S
+Rule NZ 1976 1989 - Mar Sun>=1 3:00 0 S
+Rule NZ 1990 max - Mar Sun>=15 3:00 0 S
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+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-CHAT
+
+# Antipodes Is, Kermadec Is
+# no information; probably like Pacific/Auckland
+
+###############################################################################
+
+
+# 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
+
+# Norfolk
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Norfolk 11:11:52 - LMT 1901 # Kingston
+ 11:12 - NMT 1951
+ 11:30 - NST
+
+# Pacific Islands Trust Territories
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Majuro 11:24:48 - LMT 1901
+ 11:00 - NCST 1969 Oct
+ 12:00 - NZST
+Zone Pacific/Kwajalein 11:09:20 - LMT 1901
+ 11:00 - NCST 1969 Oct
+ -12:00 - KJT 1993 Aug 20
+ 12:00 - NZST
+Zone Pacific/Truk 10:07:08 - LMT 1901
+ 10:00 - GST 1978 Oct
+ 11:00 - NCST
+Zone Pacific/Ponape 10:33:00 - LMT 1901
+ 11:00 - NCST
+Zone Pacific/Yap 9:12:24 - LMT 1901
+ 9:00 - BLT 1969 Oct
+ 10:00 - GST
+
+# Palmyra
+# no information; probably like Pacific/Kiritmati
+
+# 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
+
+# Pitcairn
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Pitcairn -8:40:20 - LMT 1901 # Adamstown
+ -8:30 - PIT
+
+# 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
+
+# Tokelau Is
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Fakaofo -11:24:56 - LMT 1901
+ -10:00 - THT
+
+# Tonga
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Tongatapu 12:19:20 - LMT 1901
+ 12:20 - TMT 1968 Oct
+ 13:00 - TGT
+
+# Tuvalu
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Funafuti 11:56:52 - LMT 1901
+ 12:00 - NZST
+
+# Vanuatu
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Vanuatu 1912 only - Jan 13 0:00 0 S
+Rule Vanuatu 1983 only - Sep 25 0:00 1:00 D
+Rule Vanuatu 1984 max - Mar Sun>=23 0:00 0 S
+Rule Vanuatu 1984 only - Oct 23 0:00 1:00 D
+Rule Vanuatu 1985 max - Sep Sun>=23 0:00 1:00 D
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
+ 11:00 - NCST
+
+# Wake
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Wake 11:06:28 - LMT 1901
+ 12:00 - NZST
+
+# Wallis and Futuna
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Wallis 11:44:40 - LMT 1901
+ 12:00 - NZST
+
+# Western Samoa
+# See Pacific/Samoa in the `northamerica' file, of all places.
+
+###############################################################################
+
+# NOTES
+
+# 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):
+# 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 noted below, it is the source for the data above.
+#
+# I invented the abbreviations marked `*' in the following table;
+# the rest are from earlier versions of this file, or from other sources.
+# 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 BLT Belau*
+# 9:00 JST Japan
+# 9:30 CST CST Central Australia
+# 10:00 EST EST Eastern Australia
+# 10:00 GST Guam*
+# 10:30 LHST LHST Lord Howe*
+# 11:00 NCST NCDT New Caledonia*
+# 11:30 NRT Norfolk*
+# 12:00 NZST NZDT New Zealand
+# 13:00 TGT Tongatapu*
+# -12:00 KJT Kwajalein (no longer used)*
+# -11:00 SST Samoa
+# -10:40 LIT Line Is (no longer used)*
+# -10:00 THT Tahiti*
+# - 9:30 MQT Marquesas*
+# - 9:00 GBT Gambier*
+# - 8:30 PIT Pitcairn*
+#
+# See the `africa' file for Zone naming conventions.
+
+###############################################################################
+
+# Australia
+
+# From John Mackin (March 6, 1991):
+# We in Australia have _never_ referred to DST as `daylight' time.
+# It is called `summer' time. Now by a happy coincidence, `summer'
+# and `standard' happen to start with the same letter; hence, the
+# abbreviation does _not_ change...
+# The legislation does not actually define abbreviations, at least
+# in this State, but the abbreviation is just commonly taken to be the
+# initials of the phrase, and the legislation here uniformly uses
+# the phrase `summer time' and does not use the phrase `daylight
+# time'.
+# Announcers on the Commonwealth radio network, the ABC (for Australian
+# Broadcasting Commission), use the phrases `Eastern Standard Time'
+# or `Eastern Summer Time'. (Note, though, that as I say in the
+# current australasia file, there is really no such thing.) Announcers
+# on its overseas service, Radio Australia, use the same phrases
+# prefixed by the word `Australian' when referring to local times;
+# time announcements on that service, naturally enough, are made in UTC.
+
+# From Arthur David Olson (March 8 1992):
+# Given the above, what's chosen for year-round use is:
+# CST for any place operating at a GMTOFF of 9:30
+# WST for any place operating at a GMTOFF of 8:00
+# EST for any place operating at a GMTOFF of 10:00
+
+# Australia/North
+
+# From George Shepherd via Simon Woodhead via Robert Elz (March 6, 1991):
+# # The NORTHERN TERRITORY.. [ Courtesy N.T. Dept of the Chief Minister ]
+# # [ Nov 1990 ]
+# # N.T. have never utilised any DST due to sub-tropical/tropical location.
+# ...
+# Zone Australia/North 9:30 - CST
+
+# From Bradley White (March 4, 1991):
+# A recent excerpt from an Australian newspaper...
+# the Northern Territory do[es] not have daylight saving.
+
+# Australia/West
+
+# From George Shepherd via Simon Woodhead via Robert Elz (March 6, 1991):
+# # The state of WESTERN AUSTRALIA.. [ Courtesy W.A. dept Premier+Cabinet ]
+# # [ Nov 1990 ]
+# # W.A. suffers from a great deal of public and political opposition to
+# # DST in principle. A bill is brought before parliament in most years, but
+# # usually defeated either in the upper house, or in party caucus
+# # before reaching parliament.
+# ...
+# Zone Australia/West 8:00 AW %sST
+# ...
+# Rule AW 1974 only - Oct lastSun 2:00 1:00 D
+# Rule AW 1975 only - Mar Sun>=1 3:00 0 W
+# Rule AW 1983 only - Oct lastSun 2:00 1:00 D
+# Rule AW 1984 only - Mar Sun>=1 3:00 0 W
+
+# From Bradley White (March 4, 1991):
+# A recent excerpt from an Australian newspaper...
+# Western Australia...do[es] not have daylight saving.
+
+# From John D. Newman via Bradley White (November 2, 1991):
+# Western Australia is still on "winter time". Some DH in Sydney
+# rang me at home a few days ago at 6.00am. (He had just arrived at
+# work at 9.00am.)
+# W.A. is switching to Summer Time on Nov 17th just to confuse
+# everybody again.
+
+# From Arthur David Olson (March 8, 1992):
+# The 1992 ending date used in the rules is a best guess;
+# it matches what was used in the past.
+
+# Australia/Queensland
+
+# From George Shepherd via Simon Woodhead via Robert Elz (March 6, 1991):
+# # The state of QUEENSLAND.. [ Courtesy Qld. Dept Premier Econ&Trade Devel ]
+# # [ Dec 1990 ]
+# ...
+# Zone Australia/Queensland 10:00 AQ %sST
+# ...
+# Rule AQ 1971 only - Oct lastSun 2:00 1:00 D
+# Rule AQ 1972 only - Feb lastSun 3:00 0 E
+# Rule AQ 1989 max - Oct lastSun 2:00 1:00 D
+# Rule AQ 1990 max - Mar Sun>=1 3:00 0 E
+
+# From Bradley White (December 24, 1989):
+# "Australia/Queensland" now observes daylight time (i.e. from
+# October 1989).
+
+# From Bradley White (March 4, 1991):
+# A recent excerpt from an Australian newspaper...
+# ...Queensland...[has] agreed to end daylight saving
+# at 3am tomorrow (March 3)...
+
+# From John Mackin (March 6, 1991):
+# I can certainly confirm for my part that Daylight Saving in NSW did in fact
+# end on Sunday, 3 March. I don't know at what hour, though. (It surprised
+# me.)
+
+# From Bradley White (March 8, 1992):
+# ...there was recently a referendum in Queensland which resulted
+# in the experimental daylight saving system being abandoned. So, ...
+# ...
+# Rule QLD 1989 1991 - Oct lastSun 2:00 1:00 D
+# Rule QLD 1990 1992 - Mar Sun>=1 3:00 0 S
+# ...
+
+# From Arthur David Olson (March 8, 1992):
+# The chosen rules the union of the 1971/1972 change and the 1989-1992 changes.
+
+# Australia/Tasmania, Australia/South, and Australia/Victoria
+
+# From Arthur David Olson (March 8, 1992):
+# The rules from version 7.1 follow.
+# There are lots of differences between these rules and
+# the Shepherd et al. rules. Since the Shepherd et al. rules
+# and Bradley White's newspaper article are in agreement on
+# current DST ending dates, no worries.
+#
+# Rule Oz 1971 1985 - Oct lastSun 2:00 1:00 -
+# Rule Oz 1986 max - Oct Sun<=24 2:00 1:00 -
+# Rule Oz 1972 only - Feb 27 3:00 0 -
+# Rule Oz 1973 1986 - Mar Sun>=1 3:00 0 -
+# Rule Oz 1987 max - Mar Sun<=21 3:00 0 -
+# Zone Australia/Tasmania 10:00 Oz EST
+# Zone Australia/South 9:30 Oz CST
+# Zone Australia/Victoria 10:00 Oz EST 1985 Oct lastSun 2:00
+# 10:00 1:00 EST 1986 Mar Sun<=21 3:00
+# 10:00 Oz EST
+
+# From Robert Elz (March 6, 1991):
+# I believe that the current start date for DST is "lastSun" in Oct...
+# that changed Oct 89. That is, we're back to the
+# original rule, and that rule currently applies in all the states
+# that have dst, incl Qld. (Certainly it was true in Vic).
+# The file I'm including says that happened in 1988, I think
+# that's incorrect, but I'm not 100% certain.
+
+# Australia/South
+
+# From Bradley White (March 4, 1991):
+# A recent excerpt from an Australian newspaper...
+# ...South Australia...[has] agreed to end daylight saving
+# at 3am tomorrow (March 3)...
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Australia/Tasmania 10:00 Oz EST
-Zone Australia/Queensland 10:00 - EST # No DST here
-Zone Australia/North 9:30 - CST # No DST here
-Zone Australia/West 8:00 - WST # No DST here
-Zone Australia/South 9:30 Oz CST
+# From George Shepherd via Simon Woodhead via Robert Elz (March 6, 1991):
+# # The state of SOUTH AUSTRALIA....[ Courtesy of S.A. Dept of Labour ]
+# # [ Nov 1990 ]
+# ...
+# Zone Australia/South 9:30 AS %sST
+# ...
+# Rule AS 1971 max - Oct lastSun 2:00 1:00 D
+# Rule AS 1972 1985 - Mar Sun>=1 3:00 0 C
+# Rule AS 1986 1990 - Mar Sun<=21 3:00 0 C
+# Rule AS 1991 max - Mar Sun>=1 3:00 0 C
-# Victoria jumped to a later ending date for DST in 1986 rather than 1987.
+# From Bradley White (March 11, 1992):
+# Recent correspondence with a friend in Adelaide
+# contained the following exchange: "Due to the Adelaide Festival,
+# South Australia delays setting back our clocks for a few weeks."
-Zone Australia/Victoria 10:00 Oz EST 1985 Oct lastSun 2:00
- 10:00 1:00 EST 1986 Mar Sun<=21 3:00
- 10:00 Oz EST
+# From Robert Elz (March 13, 1992):
+# I heard that apparently (or at least, it appears that)
+# South Aus will have an extra 3 weeks daylight saving every even
+# numbered year (from 1990). That's when the Adelaide Festival
+# is on...
+# Australia/Tasmania
+
+# From Bradley White (March 4, 1991):
+# A recent excerpt from an Australian newspaper...
+# ...Tasmania will revert to Australian Eastern Standard Time on March 31...
+
+# From George Shepherd via Simon Woodhead via Robert Elz (March 6, 1991):
+# # The state of TASMANIA.. [Courtesy Tasmanian Dept of Premier + Cabinet ]
+# # [ Nov 1990 ]
+# ...
+# Zone Australia/Tasmania 10:00 AT %sST
+# ...
+# Rule AT 1967 only - Oct Sun>=1 2:00 1:00 D
+# Rule AT 1968 only - Mar lastSun 3:00 0 E
+# Rule AT 1968 1985 - Oct lastSun 2:00 1:00 D
+# Rule AT 1969 1971 - Mar Sun>=8 3:00 0 E
+# Rule AT 1972 only - Feb lastSun 3:00 0 E
+# Rule AT 1973 1981 - Mar Sun>=1 3:00 0 E
+# Rule AT 1982 1983 - Mar lastSun 3:00 0 E
+# Rule AT 1984 1986 - Mar Sun>=1 3:00 0 E
+# Rule AT 1986 only - Oct Sun>=15 2:00 1:00 D
+# Rule AT 1987 1990 - Mar Sun>=15 3:00 0 E
+# Rule AT 1987 only - Oct Sun>=22 2:00 1:00 D
+# Rule AT 1988 1990 - Oct lastSun 2:00 1:00 D
+# Rule AT 1991 max - Oct Sun>=1 2:00 1:00 D
+# Rule AT 1991 max - Mar lastSun 3:00 0 E
+
+# From Bill Hart via Alexander Dupuy and Guy Harris (October 10, 1991):
+# My state Government in there eagerness to get a few more bucks for the
+# tourist industry industry decided to change the daylight savings times
+# yet again (we now have almost 6 months per year)...
+# ...
+# Rule Oz 1986 1990 - Oct Sun<=24 2:00 1:00 -
+# Rule Oz 1991 max - Oct Sun>=1 2:00 1:00 -
+# ...
+# Rule Oz 1987 1990 - Mar Sun<=21 3:00 0 -
+# Rule Oz 1991 max - Mar Sun<=31 3:00 0 -
+
+# From Bill Hart via Guy Harris (October 10, 1991):
+# Oh yes, the new daylight savings rules are uniquely tasmanian, we have
+# 6 weeks a year now when we are out of sync with the rest of Australia
+# (but nothing new about that).
+
+# Australia/Victoria
+
+# From Bradley White (March 4, 1991):
+# A recent excerpt from an Australian newspaper...
+# ...Victoria...[has] agreed to end daylight saving at 3am tomorrow (March 3)...
+
+# From George Shepherd via Simon Woodhead via Robert Elz (March 6, 1991):
+# # The state of VICTORIA.. [ Courtesy of Vic. Dept of Premier + Cabinet ]
+# # [ Nov 1990 ]
+# ...
+# Zone Australia/Victoria 10:00 AV %sST
+# ...
+# Rule AV 1971 1985 - Oct lastSun 2:00 1:00 D
+# Rule AV 1972 only - Feb lastSun 3:00 0 E
+# Rule AV 1973 1985 - Mar Sun>=1 3:00 0 E
+# Rule AV 1986 1990 - Mar Sun>=15 3:00 0 E
+# Rule AV 1986 1987 - Oct Sun>=15 2:00 1:00 D
+# Rule AV 1988 max - Oct lastSun 2:00 1:00 D
+# Rule AV 1991 max - Mar Sun>=1 3:00 0 E
+
+# Australia/NSW
+
+# From Arthur David Olson:
# New South Wales and subjurisdictions have their own ideas of a fun time.
# Based on law library research by John Mackin (john@basser.cs.su.oz),
# who notes:
@@ -38,76 +608,96 @@ Zone Australia/Victoria 10:00 Oz EST 1985 Oct lastSun 2:00
# individual states. Thus, while such terms as ``Eastern Standard Time''
# [I mean, of course, Australian EST, not any other kind] are in common
# use, _they have NO REAL MEANING_, as they are not defined in the
-# legislation. This is very important to understand.
-# I have researched New South Wales time only; . . .I hope that perhaps a
-# resident of each state could be found to do it for their own state.
-# (And I can guarantee that Victoria and NSW are different, so the link
-# between them in the current australasia file must be broken.)
+# legislation. This is very important to understand.
+# I have researched New South Wales time only...
-# From Robert Elz (May 5, 1989):
-#
-# From next year (1990) NSW will revert to ending DST on the 1st
-# Sunday in March (rather than the third, which it appears will
-# continue to be what everyone else uses).
+# From Dave Davey (March 3, 1990):
+# Rule NSW 1988 only - Mar Sun>=1 3:00 0 -
+# Rule NSW 1989 only - Mar Sun<=21 3:00 0 -
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule NSW 1971 1985 - Oct lastSun 2:00 1:00 -
-Rule NSW 1972 only - Feb lastSun 3:00 0 -
-Rule NSW 1973 1981 - Mar Sun>=1 3:00 0 -
-Rule NSW 1982 only - Apr 4 3:00 0 -
-Rule NSW 1983 1985 - Mar Sun>=1 3:00 0 -
-Rule NSW 1986 only - Mar 16 3:00 0 -
-Rule NSW 1986 only - Oct 19 2:00 1:00 -
-Rule NSW 1987 only - Mar 15 3:00 0 -
-Rule NSW 1987 max - Oct lastSun 2:00 1:00 -
-Rule NSW 1988 1989 - Mar Sun<=21 3:00 0 -
-Rule NSW 1990 max - Mar Sun>=1 3:00 0 -
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Australia/NSW 10:00 NSW EST
-# `Broken Hill' means the County of Yancowinna. [john@basser.cs.su.oz.au,1/4/89]
-Zone Australia/Yancowinna 9:30 NSW ???
-Zone Australia/LHI 10:30 NSW ???
-
-# A footnote here:
-#
-# . . .
-# Date: Thu, j19 Feb 87 12:02:17 EST
-# From: Bradley White <seismo!k.cs.cmu.edu!bww>
-# . . .
-# I am including a description of Australian time zones. . .
-# this stuff is definitely accurate.
-# . . .
-# a) Australian Eastern Time: (EST = GMT+10:00, EDT = GMT+11:00)
-# . . .
-# Summer of 86/87 - present (current legislation):
-# third Sun Oct 02:00 EST -> third [S]un Mar 02:00 EST
-#
-# If this turns out to be true, substitute Sun<=21 (third Sunday in October)
-# for Sun<=24 (next-to-last Sunday in October) above. . .some time before
-# October 1988, the first time it makes a difference.
+# From Bradley White (March 4, 1991):
+# A recent excerpt from an Australian newspaper...
+# NSW...[has] agreed to end daylight saving at 3am tomorrow (March 3)...
-###############################################################################
+# From George Shepherd via Simon Woodhead via Robert Elz (March 6, 1991):
+# # The state of NEW SOUTH WALES.. [confirmed by Attorney General's Dept N.S.W]
+# # [ Dec 1990 ]
+# ...
+# Rule AN 1988 1989 - Mar Sun<=21 3:00 0 E
+# ...
-# New Zealand
+# From John Mackin (March 9, 1991)
+# I have confirmed the accuracy of the historical data for NSW in the
+# file Robert forwarded
+
+# From Arthur David Olson (March 8, 1992):
+# Sources differ on whether DST ended March 6 or March 20 in 1988;
+# March 20 (the "confirmed" date) is in the chosen rules.
+
+# Australia/Yancowinna
+
+# From John Basser (January 4, 1989):
+# `Broken Hill' means the County of Yancowinna.
+
+# From George Shepherd via Simon Woodhead via Robert Elz (March 6, 1991):
+# # YANCOWINNA.. [ Confirmation courtesy of Broken Hill Postmaster ]
+# # [ Dec 1990 ]
+# ...
+# # Yancowinna uses Central Standard Time, despite it's location on the
+# # New South Wales side of the S.A. border. Most business and social dealings
+# # are with CST zones, therefore CST is legislated by local government
+# # although the switch to Summer Time occurs in line with N.S.W. There have
+# # been years when this did not apply, but the historical data is not
+# # presently available.
+# Zone Australia/Yancowinna 9:30 AY %sST
+# ...
+# Rule AY 1971 1985 - Oct lastSun 2:00 1:00 D
+# Rule AY 1972 only - Feb lastSun 3:00 0 C
+# [followed by other Rules]
+
+# Australia/LHI
+
+# From George Shepherd via Simon Woodhead via Robert Elz (March 6, 1991):
+# LHI... [ Courtesy of Pauline Van Winsen.. pauline@Aus ]
+# [ Dec 1990 ]
+# Lord Howe Island is located off the New South Wales coast, and is half an
+# hour ahead of NSW time.
+
+###############################################################################
# New Zealand, from Elz' asia 1.1
# Elz says "no guarantees"
-# The 1989/90 rule may only last a year. It is a trial that is
-# subject to Ministerial approval to be made permanent.
-# The termination of "daylight saving" may actually be second
-# to last Sunday in March. Noone spoken to was very sure.
-# From U. S. Naval Observatory (January 19, 1989):
-# NEW ZEALAND 12 H AHEAD OF UTC (EXCLUDING CHATHAM ISLAND)
-# NEW ZEALAND 13 H AHEAD OF UTC OCT 30, '88-MAR 4, '89
-# NEW ZEALAND 12H45M AHEAD OF UTC CHATHAM ISLAND
+# From Mark Davies (October 3, 1990):
+# the 1989/90 year was a trial of an extended "daylight saving" period.
+# This trial was deemed successful and the extended period adopted for
+# subsequent years (with the addition of a further week at the start).
+# source -- phone call to Ministry of Internal Affairs Head Office.
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule NZ 1974 1988 - Oct lastSun 2:00 1:00 D
-Rule NZ 1989 max - Oct Sun>=8 2:00 1:00 D
-Rule NZ 1975 1989 - Mar Sun>=1 3:00 0 S
-Rule NZ 1990 max - Mar Sun>=15 3:00 0 S
+# From George Shepherd via Simon Woodhead via Robert Elz (March 6, 1991):
+# # The Country of New Zealand (Australia's east island -) Gee they hate that!
+# # or is Australia the west island of N.Z.
+# # [ courtesy of Geoff Tribble.. Geofft@Aus.. Auckland N.Z. ]
+# # [ Nov 1990 ]
+# ...
+# Rule NZ 1974 1988 - Oct lastSun 2:00 1:00 D
+# Rule NZ 1989 max - Oct Sun>=1 2:00 1:00 D
+# Rule NZ 1975 1989 - Mar Sun>=1 3:00 0 S
+# Rule NZ 1990 max - Mar lastSun 3:00 0 S
+# ...
+# Zone NZ 12:00 NZ NZ%sT # New Zealand
+# Zone NZ-CHAT 12:45 - NZ-CHAT # Chatham Island
+
+# From Arthur David Olson (March 8, 1992):
+# The chosen rules use the Davies October 8 values for the start of DST in 1989
+# rather than the October 1 value.
+
+###############################################################################
+
+# Kwajalein
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone NZ 12:00 NZ NZ%sT # New Zealand
+# In comp.risks 14.87 (26 August 1993), Peter Neumann writes:
+# I wonder what happened in Kwajalein, where there was NO Friday,
+# August 20, 1993. Thursday night at midnight Kwajalein switched sides with
+# respect to the International Date Line, to rejoin its fellow islands,
+# going from 11:59 p.m. Thursday to 12:00 m. Saturday in a blink.
diff --git a/share/zoneinfo/datfiles/backward b/share/zoneinfo/datfiles/backward
new file mode 100644
index 000000000000..84a2cd984a79
--- /dev/null
+++ b/share/zoneinfo/datfiles/backward
@@ -0,0 +1,63 @@
+# @(#)backward 7.3
+
+# This file provides links between late-1993-vintage names for time zones
+# and their previous names.
+
+Link Australia/Sydney Australia/ACT
+Link Australia/Lord_Howe Australia/LHI
+Link Australia/Sydney Australia/NSW
+Link Australia/Darwin Australia/North
+Link Australia/Brisbane Australia/Queensland
+Link Australia/Adelaide Australia/South
+Link Australia/Hobart Australia/Tasmania
+Link Australia/Melbourne Australia/Victoria
+Link Australia/Perth Australia/West
+Link Australia/Broken_Hill Australia/Yancowinna
+Link America/Porto_Acre Brazil/Acre
+Link America/Noronha Brazil/DeNoronha
+Link America/Sao_Paulo Brazil/East
+Link America/Manaus Brazil/West
+Link America/Halifax Canada/Atlantic
+Link America/Winnipeg Canada/Central
+Link America/Regina Canada/East-Saskatchewan
+Link America/Montreal Canada/Eastern
+Link America/Edmonton Canada/Mountain
+Link America/St_Johns Canada/Newfoundland
+Link America/Vancouver Canada/Pacific
+Link America/Regina Canada/Saskatchewan
+Link America/Whitehorse Canada/Yukon
+Link America/Santiago Chile/Continental
+Link Pacific/Easter Chile/EasterIsland
+Link America/Havana Cuba
+Link Africa/Cairo Egypt
+Link Europe/Dublin Eire
+Link Europe/London GB
+Link Asia/Hong_Kong Hongkong
+Link Atlantic/Reykjavik Iceland
+Link Asia/Tehran Iran
+Link Asia/Tel_Aviv Israel
+Link America/Jamaica Jamaica
+Link Asia/Tokyo Japan
+Link Pacific/Kwajalein Kwajalein
+Link Africa/Tripoli Libya
+Link America/Tijuana Mexico/BajaNorte
+Link America/Mazatlan Mexico/BajaSur
+Link America/Mexico_City Mexico/General
+Link Pacific/Auckland NZ
+Link Pacific/Chatham NZ-CHAT
+Link Asia/Shanghai PRC
+Link Asia/Taipei ROC
+Link Asia/Seoul ROK
+Link Asia/Singapore Singapore
+Link America/Anchorage US/Alaska
+Link America/Atka US/Aleutian
+Link America/Phoenix US/Arizona
+Link America/Chicago US/Central
+Link America/Fort_Wayne US/East-Indiana
+Link America/New_York US/Eastern
+Link Pacific/Honolulu US/Hawaii
+Link America/Knox_IN US/Indiana-Starke
+Link America/Detroit US/Michigan
+Link America/Denver US/Mountain
+Link America/Los_Angeles US/Pacific
+Link Pacific/Samoa US/Samoa
diff --git a/share/zoneinfo/datfiles/etcetera b/share/zoneinfo/datfiles/etcetera
index dbda4dbd2330..4397de717d10 100644
--- a/share/zoneinfo/datfiles/etcetera
+++ b/share/zoneinfo/datfiles/etcetera
@@ -1,4 +1,4 @@
-# @(#)etcetera 4.4
+# @(#)etcetera 7.1
# All of these are set up just so people can "zic -l" to a timezone
# that's right for their area, even if it doesn't have a name or dst rules
diff --git a/share/zoneinfo/datfiles/europe b/share/zoneinfo/datfiles/europe
index 1fdffa3b3c91..94cbd2f2a05c 100644
--- a/share/zoneinfo/datfiles/europe
+++ b/share/zoneinfo/datfiles/europe
@@ -1,152 +1,1690 @@
-# @(#)europe 4.10
+# $Id: europe,v 1.3 1994/02/04 00:07:36 wollman Exp $
+# From: @(#)europe 7.13
-# International country codes are used to identify countries' rules and
-# zones
+# 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):
+# 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.
+# The starred Russian names are dubious. 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)*
+# 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 SSK SSD Sverdlovsk*
+# 5:00 OSK OSD Omsk*
+# 6:00 NSK NSD Novosibirsk
+# 7:00 ISK ISD Irkutsk*
+# 8:00 YSK YSD Yakutsk*
+# 9:00 VSK VSD Vladivostok*
+# 10:00 GSK GSD Magadan*
+# 11:00 PSK PSD Petropavlovsk-Kamchatski*
+# 12:00 ASK ASD Anadyr*
+#
+# See the `africa' file for Zone naming conventions.
#
-# 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
-# ado@ncifcrf.gov for general use in the future).
+# 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'').
###############################################################################
# United Kingdom
-# From Arthur David Olson (January 19, 1989):
+# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+#
+# Howse writes that Britain was the first country to use standard time.
+# The railways cared most about the inconsistencies of local mean time,
+# and it was they who forced a uniform time on the country.
+# The original idea was credited to Dr. William Hyde Wollaston (1766-1828);
+# it was popularized in 1840 by Capt. Basil Hall, RN (1788-1844),
+# famed explorer and former Commissioner for Longitude.
+# The first railway to adopt London time was the Great Western Railway
+# in November 1840; other railways followed suit, and by 1847 most
+# (though not all) railways used London time. On 1847 Sep 22 the
+# Railway Clearing House, an industry standards body, recommended that GMT be
+# adopted at all stations; the January 1848 Bradshaw's lists most major
+# railways as using GMT. By 1855 the vast majority of public
+# clocks in Britain were set to GMT (though some, like the Great Clock
+# in Tom Tower at Christ Church, Oxford, were fitted with two minute hands,
+# one for local time and one for GMT). The last major holdout was the legal
+# system, which stubbornly stuck to local time for many years, leading
+# to oddities like polls opening at 08:13 and closing at 16:13.
+# The legal system finally switched to GMT when the Statutes (Definition
+# of Time) Act took effect; it received the Royal Assent on 1880 Aug 2.
+#
+# In the tables below, we condense this complicated story into a single
+# transition date for London, namely 1847 Sep 22. We don't know as much
+# about Dublin, so we use 1880 Aug 2, the legal transition time.
+
+# From Peter Ilieve <peter@memex.co.uk> (July 4, 1989):
+#
+# From the UK Government paper "Summer Time: A Consultation Document"
+# (HMSO Cm722 June 1989), which is about the possibility of the UK moving
+# into the central European timezone and synchronising its summer time with
+# the rest of Europe (by moving the end date back a month to end Sep.,
+# the start dates are already the same).
+#
+# Summer time was not observed before 1916.
+# It was introduced in the First World War in response to its introduction
+# by Germany in March 1916.
+# During the Second World War normal summer time was used in Winter and double
+# summer time was used in Summer.
+# Between 1968 and 1971 GMT+1 was used all year as an experiment.
+# This caused voluble objections in Scotland and the experiment was judged
+# a failure.
+#
+# Although it does not say what happens in Europe, it does say that most
+# of Europe did not use summer time until 1979, presumably dropping it
+# after the 1st and/or 2nd war.
+#
+# Note that this is not necessarily accurate for Eire.
#
-# The starting and ending dates below (from which the rules are derived)
-# are from Whitaker's Almanack for 1987, page 146.
-# 1960 is the earliest year for which dates are given;
-# Whitaker's notes that British Summer Time (and, in some years, Double Summer
-# Time) was observed in earlier years but does not give start and end dates.
+# The paper gives a complete record of dates from 1916, and dates up to 1992.
+# The intention is to have the new system, if any, start in 1993.
+# The dates are (copied exactly from the table in the paper):
+#
+# Summer Time Double Summer Time
+# Year Start End Start End
+# 1916 21 May 1 October
+# 1917 8 April 17 September
+# 1918 24 March 30 September
+# 1919 30 March 29 September
+# 1920 28 March 25 October
+# (extended from
+# 27 Sep. because
+# of coal strike)
+#
+# 1921 3 April 3 October
+# 1922 26 March 8 October
+# 1923 22 April 16 September
+# 1924 20 April 21 September [Some of the dates in these
+# 1925 to 3rd Sunday 1st Sunday three lines are incorrect;
+# 1938 in April in October -- see below.]
+#
+# 1939 16 April 19 November
+# 1940 25 February continued
+# 1941 continued continued 4 May 10 August
+# 1942 continued continued 5 April 9 August
+# 1943 continued continued 4 April 15 August
+# 1944 continued continued 2 April 17 September
+# 1945 continued 7 October 2 April 15 July
+#
+# 1946 14 April 6 October
+# 1947 16 March 2 November 13 April 10 August
+# 1948 14 March 31 October
+# 1949 3 April 30 October
+# 1950 16 April 22 October
+# 1951 15 April 21 October
+# 1952 20 April 26 October
+#
+# 1953 19 April 4 October
+# 1954 11 April 3 October
+# 1955 17 April 2 October
+# 1956 15 April 7 October [`15 April' is disputed; see below.]
+# 1957 14 April 6 October
+# 1958 20 April 5 October
+# 1959 19 April 4 October
+# 1960 10 April 2 October
+#
+# 1961 26 March 29 October
+# 1962 25 March 28 October
+# 1963 31 March 27 October
+# 1964 22 March 25 October
+# 1965 21 March 24 October
+# 1966 20 March 23 October
+# 1967 19 March 29 October
+#
+# 1968 18 February continued
+# 1969 continued continued
+# 1970 continued continued
+# 1971 continued 31 October
+# 1972 19 March 29 October
+# 1973 18 March 28 October
+# 1974 17 March 27 October
+#
+# 1975 16 March 26 October
+# 1976 21 March 24 October
+# 1977 20 March 23 October
+# 1978 19 March 29 October
+# 1979 18 March 28 October
+# 1980 16 March 26 October
+# 1981 29 March 25 October
+#
+# 1982 28 March 24 October
+# 1983 27 March 23 October
+# 1984 25 March 28 October
+# 1985 31 March 27 October
+# 1986 30 March 26 October
+# 1987 29 March 25 October
+# 1988 27 March 23 October
+#
+# 1989 26 March 29 October
+# 1990 25 March 28 October
+# 1991 31 March 27 October
+# 1992 29 March 25 October
+#
+# These dates agree with the ones from Whitaker's Almanac for 1960--87. . .
+
+# From Peter Ilieve (peter@memex.co.uk) (October 18, 1993)
+#
+# I made a transcription error in my table for 1924. The government Green
+# Paper I was copying from actually says 20 April, which I mangled into
+# 30 April.
+#
+# This still differs from the 13 April printed in Shanks' book. I would
+# side with Shanks here. Software that purports to calculate the date of
+# Easter says that 20 April 1924 was Easter. The Summer Time Act 1922,
+# which was the relevant law at the time, says that Summer Time starts
+# after the 3rd Saturday in April, unless that is Easter, when it is the
+# 2nd Saturday. I asked the Home Office about this discrepancy but they
+# weren't interested in helping at all.
+#
+# If you continue to include my email with the table of dates in it in
+# your europe file I would appreciate it saying the 20 April for 1924, as
+# that is what the document I was quoting from said. Add a note somewhere
+# to say that the date is almost certainly bogus.
+
+# From Arthur David Olson (January 19, 1989):
#
# A source at the British Information Office in New York avers that it's
# known as "British" Summer Time in all parts of the United Kingdom.
-# 1960 April 10 October 2 (yes, 2, according to the almanac)
-# 1961 March 26 October 29
-# 1962 March 25 October 28
-# 1963 March 31 October 27
-# 1964 March 22 October 25
-# 1965 March 21 October 24
-# 1966 March 20 October 23
-# 1967 March 19 October 29
-# 1968 February 18 October 27
-# "British Standard Time, also one hour ahead of G. M. T., was kept between
-# 1968 Oct. 27-1971 Oct. 31."
-# 1972 March 19 October 29
-# 1973 March 18 October 28
-# 1974 March 17 October 27
-# 1975 March 16 October 26
-# 1976 March 21 October 24
-# 1977 March 20 October 23
-# 1978 March 19 October 29
-# 1979 March 18 October 28
-# 1980 March 16 October 26
-# 1981 March 29 October 25
-# 1982 March 28 October 24
-# 1983 March 27 October 23
-# 1984 March 25 October 28
-# 1985 March 31 October 27
-# 1986 March 30 October 26
-# 1987 March 29 October 25
-
-# From an Anonymous U. K. Donor (January 4, 1989):
-#
-# It is NOT possible to predict when [British Summer Time] will change
-# in a future year.
-#
-# (The admiralty calculate when they think it should be (no more that a couple
-# of years in advance) and advise the government who then decide whether or
-# not they will take the admiralty's advice)
-#
-# ...the Gre[e]nwich...observatory...[was] very helpful.
-#
-# I was not able to track down the Admiralty formula (I tried hard but failed)
-# ...
# Date: 4 Jan 89 08:57:25 GMT (Wed)
# From: Jonathan Leffler <nih-csl!uunet!mcvax!sphinx.co.uk!john>
-# ...
# [British Summer Time] is fixed annually by Act of Parliament.
# If you can predict what Parliament will do, you should be in
# politics making a fortune, not computing.
+
+# From Peter Ilieve <peter@memex.co.uk> (September 3, 1993):
+#
+# I have some more up to date info.
#
-# Summer time ends on Sunday 29 October 1989.
+# Our Government...couldn't...make a decision after the 1989 consultation
+# exercise about the UK changing its timezone so it just let things drift
+# (different from deciding to keep the status quo). According to the
+# Summer Time Order 1992 (SI 1992/1729) the dates of Summer Time for 1993
+# and 1994 are:
+# Start End
+# 1993 28 March 24 October
+# 1994 27 March 23 October
+# All start and end times are at 01:00 GMT.
+#
+# There [was] an error in your tables for the start and end times prior to 1981.
+# The UK always used to change at 02:00 GMT. In 1981 it changed to 01:00 GMT
+# as a part of EC harmonisation and has remained at that time since.
+#
+# I have found the default algorithm for UK Summer Time, it is in the
+# Summer Time Act 1972. Section 1 states that in the absence of an Order
+# in Council Summer Time starts at 02:00 GMT on the morning of the day
+# after the third Saturday in March, unless that day is Easter Day, in
+# which case it is the morning of the day after the second Saturday.
+# It ends at 02:00 GMT on the morning of the day after the fourth Saturday
+# in October. (All the redundant `morning of the day ...' is in the Act.)
+# This is only of passing interest now as it will always be overridden by
+# an Order in Council (a Statutary Instrument, the SI thing mentioned above)
+# to specify the EC specified dates.
-# ...
-# Date: 5 Jan 89 09:50:38 GMT (Thu)
-# From: Peter Kendell <nih-csl!uunet!mcvax!tcom.stc.co.uk!pete>
-# ...
-#
-# From my Collins Diary for 1989 -
-#
-# "At the time of going to press the Home Office was unable to confirm
-# the 1989 starting and finishing dates for BST*, but expressed the
-# view that 26 March and 29 October were the likeliest dates to be
-# adopted"
-#
-# *British Summer Time.
-
-# From an Anonymous U. K. Donor (January 5, 1989):
-#
-# . . .our government is seriously considering applying Double Summer Time -
-# putting the clocks forwards and back TWO hours for daylight saving time.
-# This is advocated to standardise time in the EEC - we're all supposed to
-# keep the same time and to change the clocks on the same dates in the future.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# Historic starting rules
-Rule GB-Eire 1960 only - Apr 10 1:00s 1:00 BST
-Rule GB-Eire 1961 1963 - Mar lastSun 1:00s 1:00 BST
-Rule GB-Eire 1964 1967 - Mar Sun>=19 1:00s 1:00 BST
-Rule GB-Eire 1968 only - Feb 18 1:00s 1:00 BST
-Rule GB-Eire 1972 1980 - Mar Sun>=16 1:00s 1:00 BST
-# Historic ending rules
-Rule GB-Eire 1960 only - Oct 2 1:00s 0 GMT
-Rule GB-Eire 1961 1967 - Oct Sun>=23 1:00s 0 GMT
-Rule GB-Eire 1971 only - Oct 31 1:00s 0 GMT
+# From Peter Ilieve <peter@memex.co.uk> (October 18, 1993):
+#
+# My contact in the Ministry of Defence Public Relations department
+# accepted the challenge of looking into this and produced the following,
+# from Hansard (the official record of the UK Parliament), Oral Answers,
+# 1 March 1945, cols 1559--60:
+#
+# `58. Major Sir Goronwy Owen asked the Secretary of State for the Home
+# Department if he is now able to state the Government's proposals
+# regarding double summer time.
+#
+# [two other similar questions omitted]
+#
+# Mr. H. Morrison: The Government, in reviewing the matter, have
+# considered, [...] the conclusion has been reached that the adoption of
+# double summer time from the beginning of April is essential to the
+# maintenance of the war effort. [...] As 1st April is Easter Sunday,
+# when very early services are held in many churches, it is proposed that
+# double summer time shall start not in the night preceding Easter
+# Sunday, but in the night of Sunday- Monday so that it will operate from
+# Monday, 2nd April.'
+
+# From Peter Ilieve <peter@memex.co.uk> (September 3, 1993):
+#
+# > # Current rules
+# > Rule GB-Eire 1981 max - Mar lastSun 1:00s 1:00 BST
+# > Rule GB-Eire 1981 max - Oct Sun>=23 1:00s 0 GMT
+#
+# The ending rule here doesn't match the EC rules, which specify the fourth
+# Sunday in October for the UK and Eire. The `fourth Sunday' rule wasn't
+# followed in 1989, but then the sixth EC directive wasn't in force then
+# and I don't know what previous ones said. 1995 is the next year with
+# the 4th Sun on 22 Oct, but that year isn't covered by the UK Summer Time
+# Order or the sixth EC directive. Your Oct Sun>=23 rule matches history
+# and with things only announced for 2 years or so in advance who knows
+# what will happen.
+#
+# There are renewed rumours that the Government here will make another
+# attempt at resolving this issue, which is what prompted me to start
+# asking the Home Office and the EC about it again. The EC categorically
+# state they are not asking anybody to change timezone, they only want
+# common start/end dates. The UK Govt. seem to want to change our zone
+# and blame the resulting fuss on the EC. Me, I think we should scrap
+# summer time completely, noon is when the Sun is overhead, and that should
+# be the end of it.
+
+# From Peter Ilieve <peter@memex.co.uk> (October 22, 1993):
+#
+# I now have the text of the Summer Time Act 1916, the granddaddy of them all.
+# It is headed: `An Act to provide for the Time in Great Britain and Ireland
+# being in advance of Greenwich and Dublin mean time respectively in the
+# summer months'.
+#
+# It specifies 21 May and 1 October for 1916 (both at 02:00 GMT) and whatever
+# dates an Order in Council may specify for subsequent years.
+#
+# Section 4 states: `This act shall apply to Ireland in like manner as it
+# applies to Great Britain, with the substitution however of references
+# to Dublin mean time for references to Greenwich mean time.'
+#
+# Lorna, my learned legal friend who supplied it, also offers this quote
+# from Halsbury's Statutes on the extent of Acts:
+#
+# `An Act of the United Kingdom Parliament is to be construed prima facie
+# to apply to the whole of the United Kingdom and not to any place outside.
+# [...] The expression "United Kingdom" for this purpose includes (since
+# 1922) Great Britain (ie. England, Wales and Scotland) and Northern Ireland,
+# but it does not include the Channel Islands or the Isle of Man.'
+#
+# She goes on to say the seminal event of 1922 was the establishment of
+# the Irish Free State, now called Eire.
+#
+# The Act doesn't say anything about Wales (or Scotland) so I would assert
+# that Shanks is wrong here. I would like to know why he thinks Wales
+# was different.
+#
+# It also confirms the fact that Ireland followed Dublin time back then,
+# and 25 minutes behind Greenwich, as Shanks has it, would be correct.
+
+# From Peter Ilieve <peter@memex.co.uk> (October 28, 1993):
+#
+# I now have before me, thanks to my learned legal friend Lorna, the text of
+# the Time (Ireland) Act 1916.
+#
+# It says that as from 2 AM Dublin Mean Time on 1 October 1916 the time
+# for general purposes in Ireland shall be the same as the rest of Great
+# Britain (ie. GMT with the Summer Time periods specified by the Summer Time
+# Act 1916).... As Ireland was behind GMT/BST at 02:00 DMT on 1 Oct GB would
+# have already put the clocks back. Using DST as Dublin Summer Time the
+# sequence would have been:
+# Dublin London
+# 02:34 DST 02:59 BST
+# 02:35 DST 02:00 GMT
+# 02:59 DST 02:24 GMT
+# 02:25 GMT 02:25 GMT
+# with the transition 03:00 DST -> 02:00 DMT -> 02:25 GMT all at once.
+#
+# In a table of repeals in the Schedule to the Act it mentions the
+# Statutes (Definition of Time) Act 1880. This is presumably the source
+# of the 1880 date in Shanks. The little bit of it that is repealed
+# also refers solely to Ireland and Dublin Mean Time.
+
+# From Peter Ilieve <peter@memex.co.uk> (October 29, 1993):
+#
+# My case is that, with the sole exception of Ireland in 1916 using Dublin
+# Mean Time, Summer Time has been uniform throughout the United Kingdom
+# ever since it first started in 1916.
+#
+# The United Kingdom is England, Wales and Scotland plus all of Ireland from
+# 1916 up to and including 1921, or plus Northern Ireland from 1922 to date.
+#
+# The dates used are those specified in the table in Summer Time: A Consultation
+# Document (Cm 722, 1989) that are now included in the europe file, with a
+# change to a single date, the start in 1924. I made a typo in my 1989 mail
+# and the table itself is also wrong. The correct date is 13 April.
+# The times were 02:00 GMT up to and including 1980, 01:00 GMT from 1981 on,
+# except for wartime double summer time.
+#
+# As evidence I would cite:
+#
+# - The Summer Time Act, 1916.
+#
+# This specifically states that it applies to Ireland, specifies dates of
+# 21 May and 1 October and times of 02:00, and says that in Ireland the
+# times relate to Dublin mean time. It specifies an offset of 1 hour.
+#
+# - The Time (Ireland) Act, 1916
+#
+# This abolishes Dublin mean time on 02:00 DMT 1 October 1916.
+# It repeals that section of the Statutes (Definition of Time) Act, 1880
+# that specifies DMT. It is therefore a safe bet that DMT existed at least
+# from 1880 and was the only alternative standard time in the UK.
+#
+# - The Summer Time Act, 1922
+#
+# This specifies an offset of 1 hour and dates of the day after the third
+# Saturday in April, unless that be Easter, in which case it is the day after
+# the second Saturday, and the day after the third Saturday in September.
+# The time is 02:00 GMT. It applied in 1922 and 1923, and longer if Parliament
+# so approved.
+#
+# It specifically states that it applies to Northern Ireland, the Channel
+# Islands, and the Isle of Man.
+#
+# - The Summer Time Act, 1925
+#
+# This makes the 1922 Act permanent, with a change to the end date to the
+# day after the first Saturday in October. It says nothing about extent,
+# so that part of the 1922 Act will still apply.
+#
+# - The Defence (Summer Time) Regulations, 1939, SR&O 1939 No. 1379
+# [SR&O == Statutary Regulation and Order]
+#
+# These were made under the Emergency Powers (Defence) Act, 1939.
+# It changes the end date to be the day after the third Saturday in November.
+# It makes consequential changes to some vehicle lighting legislation,
+# which includes the Motor Vehicles and Road Traffic (Northern Ireland) Act,
+# 1934, so it seems clear it applies in Northern Ireland.
+#
+# - An Order in Council amending the The Defence (Summer Time) Regulations,
+# 1939, SR&O 1940 No. 1883
+#
+# This continues summer time throughout the year after it starts in 1940.
+# It says nothing about extent and has no consequential changes.
+#
+# - An Order in Council amending the The Defence (Summer Time) Regulations,
+# 1939, SR&O 1941 No. 476
+#
+# This introduces double summer time, starting at 01:00 GMT on the day after
+# the first Saturday in May and ending at 01:00 GMT on the day after the
+# second Saturday in August, offset another hour from normal summer time,
+# which continues throughout the rest of the year. It goes on a lot about
+# consequential changes to agricultural wages legislation, and says in part
+# `... and in its application to Northern Ireland have effect as
+# if for the references to the Agricultural Wages (Regulation) Acts, 1924 and
+# 1940, there were substituted references to the Agricultural Wages (Regulation)
+# Acts (Northern Ireland), 1939 and 1940, ...'. It also has a similar section
+# for Scotland. Both sections substitute the local Agricultural Wages Board
+# for the Agricultural Wages Board for England and Wales, showing that
+# England and Wales were indivisible.
+#
+# - An Order in Council amending the The Defence (Summer Time) Regulations,
+# 1939, SR&O 1942 No. 506
+#
+# This changes the start date of double summer time to the day after the first
+# Saturday in April. It says nothing about extent.
+#
+# - An Order in Council amending the The Defence (Summer Time) Regulations,
+# 1939, SR&O 1944 No. 932
+#
+# This changed the end date of double summer time to 17 September 1944.
+# (I don't have the text of this, just a note of what it did, the text almost
+# certainly had the `day after the nth Saturday' form.)
+#
+# (I am missing whatever regulations there were to change things in 1945
+# and the Summer Time Act, 1947.)
+#
+# - The British Standard Time Act, 1968
+#
+# This came into force on 27 October 1968 and continued summer time throughout
+# the year as an experiment until it expired on 31 October 1971.
+# There was no double summer time so we didn't have to change the clocks at all.
+# It specifically said it applied to Northern Ireland. It also said it
+# applied to Jersey, Guernsey and the Isle of Man unless they passed
+# measures saying it didn't.
+#
+# - The Manx Time Act, 1968
+#
+# This is an Act of Tynwald (the Isle of Man Parliament) that said that
+# henceforth Manx time would be the same as the time in Great Britain.
+#
+# - The Summer Time Act, 1972
+#
+# This specified a reversion to normal summer time behaviour with a start
+# date of the day after the third Saturday in March, unless that is Easter,
+# when it is the day after the second Saturday, and an end date of the day
+# after the fourth Saturday in October. Times are at 02:00 GMT, offset is
+# 1 hour.
+#
+# It has the same wording about extent as the British Standard Time Act, 1968,
+# applying to Northern Ireland unconditionally and to Jersey, Guernsey and the
+# Isle of Man if they don't do something about it.
+#
+# (I am missing various Summer Time Orders that modified the 1972 Act to
+# harmonise with the EC since 1981. The major change is that the time changes
+# to 01:00 GMT.)
+#
+# - The Summer Time Order, 1992, SI 1992/1729 [SI == Statutary Instrument]
+#
+# This specifies dates of:
+# Start End
+# 1993 28 March 24 October
+# 1994 27 March 23 October
+# All start and end times are at 01:00 GMT.
+# This is as far as it goes at present. A new EC directive is expected soon
+# and this will lead to a new Summer Time Order implementing it in the UK.
+#
+# - Some text on the extent of Acts, from Halsbury's Statutes
+#
+# `An Act of the United Kingdom Parliament is to be construed prima facie
+# to apply to the whole of the United Kingdom and not to any place outside.
+# [...] The expression "United Kingdom" for this purpose includes (since
+# 1922) Great Britain (ie. England, Wales and Scotland) and Northern Ireland,
+# but it does not include the Channel Islands or the Isle of Man.'
+#
+# So, many of these measures specifically include Northern Ireland,
+# the Channel Islands and the Isle of Man. None of them exclude any
+# part of the UK. The default interpretation of Acts is that they apply
+# throughout the UK.
+#
+# With that, I rest my case Milud :-)
+#
+# Thanks are due to my learned legal friend Lorna Montgomerie, who dug out
+# the dusty old statutes, and to Melanie Allison of the Ministry of Defence,
+# who provided the wartime regulations and a snippet of Hansard explaining
+# why double summer time started on a Monday in 1945 (it was Easter).
+
+# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+#
+# As Ilieve remarks, the date `20 April 1924' in the table of ``Summer Time: A
+# Consultation Document'' (Cm 722, 1989) table is a transcription error;
+# 20 April was an Easter Sunday. Shanks has 13 April, the correct date.
+# Also, the table is not quite right for 1925 through 1938; the correct rules
+# (which Shanks uses) are given in the Summer Time Acts of 1922 and 1925.
+# Shanks and the UK Government paper disagree about the Apr 1956 transition;
+# since we have no other data, and since Shanks was correct in the other
+# points of disagreement about London, we'll believe Shanks for now.
+# Also, for lack of other data, we'll follow Shanks for Eire in 1940-1948.
+#
+# Given Peter Ilieve's comments, the following claims by Shanks are incorrect:
+# * Wales did not switch from GMT to daylight savings time until
+# 1921 Apr 3, when they began to conform with the rest of Great Britain.
+# Actually, Wales was identical after 1880.
+# * Eire had two transitions on 1916 Oct 1.
+# It actually just had one transition.
+# * Northern Ireland used single daylight savings time throughout WW II.
+# Actually, it conformed to Britain.
+#
+# The following claim by Shanks is possible though doubtful;
+# we'll ignore it for now.
+# * Jersey, Guernsey, and the Isle of Man did not switch from GMT
+# to daylight savings time until 1921 Apr 3, when they began to
+# conform with Great Britain.
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule GB-Eire 1847 only - Sep 22 0:00 0 GMT
+# 1916 to 1925--irregular
+Rule GB-Eire 1916 only - May 21 2:00s 1:00 BST
+Rule GB-Eire 1916 only - Oct 1 2:00s 0 GMT
+Rule GB-Eire 1917 only - Apr 8 2:00s 1:00 BST
+Rule GB-Eire 1917 only - Sep 17 2:00s 0 GMT
+Rule GB-Eire 1918 only - Mar 24 2:00s 1:00 BST
+Rule GB-Eire 1918 only - Sep 30 2:00s 0 GMT
+Rule GB-Eire 1919 only - Mar 30 2:00s 1:00 BST
+Rule GB-Eire 1919 only - Sep 29 2:00s 0 GMT
+Rule GB-Eire 1920 only - Mar 28 2:00s 1:00 BST
+Rule GB-Eire 1920 only - Oct 25 2:00s 0 GMT
+Rule GB-Eire 1921 only - Apr 3 2:00s 1:00 BST
+Rule GB-Eire 1921 only - Oct 3 2:00s 0 GMT
+Rule GB-Eire 1922 only - Mar 26 2:00s 1:00 BST
+Rule GB-Eire 1922 only - Oct 8 2:00s 0 GMT
+Rule GB-Eire 1923 only - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1923 1924 - Sep Sun>=16 2:00s 0 GMT
+Rule GB-Eire 1924 only - Apr 13 2:00s 1:00 BST
+# 1925 to 1939 start--regular, except for avoiding Easter
+Rule GB-Eire 1925 1926 - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1925 1938 - Oct Sun>=2 2:00s 0 GMT
+Rule GB-Eire 1927 only - Apr 10 2:00s 1:00 BST
+Rule GB-Eire 1928 1929 - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1930 only - Apr 13 2:00s 1:00 BST
+Rule GB-Eire 1931 1932 - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1933 only - Apr 9 2:00s 1:00 BST
+Rule GB-Eire 1934 only - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1935 only - Apr 14 2:00s 1:00 BST
+Rule GB-Eire 1936 1937 - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1938 only - Apr 10 2:00s 1:00 BST
+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 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 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 - 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 - 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.
+Rule GB-Eire 1948 only - Mar 14 2:00s 1:00 BST
+Rule GB-Eire 1948 1949 - Oct lastSun 2:00s 0 GMT
+Rule GB-Eire 1949 only - Apr 3 2:00s 1:00 BST
+# 1950 through start of 1953, regular.
+Rule GB-Eire 1950 1953 - Apr Sun>=14 2:00s 1:00 BST
+Rule GB-Eire 1950 1952 - Oct Sun>=21 2:00s 0 GMT
+# 1954 to 1980, starting rules
+Rule GB-Eire 1954 only - Apr 11 2:00s 1:00 BST
+Rule GB-Eire 1955 1956 - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1957 only - Apr 14 2:00s 1:00 BST
+Rule GB-Eire 1958 1959 - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1960 only - Apr 10 2:00s 1:00 BST
+Rule GB-Eire 1961 1963 - Mar lastSun 2:00s 1:00 BST
+Rule GB-Eire 1964 1967 - Mar Sun>=19 2:00s 1:00 BST
+Rule GB-Eire 1972 1980 - Mar Sun>=16 2:00s 1:00 BST
+# 1953 to 1980, ending rules
+Rule GB-Eire 1953 1960 - Oct Sun>=1 2:00s 0 GMT
+Rule GB-Eire 1961 1967 - Oct Sun>=23 2:00s 0 GMT
+Rule GB-Eire 1971 only - Oct 31 3:00 0 GMT
+Rule GB-Eire 1972 1980 - Oct Sun>=23 2:00s 0 GMT
# Current rules
Rule GB-Eire 1981 max - Mar lastSun 1:00s 1:00 BST
-Rule GB-Eire 1972 max - Oct Sun>=23 1:00s 0 GMT
+Rule GB-Eire 1981 max - Oct Sun>=23 1:00s 0 GMT
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone GB-Eire 0:00 GB-Eire %s 1968 Oct 27 1:00s
- 1:00 - BST 1971 Oct 31 1:00s
- 0:00 GB-Eire %s
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Europe/London -0:00:37 - LMT 1847 Sep 22
+ 0:00 GB-Eire %s 1968 Feb 18 2:00
+ 1:00 - BST 1971 Oct 31 2:00
+ 0:00 GB-Eire %s
+Zone Europe/Belfast -0:23:40 - LMT 1880 Aug 2
+ -0:25 - DMT 1916 May 21 2:00 # Dublin MT
+ -0:25 1:00 DST 1916 Oct 1 3:00
+ 0:00 GB-Eire %s 1968 Feb 18 2:00
+ 1:00 - BST 1971 Oct 31 3:00
+ 0:00 GB-Eire %s
+Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2
+ -0:25 - DMT 1916 May 21 2:00 # Dublin MT
+ -0:25 1:00 DST 1916 Oct 1 3:00
+ 0:00 GB-Eire %s 1940 Feb 25 2:00
+ 0:00 1:00 BST 1946 Oct 6 2:00
+ 0:00 - GMT 1947 Mar 16 2:00
+ 0:00 1:00 BST 1947 Nov 2 2:00
+ 0:00 - GMT 1948 Apr 18 2:00
+ 0:00 GB-Eire %s 1968 Feb 18 2:00
+ 1:00 - BST 1971 Oct 31 3:00
+ 0:00 GB-Eire %s
###############################################################################
# Continental Europe
-# The use of 1986 as starting years below is conservative.
-
-Rule W-Eur 1986 max - Mar lastSun 1:00s 1:00 " DST"
-Rule W-Eur 1986 max - Sep lastSun 1:00s 0 -
+Rule W-Eur 1800 only - Jan 1 0:00 0 -
+Rule W-Eur 1977 1980 - Apr Sun>=1 1:00s 1:00 " DST"
+Rule W-Eur 1977 only - Sep lastSun 1:00s 0 -
+Rule W-Eur 1978 only - Oct 1 1:00s 0 -
+Rule W-Eur 1979 max - Sep lastSun 1:00s 0 -
+Rule W-Eur 1981 max - Mar lastSun 1:00s 1:00 " DST"
-Rule M-Eur 1986 max - Mar lastSun 2:00s 1:00 " DST"
-Rule M-Eur 1986 max - Sep lastSun 2:00s 0 -
+Rule M-Eur 1800 only - Jan 1 0:00 0 -
+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"
+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 M-Eur 1944 only - Oct 2 2:00s 0 -
+Rule M-Eur 1977 1980 - Apr Sun>=1 2:00s 1:00 " DST"
+Rule M-Eur 1977 only - Sep lastSun 2:00s 0 -
+Rule M-Eur 1978 only - Oct 1 2:00s 0 -
+Rule M-Eur 1979 max - Sep lastSun 2:00s 0 -
+Rule M-Eur 1981 max - Mar lastSun 2:00s 1:00 " DST"
-Rule E-Eur 1986 max - Mar lastSun 3:00s 1:00 " DST"
-Rule E-Eur 1986 max - Sep lastSun 3:00s 0 -
+Rule E-Eur 1981 max - Mar lastSun 3:00s 1:00 " DST"
+Rule E-Eur 1981 max - Sep lastSun 3:00s 0 -
-Rule Turkey 1986 max - Mar lastSun 1:00 1:00 " DST"
-Rule Turkey 1986 max - Sep lastSun 1:00 0 -
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Russia 1880 only - Jan 1 0:00 0 -
+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
+# 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 1990 - Sep lastSun 2:00s 0 K
+Rule Russia 1985 1990 - Mar lastSun 2:00s 1:00 D
+Rule Russia 1992 max - Sep lastSun 2:00s 0 K
+Rule Russia 1992 max - Mar lastSun 2:00s 1:00 D
-Rule W-SU 1986 max - Mar lastSun 2:00s 1:00 " DST"
-Rule W-SU 1986 max - Sep lastSun 2:00s 0 -
+# These are for backward compatibility with older versions.
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone WET 0:00 W-Eur WET%s
-Zone Iceland 0:00 - WET
-Zone MET 1:00 M-Eur MET%s
-Zone Poland 1:00 W-Eur MET%s
-Zone EET 2:00 E-Eur EET%s
-Zone Turkey 3:00 Turkey EET%s
-Zone W-SU 3:00 M-Eur ????
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone WET 0:00 W-Eur WET%s
+Zone MET 1:00 M-Eur MET%s
+Zone EET 2:00 E-Eur EET%s
+Zone W-SU 3:00 M-Eur ????
# Tom Hoffman says that MET is also known as Central European Time
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 1942 only - Nov 2 3:00 0 -
+Rule Albania 1943 only - Mar 29 2:00 1:00 " DST"
+Rule Albania 1943 only - Apr 10 3:00 0 -
+Rule Albania 1974 only - May 4 0:00 1:00 " DST"
+Rule Albania 1974 only - Oct 2 0:00 0 -
+Rule Albania 1975 only - May 1 0:00 1:00 " DST"
+Rule Albania 1975 only - Oct 2 0:00 0 -
+Rule Albania 1976 only - May 2 0:00 1:00 " DST"
+Rule Albania 1976 only - Oct 3 0:00 0 -
+Rule Albania 1977 only - May 8 0:00 1:00 " DST"
+Rule Albania 1977 only - Oct 2 0:00 0 -
+Rule Albania 1978 only - May 6 0:00 1:00 " DST"
+Rule Albania 1978 only - Oct 1 0:00 0 -
+Rule Albania 1979 only - May 5 0:00 1:00 " DST"
+Rule Albania 1979 only - Sep 30 0:00 0 -
+Rule Albania 1980 only - May 3 0:00 1:00 " DST"
+Rule Albania 1980 only - Oct 4 0:00 0 -
+Rule Albania 1981 only - Apr 26 0:00 1:00 " DST"
+Rule Albania 1981 only - Sep 27 0:00 0 -
+Rule Albania 1982 only - May 2 0:00 1:00 " DST"
+Rule Albania 1982 only - Oct 3 0:00 0 -
+Rule Albania 1983 only - Apr 18 0:00 1:00 " DST"
+Rule Albania 1983 only - Oct 1 0:00 0 -
+Rule Albania 1984 only - Apr 1 0:00 1:00 " DST"
+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
+
+# 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 M-Eur MET%s
+
+# Austria
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Austria 1918 only - Jun 16 3:00 0 -
+Rule Austria 1920 only - Apr 5 2:00s 1:00 " DST"
+Rule Austria 1920 only - Sep 13 2:00s 0 -
+Rule Austria 1945 only - Apr 2 2:00s 1:00 " DST"
+Rule Austria 1945 only - Nov 18 2:00s 0 -
+Rule Austria 1946 only - Apr 14 2:00s 1:00 " DST"
+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"
+# 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 Mar 29 2:00
+ 1:00 M-Eur MET%s
+
+# 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:00 - EET 1930 Jun 21
+ 3:00 Russia MS%s 1991 Sep 29 3:00
+ 2:00 Russia MS%s
+
+# Belgium
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Belgium 1919 only - Mar 1 23:00s 1:00 " DST"
+Rule Belgium 1919 only - Oct 4 23:00s 0 -
+Rule Belgium 1920 only - Feb 14 23:00s 1:00 " DST"
+Rule Belgium 1920 only - Oct 23 23:00s 0 -
+Rule Belgium 1921 only - Mar 14 23:00s 1:00 " DST"
+Rule Belgium 1921 only - Oct 25 23:00s 0 -
+Rule Belgium 1922 only - Mar 25 23:00s 1:00 " DST"
+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 5 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 1938 - Oct Sun>=2 2:00s 0 -
+Rule Belgium 1929 only - Apr 21 2:00s 1:00 " DST"
+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 1937 only - Apr 4 2:00s 1:00 " DST"
+Rule Belgium 1938 only - Mar 27 2:00s 1:00 " DST"
+Rule Belgium 1939 only - Apr 16 2:00s 1:00 " DST"
+Rule Belgium 1939 only - Nov 19 2:00s 0 -
+Rule Belgium 1945 only - Apr 2 2:00s 1:00 " DST"
+Rule Belgium 1945 only - Sep 16 2:00s 0 -
+Rule Belgium 1946 only - May 19 2:00s 1:00 " DST"
+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: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 Apr 3 2:00
+ 1:00 M-Eur MET%s
+
+# 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 Mar 27 2:00s
+ 1:00 M-Eur MET%s
+
+# 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 - Oct 1 1:00 0 -
+Rule Bulg 1980 1982 - Apr Sat<=7 23:00 1:00 " DST"
+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
+ 2:00 - EET 1942 Nov 2 3:00
+ 1:00 M-Eur MET%s 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
+
+# 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 Mar 27 2:00s
+ 1:00 M-Eur MET%s
+
+# Czech Republic
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Czech 1944 only - Sep 17 2:00s 0 -
+Rule Czech 1945 only - Apr 8 2:00s 1:00 " DST"
+Rule Czech 1945 only - Nov 18 2:00s 0 -
+Rule Czech 1946 only - May 6 2:00s 1:00 " DST"
+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"
+# 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 Apr 1 2:00
+ 1:00 M-Eur MET%s
+
+# Denmark
+# 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 - 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 1945 only - Aug 15 2:00s 0 -
+Rule Denmark 1946 only - May 1 2:00s 1:00 " DST"
+Rule Denmark 1946 only - Sep 1 2:00s 0 -
+Rule Denmark 1947 only - May 4 2:00s 1:00 " DST"
+Rule Denmark 1947 only - Aug 10 2:00s 0 -
+Rule Denmark 1948 only - May 9 2:00s 1:00 " DST"
+Rule Denmark 1948 only - Aug 8 2:00s 0 -
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Europe/Copenhagen 0:50:20 - LMT 1890
+ 0:50 - CMT 1894 # 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 Apr 6 2:00
+ 1:00 M-Eur MET%s
+Zone Atlantic/Faeroe 0:27:04 - LMT 1908 Jan 11 # Torshavn
+ 0:00 - WET 1981 Mar 29 1:00
+ 0:00 W-Eur WET%s
+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
+Zone America/Godthab -3:26:56 - LMT 1916 Jul 28
+ -3:00 - WGT 1980 Apr 6 2:00
+ -3:00 M-Eur WGT%s
+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.
+# 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
+ 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:00
+ 2:00 M-Eur MET%s
+
+# Finland
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Finland 1921 only - May 1 0:00 0 -
+Rule Finland 1942 only - Apr 3 0:00 1:00 " DST"
+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 M-Eur EET%s
+
+# France
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule France 1911 only - Mar 11 0:00 0 -
+Rule France 1916 only - Jun 14 23:00s 1:00 " DST"
+Rule France 1916 1919 - Oct Sun>=7 23:00s 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 1920 only - Oct 23 23:00s 0 -
+Rule France 1921 only - Mar 14 23:00s 1:00 " DST"
+Rule France 1921 only - Oct 25 23:00s 0 -
+Rule France 1922 only - Mar 25 23:00s 1:00 " DST"
+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 1939 only - Nov 18 23:00s 0 -
+Rule France 1940 only - Feb 25 2:00 1:00 " DST"
+# 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 1945 only - Sep 16 3:00 0 -
+# From Paul Eggert <eggert@twinsun.com) (November 18, 1993):
+# Shanks gives no times for 1975, but according to Cm722,
+# France introduced summer time in 1975 from 20 March to 22 September.
+Rule France 1975 only - Mar 20 2:00s 1:00 " DST"
+Rule France 1975 only - Sep 22 2:00s 0 -
+Rule France 1976 only - Mar 28 2:00s 1:00 " DST"
+Rule France 1976 only - Sep lastSun 2:00s 0 -
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Europe/Paris 0:09:20 - LMT 1891 Mar 15 0:01
+ 0:09 - 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 Apr Sun>=1 2:00
+ 1:00 M-Eur MET%s
+
+# 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 - Nov 18 2:00s 0 -
+Rule Germany 1946 only - Apr 14 2:00s 1:00 " DST"
+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"
+# 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 Apr 6 2:00
+ 1:00 M-Eur MET%s
+
+# 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 Mar 28 2:00
+ 1:00 M-Eur MET%s
+
+# 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
+Rule Greece 1916 only - July 28 0:01 0 -
+Rule Greece 1932 only - Jul 7 0:00 1:00 " DST"
+Rule Greece 1932 only - Sep 1 0:00 0 -
+Rule Greece 1941 only - Apr 7 0:00 1:00 " DST"
+Rule Greece 1942 only - Nov 2 3:00 0 -
+Rule Greece 1943 only - Mar 30 0:00 1:00 " DST"
+Rule Greece 1943 only - Oct 4 0:00 0 -
+Rule Greece 1952 only - Jul 1 0:00 1:00 " DST"
+Rule Greece 1952 only - Nov 2 0:00 0 -
+Rule Greece 1975 only - Apr 12 0:00s 1:00 " DST"
+Rule Greece 1975 only - Nov 26 0:00s 0 -
+Rule Greece 1976 only - Apr 11 2:00s 1:00 " DST"
+Rule Greece 1976 only - Oct 10 2:00s 0 -
+Rule Greece 1977 1978 - Apr Sun>=1 2:00s 1:00 " DST"
+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 - Sep 29 2:00 0 -
+Rule Greece 1980 only - Apr 1 0:00 1:00 " DST"
+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 Mar 29 2:00
+ 2:00 M-Eur EET%s
+
+# Hungary
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Hungary 1918 only - Sep 29 2:00s 0 -
+Rule Hungary 1919 only - Apr 15 3:00 1:00 " DST"
+Rule Hungary 1919 only - Sep 15 3:00 0 -
+Rule Hungary 1920 only - Apr 5 3:00 1:00 " DST"
+Rule Hungary 1920 only - Sep 30 3:00 0 -
+Rule Hungary 1945 only - May 1 23:00 1:00 " DST"
+Rule Hungary 1945 only - Nov 3 0:00 0 -
+Rule Hungary 1946 only - Mar 31 2:00s 1:00 " DST"
+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 1950 only - Oct 23 2:00s 0 -
+Rule Hungary 1954 1955 - May 23 0:00 1:00 " DST"
+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 - Sep lastSun 0:00 0 -
+Rule Hungary 1957 only - Jun Sun>=1 1:00 1:00 " DST"
+Rule Hungary 1957 only - Sep lastSun 3:00 0 -
+Rule Hungary 1980 only - Apr 6 1:00 1:00 " DST"
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Europe/Budapest 1:16:20 - LMT 1890 Oct
+ 1:00 M-Eur MET%s 1918 Jul
+ 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 M-Eur MET%s
+
+# Iceland
+#
+# From Adam David <adam@veda.is> (November 6, 1993):
+# The name of the timezone in Iceland for system / mail / news purposes is GMT.
+#
+# From Shanks (1991):
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Iceland 1908 only - Jan 1 0:00 0 S
+Rule Iceland 1917 1918 - Feb 20 2:00 1:00 D
+Rule Iceland 1917 only - Oct 25 2:00 0 S
+Rule Iceland 1918 1919 - Nov 15 2:00 0 S
+Rule Iceland 1919 only - Feb 19 2:00 1:00 D
+Rule Iceland 1921 only - Mar 19 2:00 1:00 D
+Rule Iceland 1921 only - Jun 22 2:00 0 S
+Rule Iceland 1941 1942 - Mar Sat>=1 2:00 1:00 D
+Rule Iceland 1941 1942 - Jul 2 2:00 0 S
+Rule Iceland 1943 1946 - Mar Sun>=1 2:00 1:00 D
+Rule Iceland 1943 1948 - Oct Sun>=22 2:00 0 S
+Rule Iceland 1947 1962 - Apr Sun>=1 2:00 1:00 D
+Rule Iceland 1949 only - Oct 30 2:00 0 S
+Rule Iceland 1950 only - Oct 22 2:00 0 S
+# From Paul Eggert <eggert@twinsun.com) (November 18, 1993):
+# Shanks's ``1953 Oct 26'' is probably a typo for Oct 25.
+# Likewise, correct Shanks's ``1961 Oct 22'' to Oct 29.
+Rule Iceland 1951 1967 - Oct Sun>=23 1:00s 0 S
+Rule Iceland 1963 1968 - Apr Sun>=1 1:00s 1:00 D
+# 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 Oct 27 1:00s
+ 0:00 - GMT
+
+# Italy
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Italy 1893 only - Nov 1 0:00 0 S
+Rule Italy 1916 only - Jun 4 0:00 1:00 " DST"
+Rule Italy 1916 only - Oct 1 0:00 0 -
+Rule Italy 1917 only - Apr 1 0:00 1:00 " DST"
+Rule Italy 1917 only - Sep 30 0:00 0 -
+Rule Italy 1918 only - Mar 10 0:00 1:00 " DST"
+Rule Italy 1918 1919 - Oct Sun>=1 0:00 0 -
+Rule Italy 1919 only - Mar 2 0:00 1:00 " DST"
+Rule Italy 1920 only - Mar 21 0:00 1:00 " DST"
+Rule Italy 1920 only - Sep 19 0:00 0 -
+Rule Italy 1940 only - Jun 15 0:00 1:00 " DST"
+Rule Italy 1945 only - Apr 2 2:00 1:00 " DST"
+Rule Italy 1945 only - Sep 17 0:00 0 -
+Rule Italy 1946 only - Mar 17 2:00s 1:00 " DST"
+Rule Italy 1946 only - Oct 6 2:00s 0 -
+Rule Italy 1947 only - Mar 16 0:00s 1:00 " DST"
+Rule Italy 1947 only - Oct 5 0:00s 0 -
+Rule Italy 1948 only - Feb 29 2:00s 1:00 " DST"
+Rule Italy 1948 only - Oct 3 2:00s 0 -
+Rule Italy 1966 1968 - May Sun>=22 0:00 1:00 " DST"
+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 1970 only - Sep lastSun 0:00 0 -
+Rule Italy 1971 1972 - May Sun>=22 0:00 1:00 " DST"
+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 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 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 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 1945 Apr 2 2:00s
+ 1:00 Italy MET%s 1980 Apr 6 2:00
+ 1:00 M-Eur MET%s
+# Vatican is identical to Europe/Rome; San Marino is like Europe/Rome.
+
+# 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
+ 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 Sep 29 3:00
+ 2:00 M-Eur MET%s
+
+# Liechtenstein
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Europe/Vaduz 0:30:04 - LMT 1894 Jun
+ 1:00 - MET 1981 Mar 29 2:00
+ 1:00 M-Eur MET%s
+
+# 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
+ 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 Sep 29 3:00
+ 2:00 M-Eur MET%s
+
+# Luxembourg
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Lux 1904 only - Jun 1 0:00 0 -
+Rule Lux 1916 only - May 14 23:00 1:00 " DST"
+Rule Lux 1916 only - Oct 1 1:00 0 -
+Rule Lux 1917 only - Apr 28 23:00 1:00 " DST"
+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 - Sep Mon>=15 2:00s 0 -
+Rule Lux 1919 only - Mar 1 23:00 1:00 " DST"
+Rule Lux 1919 only - Oct 5 3:00 0 -
+Rule Lux 1920 only - Feb 14 23:00 1:00 " DST"
+Rule Lux 1920 only - Oct 24 2:00 0 -
+Rule Lux 1921 only - Mar 14 23:00 1:00 " DST"
+Rule Lux 1921 only - Oct 26 2:00 0 -
+Rule Lux 1922 only - Mar 25 23:00 1:00 " DST"
+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 - Oct Sun>=2 2:00 0 -
+Rule Lux 1924 only - Mar 29 23:00 1:00 " DST"
+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"
+# 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 1979 Apr 1 2:00
+ 1:00 M-Eur MET%s
+
+# The Former Yugoslav Republic of 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 Mar 27 2:00s
+ 1:00 M-Eur MET%s
+
+# 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 - Sep 29 0:00s 0 -
+Rule Malta 1974 only - Apr 21 0:00s 1:00 " DST"
+Rule Malta 1974 only - Sep 16 0:00s 0 -
+Rule Malta 1975 1979 - Apr Sun>=15 2:00 1:00 " DST"
+Rule Malta 1975 1980 - Sep Sun>=15 2:00 0 -
+Rule Malta 1980 only - Mar 31 2:00 1:00 " DST"
+# 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 Mar 29 2:00s
+ 1:00 M-Eur MET%s
+
+# 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 - MSK 1981 Apr
+ 3:00 Russia MS%s 1991 Sep 29 2:00s
+ 2:00 M-Eur EET%s
+
+# Monaco
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
+ 0:09 - PMT 1911 Mar 11 # Paris Mean Time
+ 0:00 France WET%s 1945 Sep 16 3:00
+ 1:00 France MET%s 1977 Apr Sun>=1 2:00
+ 1:00 M-Eur MET%s
+
+# Netherlands
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Neth 1892 only - May 1 0:00 0 AMT
+Rule Neth 1916 only - May 1 0:00 1:00 NST
+Rule Neth 1916 only - Oct 1 0:00 0 AMT
+Rule Neth 1917 only - Apr 16 2:00s 1:00 NST
+Rule Neth 1917 only - Sep 17 2:00s 0 AMT
+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
+Rule Neth 1922 1939 - 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
+Rule Neth 1925 only - Jun 5 2:00s 1:00 NST
+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 1938 1939 - May 15 2:00s 1:00 NST
+Rule Neth 1945 only - Apr 2 2:00s 1:00 -
+Rule Neth 1945 only - May 20 2:00s 0 " DST"
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Europe/Amsterdam 0:19:36 - LMT 1892 May
+ 0:20 Neth %s 1937 Jul
+ 1:20 Neth %s 1940 May 16 2:00
+ 1:00 M-Eur MET%s 1945 Apr 2 2:00
+ 1:00 Neth MET%s 1977 Apr Sun>=1 2:00
+ 1:00 M-Eur MET%s
+
+# Norway
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Norway 1892 only - May 1 0:00 0 -
+Rule Norway 1916 only - May 22 1:00 1:00 " DST"
+Rule Norway 1916 only - Sep 30 0:00 0 -
+Rule Norway 1945 only - Apr 2 2:00s 1:00 " DST"
+Rule Norway 1945 only - Oct 1 2:00s 0 -
+Rule Norway 1959 1964 - Mar Sun>=15 2:00s 1:00 " DST"
+Rule Norway 1959 1965 - Sep Sun>=15 2:00s 0 -
+Rule Norway 1965 only - Apr 25 2:00s 1:00 " DST"
+# 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 Apr 6 2:00
+ 1:00 M-Eur MET%s
+# Svalbard is like Europe/Oslo.
+#
+# Jan Mayen
+# no information
+
+# 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 1944 only - Oct 4 2:00 0 -
+Rule Poland 1945 only - Apr 29 0:00 1:00 " DST"
+Rule Poland 1945 only - Nov 1 0:00 0 -
+Rule Poland 1946 only - Apr 14 0:00 1:00 " DST"
+Rule Poland 1946 only - Sep 7 0:00 0 -
+Rule Poland 1947 only - May 4 0:00 1:00 " DST"
+Rule Poland 1947 1948 - Oct Sun>=1 0:00 0 -
+Rule Poland 1948 only - Apr 18 0:00 1:00 " DST"
+Rule Poland 1957 only - Jun 2 1:00s 1:00 " DST"
+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 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 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 link is for backward compatibility with the old naming convention.
+Link Europe/Warsaw Poland
+
+# Portugal
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Port 1911 only - May 24 0:00 0 -
+Rule Port 1916 only - Jun 17 23:00 1:00 " DST"
+Rule Port 1916 only - Nov 1 1:00 0 -
+Rule Port 1917 only - Feb 28 23:00s 1:00 " DST"
+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 1924 only - Oct 14 23:00s 0 -
+Rule Port 1926 only - Apr 17 23:00s 1:00 " DST"
+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 1931 1932 - Oct Sat>=1 23:00s 0 -
+Rule Port 1932 only - Apr 2 23:00s 1:00 " DST"
+Rule Port 1934 only - Apr 4 23:00s 1:00 " DST"
+Rule Port 1934 1938 - Oct Sat>=1 23:00s 0 -
+Rule Port 1935 only - Apr 30 23:00s 1:00 " DST"
+Rule Port 1936 only - Apr 18 23:00s 1:00 " DST"
+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 1939 only - Nov 18 23:00s 0 -
+Rule Port 1940 only - Feb 24 23:00s 1:00 " DST"
+Rule Port 1940 only - Oct 7 23:00s 0 -
+Rule Port 1941 only - Apr 5 23:00s 1:00 " DST"
+Rule Port 1941 only - Oct 5 23:00s 0 -
+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 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 1946 only - Oct Sat>=1 23:00s 0 -
+Rule Port 1947 1965 - Apr Sun>=1 2:00s 1:00 " DST"
+Rule Port 1947 1965 - Oct Sun>=1 2:00s 0 -
+Rule Port 1977 only - Mar 27 0:00s 1:00 " DST"
+Rule Port 1977 only - Sep 25 0:00s 0 -
+Rule Port 1978 1979 - Apr Sun>=1 0:00s 1:00 " DST"
+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"
+# 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 W-Eur WET%s 1992 Sep 27 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 M-Eur MET%s
+# 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
+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 W-Eur WET%s
+# This link is for backward compatibility with the old naming convention.
+Link Europe/Lisbon Portugal
+
+# Slovakia
+Link Europe/Prague Europe/Bratislava
+
+# 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 1931 only - Jul 24 0:00 0 -
+Rule Romania 1932 only - May 22 0:00s 1:00 " DST"
+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 1979 only - Sep lastSun 0:00 0 -
+Rule Romania 1980 only - Apr 5 23:00 1:00 " DST"
+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
+
+# Russia
+# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+# 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.
+# The rest is from Shanks; it's probably wrong after 1991.
+# We're not sure whether St Petersburg switched in step with Moscow after 1991;
+# it might be a useless name, so we'll comment it out for now.
+#
+# From Shanks (1991):
+# Western Russia switched from the Julian to the Gregorian calendar
+# on 1918 Jan 14. Eatern 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/St_Petersburg 2:30:20 - LMT 1880
+# 2:01 Russia LST%s 1919 Jul 1 2:00
+# 3:00 Russia MS%s 1922 Oct
+# 2:00 - EET 1930 Jun 21
+# 3:00 Russia MS%s 1991 Sep 29 3:00
+# 2:00 Russia SPS%s
+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:00 - EET 1930 Jun 21
+ 3:00 Russia MS%s 1991 Mar lastSun 2:00s
+ 2:00 1:00 "EET DST" 1991 Sep lastSun 2:00s
+ 2:00 - EET 1992 Jan 19 2:00s
+ 3:00 Russia MS%s
+# This link is for backward compatibility with the old naming convention.
+Link Europe/Moscow Moscow
+Zone Asia/Sverdlovsk 4:02:34 - LMT 1924 May 2
+ 4:00 - SSK 1957 Mar
+ 5:00 Russia SS%s 1991 Sep 29 3:00
+ 4:00 Russia SS%s
+Zone Asia/Omsk 4:53:36 - LMT 1924 May 2
+ 5:00 - TSK 1957 Mar
+ 6:00 Russia TS%s 1991 Sep 29 3:00
+ 5:00 Russia OS%s
+Zone Asia/Novosibirsk 5:31:40 - LMT 1924 May 2
+ 6:00 - NSK 1957 Mar
+ 7:00 Russia NS%s 1991 Sep 29 3:00
+ 6:00 Russia NS%s
+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 Sep 29 3:00
+ 7:00 Russia IS%s
+Zone Asia/Yakutsk 8:38:40 - LMT 1924 May 2
+ 8:00 - YSK 1957 Mar
+ 9:00 Russia YS%s 1991 Sep 29 3:00
+ 8:00 Russia YS%s
+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 Sep 29 3:00
+ 9:00 Russia VS%s
+# MSK is taken; settle for GSK.
+Zone Asia/Magadan 10:03:12 - LMT 1924 May 2
+ 10:00 - GSK 1957 Mar
+ 11:00 Russia GS%s 1991 Sep 29 3:00
+ 10:00 Russia GS%s
+# 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 Sep 29 3:00
+ 11:00 Russia PS%s
+Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2
+ 12:00 - ASK 1957 Mar
+ 13:00 Russia AS%s 1991 Sep 29 3:00
+ 12:00 Russia AS%s
+
+# Serbia
+# 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 Mar 27 2:00s
+ 1:00 M-Eur MET%s
+
+# 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 Mar 27 2:00s
+ 1:00 M-Eur MET%s
+
+# Spain
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Spain 1901 only - Jan 1 0:00 0 -
+Rule Spain 1917 only - May 5 23:00s 1:00 " DST"
+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 1924 only - Apr 16 23:00s 1:00 " DST"
+Rule Spain 1924 only - Oct 4 23:00s 0 -
+Rule Spain 1926 only - Apr 17 23:00s 1:00 " DST"
+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 1937 only - May 22 23:00s 1:00 " DST"
+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 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 1949 only - Apr 30 23:00 1:00 " DST"
+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 - Oct Sun>=1 1:00 0 -
+Rule Spain 1976 only - Mar 27 23:00 1:00 " DST"
+Rule Spain 1976 1977 - Sep lastSun 1:00 0 -
+Rule Spain 1977 1978 - Apr 2 23:00 1:00 " DST"
+Rule Spain 1978 only - Oct 1 1: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 Apr 1 2:00
+ 1:00 M-Eur MET%s
+Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
+ -1:00 - ACT 1946 Sep 30 1:00
+ 0:00 - WET 1980 Apr 6 0:00s
+ 0:00 1:00 "WET DST" 1980 Sep 28 0:00s
+ 0:00 W-Eur WET%s
+
+# Sweden
+# 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 Apr 6 2:00
+ 1:00 M-Eur MET%s
+
+# Switzerland
+# From Howse (1988), p 82:
+# By the end of the 18th century clocks and watches became commonplace
+# and their performance improved enormously. Communities began to keep
+# mean time in preference to apparent time -- Geneva from 1780 ....
+# From Shanks (1991):
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Swiss 1894 only - Jun 1 0:00 0 -
+Rule Swiss 1941 1942 - May Sun>=1 2:00 1:00 " DST"
+Rule Swiss 1941 1942 - Oct Sun>=1 0:00 0 " DST"
+# 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 Mar 29 2:00
+ 1:00 M-Eur MET%s
+
+# 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 1910 only - Oct 1 0:00 0 -
+Rule Turkey 1916 only - May 1 0:00 1:00 " DST"
+Rule Turkey 1916 only - Oct 1 0:00 0 -
+Rule Turkey 1920 only - Mar 28 0:00 1:00 " DST"
+Rule Turkey 1920 only - Oct 25 0:00 0 -
+Rule Turkey 1921 only - Apr 3 0:00 1:00 " DST"
+Rule Turkey 1921 only - Oct 3 0:00 0 -
+Rule Turkey 1922 only - Mar 26 0:00 1:00 " DST"
+Rule Turkey 1922 only - Oct 8 0:00 0 -
+Rule Turkey 1924 only - May 13 0:00 1:00 " DST"
+Rule Turkey 1924 1925 - Oct 1 0:00 0 -
+Rule Turkey 1925 only - May 1 0:00 1:00 " DST"
+Rule Turkey 1940 only - Dec 1 0:00 1:00 " DST"
+Rule Turkey 1941 only - Sep 21 0:00 0 -
+Rule Turkey 1942 only - Apr 1 0:00 1:00 " DST"
+Rule Turkey 1942 only - Nov 1 0:00 0 -
+Rule Turkey 1945 only - Apr 2 0:00 1:00 " DST"
+Rule Turkey 1945 only - Oct 8 0:00 0 -
+Rule Turkey 1946 only - Jun 1 0:00 1:00 " DST"
+Rule Turkey 1946 only - Oct 1 0:00 0 -
+Rule Turkey 1947 1948 - Apr Sun>=16 0:00 1:00 " DST"
+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 1951 only - Oct 8 0:00 0 -
+Rule Turkey 1962 only - Jul 15 0:00 1:00 " DST"
+Rule Turkey 1962 only - Oct 8 0:00 0 -
+Rule Turkey 1964 only - May 15 0:00 1:00 " DST"
+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 - Oct Sun>=2 0:00 0 -
+Rule Turkey 1973 only - Jun 3 1:00 1:00 " DST"
+Rule Turkey 1973 only - Nov 4 3:00 0 -
+Rule Turkey 1974 only - Mar 31 2:00 1:00 " DST"
+Rule Turkey 1974 only - Nov 3 5:00 0 -
+Rule Turkey 1975 only - Mar 30 0:00 1:00 " DST"
+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 1977 only - Oct 16 0:00 0 -
+Rule Turkey 1979 1980 - Apr Sun>=1 3:00 1:00 " DST"
+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 1983 only - Oct 2 0:00 0 -
+Rule Turkey 1985 only - Apr 20 0:00 1:00 " DST"
+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
+Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
+# This link is for backward compatibility with the old naming convention.
+Link Europe/Istanbul Turkey
+
+# 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 -
+# 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:00 - EET 1930 Jun 21
+ 3:00 Russia MS%s 1990 Jul 17
+ 2:00 M-Eur EET%s
+
###############################################################################
# One source shows that Bulgaria, Cyprus, Finland, and Greece observe DST from
@@ -165,21 +1703,21 @@ Link MET CET
# From: seismo!mcvax!cgcha!wtho (Tom Hofmann)
# Message-Id: <8701281556.AA22174@cgcha.uucp>
# ...
-#
+#
# ...the European time rules are...standardized since 1981, when
# most European coun[tr]ies started DST. Before that year, only
# a few countries (UK, France, Italy) had DST, each according
# to own national rules. In 1981, however, DST started on
# 'Apr firstSun', and not on 'Mar lastSun' as in the following
# years...
-# But also since 1981 there are some more national exceptions
-# than listed in 'europe': Switzerland, for example, joined DST
-# one year later, Denmark ended DST on 'Oct 1' instead of 'Sep
+# But also since 1981 there are some more national exceptions
+# than listed in 'europe': Switzerland, for example, joined DST
+# one year later, Denmark ended DST on 'Oct 1' instead of 'Sep
# lastSun' in 1981---I don't know how they handle now.
-#
+#
# Finally, DST ist always from 'Apr 1' to 'Oct 1' in the
-# Soviet Union (as far as I know).
-#
+# Soviet Union (as far as I know).
+#
# Tom Hofmann, Scientific Computer Center, CIBA-GEIGY AG,
# 4002 Basle, Switzerland
# UUCP: ...!mcvax!cernvax!cgcha!wtho
@@ -188,11 +1726,11 @@ Link MET CET
# Date: Wed, 4 Feb 87 22:35:22 +0100
# From: seismo!mcvax!cwi.nl!dik (Dik T. Winter)
# ...
-#
+#
# The information from Tom Hofmann is (as far as I know) not entirely correct.
# After a request from chongo at amdahl I tried to retrieve all information
# about DST in Europe. I was able to find all from about 1969.
-#
+#
# ...standardization on DST in Europe started in about 1977 with switches on
# first Sunday in April and last Sunday in September...
# In 1981 UK joined Europe insofar that
@@ -200,7 +1738,7 @@ Link MET CET
# the whole of Europe used DST, with switch dates April 1 and October 1 in
# the Sov[i]et Union. In 1985 the SU reverted to standard Europe[a]n switch
# dates...
-#
+#
# It should also be remembered that time-zones are not constants; e.g.
# Portugal switched in 1976 from MET (or CET) to WET with DST...
# Note also that though there were rules for switch dates not
@@ -209,7 +1747,7 @@ Link MET CET
# assumed that DST is 1 hour ahead of normal time, this need not be the
# case; at least in the Netherlands there have been times when DST was 2 hours
# in advance of normal time.
-#
+#
# ...
# dik t. winter, cwi, amsterdam, nederland
# INTERNET : dik@cwi.nl
@@ -222,3 +1760,21 @@ Link MET CET
# ...
# Monaco: has same DST as France.
# ...
+
+# ...
+# Date: Fri, 3 Sep 93 13:43:41 BST
+# From: Peter Ilieve <peter@memex.co.uk>
+# ...
+# Turning to Europe, I now have a copy of the `Sixth Council Directive 92/20/EEC
+# of 26 March 1992 on summertime arrangements'. This only covers 1993 and
+# 1994, a seventh one is in the works but I doubt that the algorithm will
+# change. This says summertime starts at 01:00 GMT on the last Sunday in March
+# and ends at 01:00 GMT on the last Sunday in September, except for the UK
+# and Eire where it ends at 01:00 GMT on the fourth Sunday in October.
+# It says the arrangements for 1995 onwards will be decided by 1 January 1994,
+# but as the sixth directive was supposed to appear by 1 Jan 92 and didn't
+# arrive til March I wouldn't hold your breath.
+#
+# The first summertime directive was adopted in 1980, although the UK didn't
+# seem to use it until 1981. I suspect it would be safe to move your start
+# dates for the -Eur rules back to 1981.
diff --git a/share/zoneinfo/datfiles/factory b/share/zoneinfo/datfiles/factory
index c1c38c180ca8..aefee691346a 100644
--- a/share/zoneinfo/datfiles/factory
+++ b/share/zoneinfo/datfiles/factory
@@ -1,8 +1,9 @@
-# @(#)factory 1.1
+# $Id: factory,v 1.3 1993/11/17 02:27:04 ache Exp $
+# From ado: @(#)factory 7.1
# For companies who don't want to put time zone specification in
# their installation procedures. When users run date, they'll get the message.
# Also useful for the "comp.sources" version.
# Zone NAME GMTOFF RULES FORMAT
-Zone Factory 0 - "Local time zone must be set--see zic manual page"
+Zone Factory 0 - "See zic(8) or link /etc/localtime directly"
diff --git a/share/zoneinfo/datfiles/leapseconds b/share/zoneinfo/datfiles/leapseconds
index 225eb01132ae..d610692f9480 100644
--- a/share/zoneinfo/datfiles/leapseconds
+++ b/share/zoneinfo/datfiles/leapseconds
@@ -1,7 +1,15 @@
-# @(#)leapseconds 4.1
+# @(#)leapseconds 7.7
# Allowance for leapseconds added to each timezone file.
+# The International Earth Rotation Service periodically uses leap seconds
+# to keep UTC to within 0.9 s of TAI (atomic time); see
+# Terry J Quinn, The BIPM and the accurate measure of time,
+# Proc IEEE 79, 7 (July 1991), 894-905.
+# There were no leap seconds before 1972, because the official mechanism
+# accounting for the discrepancy between atomic time and the earth's rotation
+# did not exist until the early 1970s.
+
# The correction (+ or -) is made at the given time, so lines
# will typically look like:
# Leap YEAR MON DAY 23:59:60 + R/S
@@ -26,3 +34,8 @@ Leap 1982 Jun 30 23:59:60 + S
Leap 1983 Jun 30 23:59:60 + S
Leap 1985 Jun 30 23:59:60 + S
Leap 1987 Dec 31 23:59:60 + S
+Leap 1989 Dec 31 23:59:60 + S
+Leap 1990 Dec 31 23:59:60 + S
+Leap 1992 Jun 30 23:59:60 + S
+Leap 1993 Jun 30 23:59:60 + S
+Leap 1994 Jun 30 23:59:60 + S
diff --git a/share/zoneinfo/datfiles/northamerica b/share/zoneinfo/datfiles/northamerica
index 53a1df126586..bdaeeed1f806 100644
--- a/share/zoneinfo/datfiles/northamerica
+++ b/share/zoneinfo/datfiles/northamerica
@@ -1,4 +1,9 @@
-# @(#)northamerica 4.8
+# @(#)northamerica 7.8
+# also includes Central America and the Caribbean
+
+# 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).
###############################################################################
@@ -35,12 +40,12 @@ Rule US 1987 max - Apr Sun>=1 2:00 1:00 D
# From Bob Devine (January 28, 1988):
# ...Alaska (and Hawaii) had the timezone names changed in 1967.
-# old new
+# old new
# Pacific Standard Time(PST) -same-
# Yukon Standard Time(YST) -same-
# Central Alaska S.T. (CAT) Alaska-Hawaii St[an]dard Time (AHST)
# Nome Standard Time (NT) Bering Standard Time (BST)
-#
+#
# ...Alaska's timezone lines were redrawn in 1983 to give only 2 tz.
# The YST zone now covers nearly all of the state, AHST just part
# of the Aleutian islands. No DST.
@@ -105,19 +110,26 @@ Rule US 1987 max - Apr Sun>=1 2:00 1:00 D
# can't tell if we should give Yukon time or Alaska-Hawaii time for "old"
# times).
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone US/Eastern -5:00 US E%sT
-Zone US/Central -6:00 US C%sT
-Zone US/Mountain -7:00 US M%sT
-Zone US/Pacific -8:00 US P%sT
-Zone US/Alaska -9:00 US AK%sT # Abbreviation per USNO
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/New_York -5:00 US E%sT
+Zone America/Chicago -6:00 US C%sT
+Zone America/Denver -7:00 US M%sT
+Zone America/Los_Angeles -8:00 US P%sT
+Zone America/Anchorage -9:00 US AK%sT
+ # AK%sT is the abbreviation per USNO
# Mainland US areas that are always Standard as of 1986.
-Zone US/East-Indiana -5:00 US E%sT 1946
- -5:00 - EST # Always EST as of 1986
-Zone US/Arizona -7:00 US M%sT 1946
- -7:00 - MST # Always MST as of 1986
+Zone America/Fort_Wayne -5:00 US E%sT 1946
+ -5:00 - EST # Always EST as of 1986
+# From Arthur David Olson (October 28, 1991):
+# An article on page A3 of the Sunday, October 27, 1991 Washington Post
+# notes that Starke County switched from Central time to Eastern time as of
+# October 27, 1991.
+Zone America/Knox_IN -6:00 US C%sT 1991 Oct 27 2:00
+ -5:00 - EST # Always EST as of 1991
+Zone America/Phoenix -7:00 US M%sT 1946
+ -7:00 - MST # Always MST as of 1986
# From Arthur David Olson (February 13, 1988):
# However. . .a writer from the Inter Tribal Council of Arizona, Inc.,
@@ -126,25 +138,32 @@ Zone US/Arizona -7:00 US M%sT 1946
# large size and location in three states." (The "only" means that other
# tribal nations don't use DST.)
-Link US/Mountain Navajo
+Link America/Denver Navajo
# From Bob Devine (January 28, 1988):
# Michigan didn't observe DST from 1968 to 1973.
-Zone US/Michigan -5:00 US E%sT 1968
- -5:00 - EST 1973
- -5:00 US E%sT
+Zone America/Detroit -5:00 US E%sT 1968
+ -5:00 - EST 1973
+ -5:00 US E%sT
# Samoa just changes names. No DST, per Naval Observatory.
-Zone US/Samoa -11:00 - NST 1967 Apr 1 # N=Nome
- -11:00 - BST 1983 Nov 30 # B=Bering
- -11:00 - SST # S=Samoa
+Zone Pacific/Samoa -11:22:48 - LMT 1911
+ -11:30 - SST 1950
+ -11:00 - NST 1967 Apr # N=Nome
+ -11:00 - BST 1983 Nov 30 # B=Bering
+ -11:00 - SST # S=Samoa
+
+Zone Pacific/Midway -11:49:28 - LMT 1901
+ -11:00 - NST 1967 Apr # N=Nome
+ -11:00 - BST 1983 Nov 30 # B=Bering
+ -11:00 - SST # S=Samoa
# Aleutian has a name change. DST, per Naval Observatory.
-Zone US/Aleutian -10:00 US AH%sT 1983 Nov 30
- -10:00 US HA%sT
+Zone America/Atka -10:00 US AH%sT 1983 Nov 30
+ -10:00 US HA%sT
# From Arthur David Olson:
# And then there's Hawaii.
@@ -152,24 +171,42 @@ Zone US/Aleutian -10:00 US AH%sT 1983 Nov 30
# Standard time was change by half an hour in 1947;
# it's always standard as of 1986.
-Zone US/Hawaii -10:30 US H%sT 1933 Apr 30 2:00
- -10:30 1:00 HDT 1933 May 1 2:00
- -10:30 US H%sT 1947 Jun 8 2:00
+Zone Pacific/Honolulu -10:30 US H%sT 1933 Apr 30 2:00
+ -10:30 1:00 HDT 1933 May 1 2:00
+ -10:30 US H%sT 1947 Jun 8 2:00
-10:00 - HST
+# Navassa
+# no information; probably like US/Eastern
+
+
# Old names, for S5 users
-# Link LINK-FROM LINK-TO
-# Link US/Eastern EST5EDT
-# Link US/Central CST6CDT
-# Link US/Mountain MST7MDT
-# Link US/Pacific PST8PDT
-# Link US/East-Indiana EST
-# Link US/Arizona MST
-# Link US/Hawaii HST
+# Link LINK-FROM LINK-TO
+Link America/New_York EST5EDT
+Link America/Chicago CST6CDT
+Link America/Denver MST7MDT
+Link America/Los_Angeles PST8PDT
+Link America/Fort_Wayne EST
+Link America/Phoenix MST
+Link Pacific/Honolulu HST
################################################################################
+
+# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+# 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 abbreviation SPST for St Pierre Standard Time; SPDT likewise.
+# Corrections are welcome!
+#
+# See the `africa' file for Zone naming conventions.
+
+
+
# Canada
# Canada is reportedly lots easier than the US--leastways since 1951.
@@ -206,24 +243,255 @@ Zone US/Hawaii -10:30 US H%sT 1933 Apr 30 2:00
# From Arthur David Olson (January 21, 1989):
# April 3 fell on a Sunday in 1988; October 29 fell on a Sunday in 1989. Ahem.
# Note claim that there's double DST in Newfoundland and that Yukon should
-# be same as Pacific. Stick with rules posted in 1988 until more authoritative
-# information is available.
+# be same as Pacific.
+
+# From W. Jones (jones@skdad.usask.ca) (November 6, 1992):
+# The. . .below is based on information I got from our law library, the
+# provincial archives, and the provincial Community Services department.
+# A precise history would require digging through newspaper archives, and
+# since you didn't say what you wanted, I didn't bother.
+#
+# Saskatchewan is split by a time zone meridian (105W) and over the years
+# the boundary became pretty ragged as communities near it reevaluated
+# their affiliations in one direction or the other. In 1965 a provincial
+# referendum favoured legislating common time practices.
+#
+# On 15 April 1966 the Time Act (c. T-14, Revised Statutes of
+# Saskatchewan 1978) was proclaimed, and established that the eastern
+# part of Saskatchewan would use CST year round, that districts in
+# northwest Saskatchewan would by default follow CST but could opt to
+# follow Mountain Time rules (thus 1 hour difference in the winter and
+# zero in the summer), and that districts in southwest Saskatchewan would
+# by default follow MT but could opt to follow CST.
+#
+# It took a few years for the dust to settle (I know one story of a town
+# on one time zone having its school in another, such that a mom had to
+# serve her family lunch in two shifts), but presently it seems that only
+# a few towns on the border with Alberta (e.g. Lloydminster) follow MT
+# rules any more; all other districts appear to have used CST year round
+# since sometime in the 1960s.
+#
+# Here's how I would summarize things. Establish a "Saskatchewan" CST
+# time zone, and note that it officially exists as of 15 April 1966. Any
+# current exceptions can put themselves in the "Mountain" zone, since
+# those are the rules they follow. Any past exceptions can be forgotten,
+# since that's what those who live here have done.
+
+# From Arthur David Olson (November 21, 1992):
+# East-Saskatchewan kept to avoid problems for folks using that zone by name;
+# plain Saskatchewan added.
+
+
+# From Shanks (1991):
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule StJohns 1884 only - Jan 1 0:00 0 S
+Rule StJohns 1917 1918 - Apr Sun>=8 2:00 1:00 D
+Rule StJohns 1917 only - Sep 17 2:00 0 S
+Rule StJohns 1918 only - Oct 31 2:00 0 S
+Rule StJohns 1919 only - May 5 23:00 1:00 D
+Rule StJohns 1919 only - Aug 12 23:00 0 S
+Rule StJohns 1920 1935 - May Sun>=1 23:00 1:00 D
+Rule StJohns 1920 1935 - Oct lastSun 23:00 0 S
+Rule StJohns 1936 1942 - May Mon>=9 0:00 1:00 D
+Rule StJohns 1936 1941 - Oct Mon>=1 0:00 0 S
+Rule StJohns 1945 only - Sep 30 2:00 0 S
+Rule StJohns 1946 1950 - May Sun>=8 2:00 1:00 D
+Rule StJohns 1946 1950 - Oct Sun>=2 2:00 0 S
+Rule StJohns 1951 1986 - Apr lastSun 2:00 1:00 D
+Rule StJohns 1951 1959 - Sep lastSun 2:00 0 S
+Rule StJohns 1960 max - Oct lastSun 2:00 0 S
+Rule StJohns 1987 only - Apr Sun>=1 2:00 1:00 D
+Rule StJohns 1988 only - Apr Sun>=1 2:00 2:00 D
+Rule StJohns 1989 max - Apr Sun>=1 2:00 1:00 D
+# St John's has an apostrophe, but Posix file names can't have apostrophes.
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/St_Johns -3:30:52 - LMT 1884
+ -3:31 StJohns N%sT 1935 Mar 30
+ -3:30 StJohns N%sT
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Halifax 1902 only - Jun 15 0:00 0 S
+Rule Halifax 1916 only - Apr 1 0:00 1:00 D
+Rule Halifax 1916 only - Oct 1 0:00 0 S
+Rule Halifax 1918 only - Apr 14 2:00 1:00 D
+Rule Halifax 1918 only - Oct 31 2:00 0 S
+Rule Halifax 1920 only - May 9 0:00 1:00 D
+Rule Halifax 1920 only - Aug 29 0:00 0 S
+Rule Halifax 1921 only - May 6 0:00 1:00 D
+Rule Halifax 1921 1922 - Sep 5 0:00 0 S
+Rule Halifax 1922 only - Apr 30 0:00 1:00 D
+Rule Halifax 1923 1925 - May Sun>=1 0:00 1:00 D
+Rule Halifax 1923 only - Sep 4 0:00 0 S
+Rule Halifax 1924 only - Sep 15 0:00 0 S
+Rule Halifax 1925 only - Sep 28 0:00 0 S
+Rule Halifax 1926 only - May 16 0:00 1:00 D
+Rule Halifax 1926 only - Sep 13 0:00 0 S
+Rule Halifax 1927 only - May 1 0:00 1:00 D
+Rule Halifax 1927 only - Sep 26 0:00 0 S
+Rule Halifax 1928 1931 - May Sun>=8 0:00 1:00 D
+Rule Halifax 1928 only - Sep 9 0:00 0 S
+Rule Halifax 1929 only - Sep 3 0:00 0 S
+Rule Halifax 1930 only - Sep 15 0:00 0 S
+Rule Halifax 1931 1932 - Sep Mon>=24 0:00 0 S
+Rule Halifax 1933 only - Apr 30 0:00 1:00 D
+Rule Halifax 1933 only - Oct 2 0:00 0 S
+Rule Halifax 1934 only - May 20 0:00 1:00 D
+Rule Halifax 1934 only - Sep 16 0:00 0 S
+Rule Halifax 1935 only - Jun 2 0:00 1:00 D
+Rule Halifax 1935 only - Sep 30 0:00 0 S
+Rule Halifax 1936 only - Jun 1 0:00 1:00 D
+Rule Halifax 1936 only - Sep 14 0:00 0 S
+Rule Halifax 1937 1938 - May Sun>=1 0:00 1:00 D
+Rule Halifax 1937 1941 - Sep Mon>=24 0:00 0 S
+Rule Halifax 1939 only - May 28 0:00 1:00 D
+Rule Halifax 1940 1941 - May Sun>=1 0:00 1:00 D
+Rule Halifax 1942 only - Feb 9 2:00 1:00 D
+Rule Halifax 1945 1959 - Sep lastSun 2:00 0 S
+Rule Halifax 1946 1959 - Apr lastSun 2:00 1:00 D
+Rule Halifax 1962 1986 - Apr lastSun 2:00 1:00 D
+Rule Halifax 1962 max - Oct lastSun 2:00 0 S
+Rule Halifax 1987 max - Apr Sun>=1 2:00 1:00 D
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Halifax -4:14:24 - LMT 1902 Jun 15
+ -4:00 Halifax A%sT
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Mont 1884 only - Jan 1 0:00 0 S
+Rule Mont 1917 only - Mar 25 2:00 1:00 D
+Rule Mont 1917 only - Apr 24 0:00 0 S
+Rule Mont 1918 only - Apr 14 2:00 1:00 D
+Rule Mont 1918 only - Oct 31 2:00 0 S
+Rule Mont 1919 only - Mar 31 2:30 1:00 D
+Rule Mont 1919 only - Oct 25 2:30 0 S
+Rule Mont 1920 only - May 2 2:30 1:00 D
+Rule Mont 1920 only - Oct 3 2:30 0 S
+Rule Mont 1921 only - May 1 2:00 1:00 D
+Rule Mont 1921 only - Oct 2 2:30 0 S
+Rule Mont 1922 only - Apr 30 2:00 1:00 D
+Rule Mont 1922 only - Oct 1 2:30 0 S
+Rule Mont 1924 only - May 17 2:00 1:00 D
+Rule Mont 1924 1926 - Sep lastSun 2:30 0 S
+Rule Mont 1925 1926 - May Sun>=1 2:00 1:00 D
+Rule Mont 1927 only - May 1 0:00 1:00 D
+Rule Mont 1927 1932 - Sep Sun>=25 0:00 0 S
+Rule Mont 1928 1931 - Apr Sun>=25 0:00 1:00 D
+Rule Mont 1932 only - May 1 0:00 1:00 D
+Rule Mont 1933 1940 - Apr Sun>=24 0:00 1:00 D
+Rule Mont 1933 only - Oct 1 0:00 0 S
+Rule Mont 1934 1939 - Sep Sun>=24 0:00 0 S
+Rule Mont 1945 1948 - Sep lastSun 2:00 0 S
+Rule Mont 1946 1986 - Apr lastSun 2:00 1:00 D
+Rule Mont 1949 1950 - Oct lastSun 2:00 0 S
+Rule Mont 1951 1956 - Sep lastSun 2:00 0 S
+Rule Mont 1957 max - Oct lastSun 2:00 0 S
+Rule Mont 1987 max - Apr Sun>=1 2:00 1:00 D
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Montreal -4:54:16 - LMT 1884
+ -5:00 Mont E%sT
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Canada 1969 max - Oct lastSun 2:00 0 S
-Rule Canada 1969 1986 - Apr lastSun 2:00 1:00 D
-Rule Canada 1987 max - Apr Sun>=1 2:00 1:00 D
-
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-# Bob Devine says that DST *is* observed in Newfoundland
-Zone Canada/Newfoundland -3:30 Canada N%sT
-Zone Canada/Atlantic -4:00 Canada A%sT
-Zone Canada/Eastern -5:00 Canada E%sT
-Zone Canada/Central -6:00 Canada C%sT
-Zone Canada/East-Saskatchewan -6:00 - CST # No DST as of 1987
-Zone Canada/Mountain -7:00 Canada M%sT
-Zone Canada/Pacific -8:00 Canada P%sT
-Zone Canada/Yukon -9:00 Canada Y%sT
+Rule Winn 1887 only - Jul 16 0:00 0 S
+Rule Winn 1916 only - Apr 23 0:00 1:00 D
+Rule Winn 1916 only - Sep 17 0:00 0 S
+Rule Winn 1918 only - Apr 14 2:00 1:00 D
+Rule Winn 1918 only - Oct 31 2:00 0 S
+Rule Winn 1937 only - May 16 2:00 1:00 D
+Rule Winn 1937 only - Sep 23 2:00 0 S
+Rule Winn 1942 only - Feb 9 2:00 1:00 D
+Rule Winn 1945 only - Sep lastSun 2:00 0 S
+Rule Winn 1946 only - May 12 2:00 1:00 D
+Rule Winn 1946 only - Oct 13 2:00 0 S
+Rule Winn 1947 1949 - Apr lastSun 2:00 1:00 D
+Rule Winn 1947 1958 - Sep lastSun 2:00 0 S
+Rule Winn 1948 only - May 1 2:00 1:00 D
+Rule Winn 1948 1960 - Apr lastSun 2:00 1:00 D
+Rule Winn 1959 only - Oct lastSun 2:00 0 S
+Rule Winn 1960 only - Sep lastSun 2:00 0 S
+Rule Winn 1963 only - Apr lastSun 2:00 1:00 D
+Rule Winn 1963 only - Sep lastSun 2:00 0 S
+Rule Winn 1966 1986 - Apr lastSun 2:00 1:00 D
+Rule Winn 1966 max - Sep lastSun 2:00 0 S
+Rule Winn 1987 max - Apr Sun>=1 2:00 1:00 D
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Winnipeg -6:28:36 - LMT 1887 Jul 16
+ -6:00 Winn C%sT
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Regina 1905 only - Sep 1 0:00 0 S
+Rule Regina 1918 only - Apr 14 2:00 1:00 D
+Rule Regina 1918 only - Oct 31 2:00 0 S
+Rule Regina 1930 1934 - May Sun>=1 0:00 1:00 D
+Rule Regina 1930 1934 - Oct Sun>=1 0:00 0 S
+Rule Regina 1937 1941 - Apr Sun>=8 0:00 1:00 D
+Rule Regina 1937 only - Oct Sun>=8 0:00 0 S
+Rule Regina 1938 only - Oct Sun>=1 0:00 0 S
+Rule Regina 1939 1941 - Oct Sun>=8 0:00 0 S
+Rule Regina 1942 only - Feb 9 2:00 1:00 D
+Rule Regina 1945 only - Sep lastSun 2:00 0 S
+Rule Regina 1946 only - Apr 14 2:00 1:00 D
+Rule Regina 1946 only - Oct 13 2:00 0 S
+Rule Regina 1947 1960 - Apr lastSun 2:00 1:00 D
+Rule Regina 1947 1959 - Sep lastSun 2:00 0 S
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Regina -6:58:36 - LMT 1905 Sep
+ -7:00 Regina M%sT 1966 Apr 15
+ -6:00 - CST
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Edm 1906 only - Sep 1 0:00 0 S
+Rule Edm 1918 1919 - Apr Sun>=8 2:00 1:00 D
+Rule Edm 1918 only - Oct 31 2:00 0 S
+Rule Edm 1919 only - May 27 2:00 0 S
+Rule Edm 1920 1923 - Apr lastSun 2:00 1:00 D
+Rule Edm 1920 only - Oct lastSun 2:00 0 S
+Rule Edm 1921 1923 - Sep lastSun 2:00 0 S
+Rule Edm 1942 only - Feb 9 2:00 1:00 D
+Rule Edm 1945 only - Sep lastSun 2:00 0 S
+Rule Edm 1947 only - Apr lastSun 2:00 1:00 D
+Rule Edm 1947 only - Sep lastSun 2:00 0 S
+Rule Edm 1967 only - Apr lastSun 2:00 1:00 D
+Rule Edm 1967 only - Oct lastSun 2:00 0 S
+Rule Edm 1969 only - Apr lastSun 2:00 1:00 D
+Rule Edm 1969 only - Oct lastSun 2:00 0 S
+Rule Edm 1972 1986 - Apr lastSun 2:00 1:00 D
+Rule Edm 1972 max - Oct lastSun 2:00 0 S
+Rule Edm 1987 max - Apr Sun>=1 2:00 1:00 D
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Edmonton -7:33:52 - LMT 1906 Sep
+ -7:00 Edm M%sT
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Vanc 1884 only - Jan 1 0:00 0 S
+Rule Vanc 1918 only - Apr 14 2:00 1:00 D
+Rule Vanc 1918 only - Oct 31 2:00 0 S
+Rule Vanc 1942 only - Feb 9 2:00 1:00 D
+Rule Vanc 1945 only - Sep 30 2:00 0 S
+Rule Vanc 1946 1986 - Apr lastSun 2:00 1:00 D
+Rule Vanc 1946 only - Oct 13 2:00 0 S
+Rule Vanc 1947 1961 - Sep lastSun 2:00 0 S
+Rule Vanc 1962 max - Oct lastSun 2:00 0 S
+Rule Vanc 1987 max - Apr Sun>=1 2:00 1:00 D
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Vancouver -8:12:28 - LMT 1884
+ -8:00 Vanc P%sT
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Yukon 1900 only - Jan 1 0:00 0 S
+Rule Yukon 1918 only - Apr 14 2:00 1:00 D
+Rule Yukon 1918 only - Oct 27 2:00 0 S
+Rule Yukon 1919 only - May 25 2:00 1:00 D
+Rule Yukon 1919 only - Nov 1 0:00 0 S
+Rule Yukon 1942 only - Feb 9 2:00 1:00 D
+Rule Yukon 1965 only - Apr 25 0:00 1:00 D
+Rule Yukon 1965 only - Oct 31 2:00 0 S
+Rule Yukon 1980 1986 - Apr lastSun 2:00 1:00 D
+Rule Yukon 1980 max - Oct lastSun 2:00 0 S
+Rule Yukon 1987 max - Apr Sun>=1 2:00 1:00 D
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Whitehorse -9:00:12 - LMT 1900 Aug 20
+ -9:00 Yukon Y%sT 1966 Jul
+ -8:00 Yukon P%sT
+# Parts of Yukon (e.g. Dawson) didn't switch to -8:00 until 1973 Oct 28.
###############################################################################
@@ -240,11 +508,11 @@ Zone Canada/Yukon -9:00 Canada Y%sT
# From Bob Devine (January 28, 1988):
# The Federal District (where Mexico City is) has observed [DST] several
# times but not recently.
-#
+#
# I don't where to drawn the line in the North Baja area. 28th latitude
# sounds good -- but it may be higher (how far [d]o radio stations from
# San Diego affect culture?).
-#
+#
# The dates of DST probably go back to 1981. The rules are the same as
# US's. This is going to be a headache for US presidential electi[o]n years!
@@ -275,30 +543,140 @@ Zone Canada/Yukon -9:00 Canada Y%sT
# USNO claims there should be four Mexican zones rather than three:
# a zone that's GMT-8 with DST; a zone that's always GMT-7;
# a zone that's GMT-6 with DST; and a zone that's always GMT-6.
-# Wait for more authoritative information before changing.
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Mexico 1987 max - Oct lastSun 2:00 0 S
-Rule Mexico 1987 max - Apr Sun>=1 2:00 1:00 D
+# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+# Shanks also says there are four zones, but disagrees about the fourth.
+# Instead of GMT-6 with DST, he says there's GMT-8 without DST.
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone Mexico/BajaNorte -8:00 Mexico P%sT
-Zone Mexico/BajaSur -7:00 - MST
-Zone Mexico/General -6:00 - CST
+# From Shanks (1991):
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Mexico 1922 only - Jan 1 0:00 0 S
+Rule Mexico 1939 only - Feb 5 0:00 1:00 D
+Rule Mexico 1939 only - Jun 25 0:00 0 S
+Rule Mexico 1940 only - Dec 9 0:00 1:00 D
+Rule Mexico 1941 only - Apr 1 0:00 0 S
+Rule Mexico 1943 only - Dec 16 0:00 1:00 D
+Rule Mexico 1944 only - May 1 0:00 0 S
+Rule Mexico 1950 only - Feb 12 0:00 1:00 D
+Rule Mexico 1950 only - Jul 30 0:00 0 S
+Rule BajaN 1950 1966 - Apr lastSun 2:00 1:00 D
+Rule BajaN 1950 1961 - Sep lastSun 2:00 0 S
+Rule BajaN 1961 1966 - Oct lastSun 2:00 0 S
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Mexico_City -6:36:36 - LMT 1922 Jan 1 0:23:24
+ -7:00 - MST 1927 Jun 10 23:00
+ -6:00 - CST 1930 Nov 15
+ -7:00 - MST 1931 May 1 23:00
+ -6:00 - CST 1931 Oct
+ -7:00 - MST 1932 Mar 30 23:00
+ -6:00 Mexico C%sT
+Zone America/Mazatlan -7:05:40 - LMT 1921 Dec 31 23:54:20
+ -7:00 - MST 1927 Jun 10 23:00
+ -6:00 - CST 1930 Nov 15
+ -7:00 - MST 1931 May 1 23:00
+ -6:00 - CST 1931 Oct
+ -7:00 - MST 1932 Mar 30 23:00
+ -6:00 - CST 1942 Apr
+ -7:00 - MST 1949 Jan 14
+ -8:00 - PST 1970
+ -7:00 - MST
+Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56
+ -8:00 - PST 1927 Jun 10 23:00
+ -7:00 - MST 1930 Nov 16
+ -8:00 - PST 1942 Apr
+ -7:00 - MST 1949 Jan 14
+ -8:00 BajaN P%sT 1967 Apr lastSun 2:00
+ -8:00 US P%sT
+Zone America/Ensenada -7:46:28 - LMT 1922 Jan 1 0:13:32
+ -8:00 - PST 1927 Jun 10 23:00
+ -7:00 - MST 1930 Nov 16
+ -8:00 - PST 1942 Apr
+ -7:00 - MST 1949 Jan 14
+ -8:00 - PST
+#
+# Revillagigedo Is
+# no information
###############################################################################
-# Jamaica
+# Anguilla
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Anguilla -4:12:16 - LMT 1912 Mar 2
+ -4:00 - AST
-# From Bob Devine (January 28, 1988):
-# Follows US rules.
+# Antigua and Barbuda
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Antigua -4:07:12 - LMT 1912 Mar 2
+ -5:00 - EST 1951
+ -4:00 - AST
-# From U. S. Naval Observatory (January 19, 1989):
-# JAMAICA 5 H BEHIND UTC
-
-Link US/Eastern Jamaica
-
-###############################################################################
+# Bahamas
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Bahamas 1912 max - Mar 2 0:00 0 S
+Rule Bahamas 1964 max - Oct lastSun 2:00 0 S
+Rule Bahamas 1964 1986 - Apr lastSun 2:00 1:00 D
+Rule Bahamas 1987 max - Apr Sun>=1 2:00 1:00 D
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Nassau -5:09:24 - LMT 1912 Mar 2
+ -5:00 Bahamas E%sT
+
+# Barbados
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Barb 1932 only - Jan 1 0:00 0 S
+Rule Barb 1977 only - Jun 12 2:00 1:00 D
+Rule Barb 1977 1978 - Oct Sun>=1 2:00 0 S
+Rule Barb 1978 1980 - Apr Sun>=15 2:00 1:00 D
+Rule Barb 1979 only - Sep 30 2:00 0 S
+Rule Barb 1980 only - Sep 25 2:00 0 S
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Barbados -3:58:28 - LMT 1924 # Bridgetown
+ -3:58 - BMT 1932 # Bridgetown Mean Time
+ -4:00 Barb A%sT
+
+# Belize
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Belize 1912 only - Apr 1 0:00 0 S
+Rule Belize 1918 1942 - Oct Sun>=2 0:00 0:30 HD
+Rule Belize 1919 1943 - Feb Sun>=9 0:00 0 S
+Rule Belize 1973 only - Dec 5 0:00 1:00 D
+Rule Belize 1974 only - Feb 9 0:00 0 S
+Rule Belize 1982 only - Dec 18 0:00 1:00 D
+Rule Belize 1983 only - Feb 12 0:00 0 S
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Belize -5:52:48 - LMT 1912 Apr
+ -6:00 Belize C%sT
+
+# Bermuda
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Atlantic/Bermuda -4:19:04 - LMT 1930 Jan 1 2:00 # Hamilton
+ -4:00 - AST 1974 Apr 28 2:00
+ -4:00 Bahamas A%sT
+
+# Cayman Is
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown
+ -5:07 - KMT 1912 Feb # Kingston Mean Time
+ -5:00 - EST
+
+# Clipperton
+# no information
+
+# Costa Rica
+# Shanks gives some very odd dates for 1991, and stops there.
+# For now, we won't guess further.
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule CR 1921 only - Jan 15 0:00 0 S
+Rule CR 1979 1980 - Feb lastSun 0:00 1:00 D
+Rule CR 1979 1980 - Jun Sun>=1 0:00 0 S
+Rule CR 1991 only - Jan 19 0:00 1:00 D
+Rule CR 1991 only - Jul 1 0:00 0 S
+# There are too many San Joses elsewhere, so we'll use `Costa Rica'.
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Costa_Rica -5:36:20 - LMT 1890 # San Jose
+ -5:36 - SJMT 1921 Jan 15 # San Jose Mean Time
+ -6:00 CR C%sT
+# Coco
+# no information; probably like America/Costa_Rica
# Cuba
@@ -311,11 +689,195 @@ Link US/Eastern Jamaica
# CUBA 5 H BEHIND UTC
# CUBA 4 H BEHIND UTC MAR 20 - OCT 8
+# From Shanks (1991):
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Cuba 1925 only - Jul 19 12:00 0 S
+Rule Cuba 1928 only - Jun 10 0:00 1:00 D
+Rule Cuba 1928 only - Oct 10 0:00 0 S
+Rule Cuba 1940 1942 - Jun Sun>=1 0:00 1:00 D
+Rule Cuba 1940 1942 - Sep Sun>=1 0:00 0 S
+Rule Cuba 1945 1946 - Jun Sun>=1 0:00 1:00 D
+Rule Cuba 1945 1946 - Sep Sun>=1 0:00 0 S
+Rule Cuba 1965 only - Jun 1 0:00 1:00 D
+Rule Cuba 1965 only - Sep 30 0:00 0 S
+Rule Cuba 1966 only - May 29 0:00 1:00 D
+Rule Cuba 1966 only - Oct 2 0:00 0 S
+Rule Cuba 1967 only - Apr 8 0:00 1:00 D
+Rule Cuba 1967 1968 - Sep Sun>=8 0:00 0 S
+Rule Cuba 1968 only - Apr 14 0:00 1:00 D
+Rule Cuba 1969 1977 - Apr lastSun 0:00 1:00 D
+Rule Cuba 1969 1971 - Oct lastSun 0:00 0 S
+Rule Cuba 1972 1974 - Oct 8 0:00 0 S
+Rule Cuba 1975 1977 - Oct lastSun 0:00 0 S
+Rule Cuba 1978 only - May 7 0:00 1:00 D
+Rule Cuba 1978 1980 - Oct Sun>=8 0:00 0 S
Rule Cuba 1979 1980 - Mar Sun>=15 0:00 1:00 D
-Rule Cuba 1979 1980 - Oct Sun>=8 0:00 0 S
-Rule Cuba 1981 max - May Sun>=8 0:00 1:00 D
+Rule Cuba 1981 1985 - May Sun>=5 0:00 1:00 D
Rule Cuba 1981 max - Oct Sun>=8 0:00 0 S
+Rule Cuba 1986 1989 - Mar Sun>=14 0:00 1:00 D
+Rule Cuba 1990 only - Apr 1 0:00 1:00 D
+Rule Cuba 1991 max - Mar Sun>=14 0:00 1:00 D
+
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Havana -5:29:28 - LMT 1890
+ -5:30 - HMT 1925 Jul 19 12:00 # Havana MT
+ -5:00 Cuba C%sT
-# Zone NAME GMTOFF RULES/SAVE FORMAT
-Zone Cuba -5:00 Cuba C%sT
+# Dominica
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Dominica -4:05:36 - LMT 1911 Jul 1 0:01 # Roseau
+ -4:00 - AST
+
+# Dominican Republic
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule DR 1933 only - Apr 1 12:00 0 S
+Rule DR 1966 only - Oct 30 0:00 1:00 D
+Rule DR 1967 only - Feb 28 0:00 0 S
+Rule DR 1969 1973 - Oct lastSun 0:00 0:30 HD
+Rule DR 1970 only - Feb 21 0:00 0 S
+Rule DR 1971 only - Jan 20 0:00 0 S
+Rule DR 1972 1974 - Jan 21 0:00 0 S
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Santo_Domingo -4:39:36 - LMT 1890
+ -4:40 - SDMT 1933 Apr 1 12:00 # S. Dom. MT
+ -5:00 DR E%sT 1974 Oct 27
+ -4:00 - AST
+
+# El Salvador
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Salv 1921 only - Jan 1 0:00 0 S
+Rule Salv 1987 1988 - May Sun>=1 0:00 1:00 D
+Rule Salv 1987 1988 - Sep lastSun 0:00 0 S
+# There are too many San Salvadors elsewhere, so we'll use `El Salvador'.
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/El_Salvador -5:56:48 - LMT 1921 # San Salvador
+ -6:00 Salv C%sT
+
+# Grenada
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Grenada -4:07:00 - LMT 1911 Jul
+ -4:00 - AST
+
+# Guadeloupe
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Guadeloupe -4:06:08 - LMT 1911 Jun 8 # Pointe a Pitre
+ -4:00 - AST
+
+# Guatemala
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Guat 1918 only - Oct 5 0:00 0 S
+Rule Guat 1973 only - Nov 25 0:00 1:00 D
+Rule Guat 1974 only - Feb 24 0:00 0 S
+Rule Guat 1983 only - May 21 0:00 1:00 D
+Rule Guat 1983 only - Sep 22 0:00 0 S
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Guatemala -6:02:04 - LMT 1918 Oct 5
+ -6:00 Guat C%sT
+
+# Haiti
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Haiti 1917 only - Jan 24 12:00 0 S
+Rule Haiti 1983 only - May 8 0:00 1:00 D
+Rule Haiti 1984 1987 - Apr lastSun 0:00 1:00 D
+Rule Haiti 1983 1987 - Oct lastSun 0:00 0 S
+Rule Haiti 1988 max - Apr Sun>=1 2:00 1:00 D
+Rule Haiti 1988 max - Oct lastSun 2:00 0 S
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Port-au-Prince -4:49:20 - LMT 1890
+ -4:49 - PPMT 1917 Jan 24 12:00 # P-a-P MT
+ -5:00 Haiti E%sT
+
+# Honduras
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Tegucigalpa -5:48:52 - LMT 1921
+ -6:00 Salv C%sT
+
+# Jamaica
+
+# From Bob Devine (January 28, 1988):
+# Follows US rules.
+
+# From U. S. Naval Observatory (January 19, 1989):
+# JAMAICA 5 H BEHIND UTC
+
+# From Shanks (1991):
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Jamaica -5:07:12 - LMT 1890 # Kingston
+ -5:07 - KMT 1912 Feb # Kingston Mean Time
+ -5:00 - EST 1974 Jan 6 2:00
+ -5:00 US E%sT
+
+# Martinique
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Martinique -4:04:20 - LMT 1890 # Fort-de-France
+ -4:04 - FFMT 1911 May # Fort-de-France MT
+ -4:00 - AST 1980 Apr 6
+ -4:00 1:00 ADT 1980 Sep 28
+ -4:00 - AST
+
+# Montserrat
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Montserrat -4:08:52 - LMT 1911 Jul 1 0:01 # Plymouth
+ -4:00 - AST
+
+# Nicaragua
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Nic 1975 only - Feb 16 0:00 0 S
+Rule Nic 1979 1980 - Mar Sun>=16 0:00 1:00 D
+Rule Nic 1979 1980 - Jun Mon>=23 0:00 0 S
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Managua -5:45:08 - LMT 1890
+ -5:45 - MMT 1934 Jun 23 # Managua Mean Time
+ -6:00 - CST 1973 May
+ -5:00 - EST 1975 Feb 16
+ -6:00 Nic C%sT
+
+# Panama
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Panama -5:18:08 - LMT 1890
+ -5:20 - PMT 1908 Apr 22 # Panama Mean Time
+ -5:00 - EST
+
+# Puerto Rico
+# There are too many San Juans elsewhere, so we'll use `Puerto_Rico'.
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Puerto_Rico -4:24:28 - LMT 1899 Mar 28 12:00 # San Juan
+ -4:00 - AST 1942 May 3
+ -4:00 1:00 ADT 1945 Sep 30 2:00
+ -4:00 - AST
+
+# St Kitts-Nevis
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/St_Kitts -4:10:52 - LMT 1912 Mar 2 # Basseterre
+ -4:00 - AST
+
+# St Lucia
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/St_Lucia -4:04:00 - LMT 1890 # Castries
+ -4:04 - CMT 1912 # Castries Mean Time
+ -4:00 - AST
+
+# St Pierre and Miquelon
+# There are too many St Pierres elsewhere, so we'll use `Miquelon'.
+# 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
+
+# St Vincent and the Grenadines
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/St_Vincent -4:04:56 - LMT 1890 # Kingstown
+ -4:05 - KMT 1912 # Kingstown Mean Time
+ -4:00 - AST
+
+# Turks and Caicos
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Grand_Turk -4:44:32 - LMT 1890
+ -5:07 - KMT 1912 Feb # Kingston Mean Time
+ -5:00 - EST 1979 Apr 29 2:00
+ -5:00 US E%sT
+
+# Virgin Is (British and US)
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Virgin -4:19:44 - LMT 1911 Jul # Charlotte Amalie
+ -4:00 - AST
diff --git a/share/zoneinfo/datfiles/pacificnew b/share/zoneinfo/datfiles/pacificnew
index 8e6850c7306b..cd1477cc71f4 100644
--- a/share/zoneinfo/datfiles/pacificnew
+++ b/share/zoneinfo/datfiles/pacificnew
@@ -1,21 +1,26 @@
-# @(#)pacificnew 4.4
+# @(#)pacificnew 7.6
-# From Arthur David Olson (January 18, 1989):
-# On November 10, 1987, the U. S. House of Representatives passed a bill
-# (H.R. 435), the "Uniform Poll Closing Time Act", establishing
-# "Pacific Presidential Election Time"; it was not acted on by the Senate
-# before the end of the 100th Congress and so died.
-# The bill has been reintroduced in the 101st Congress as H. R. 18;
-# H. R. 96 also deals with poll closing time. Either bill would have to be
-# passed by both the House and Senate and signed by the President (or have
-# the President's veto overridden by the House and Senate) before becoming law.
+# From Arthur David Olson (April 5, 1989):
+# On April 5, 1989, the U. S. House of Representatives passed (238-154) a bill
+# establishing "Pacific Presidential Election Time"; it was not acted on
+# by the Senate or signed into law by the President.
+# You might want to change the "PE" (Presidential Election) below to
+# "Q" (Quadrennial) to maintain three-character zone abbreviations.
+# If you're really conservative, you might want to change it to "D".
+# Avoid "L" (Leap Year), which won't be true in 2100.
+
+# If Presidential Election Time is ever established, replace "XXXX" below
+# with the year the law takes effect and uncomment the "##" lines.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Twilite 1989 max - Apr Sun>=1 2:00 1:00 D
-Rule Twilite 1989 max uspres Oct lastSun 2:00 1:00 PE
-Rule Twilite 1989 max uspres Nov Sun>=7 2:00 0 S
-Rule Twilite 1989 max nonpres Oct lastSun 2:00 0 S
+## Rule Twilite XXXX max - Apr Sun>=1 2:00 1:00 D
+## Rule Twilite XXXX max uspres Oct lastSun 2:00 1:00 PE
+## Rule Twilite XXXX max uspres Nov Sun>=7 2:00 0 S
+## Rule Twilite XXXX max nonpres Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone US/Pacific-New -8:00 US P%sT 1989
- -8:00 Twilite P%sT
+## Zone US/Pacific-PET -8:00 US P%sT XXXX
+## -8:00 Twilite P%sT
+
+# For now...
+Link America/Los_Angeles US/Pacific-New ##
diff --git a/share/zoneinfo/datfiles/russia b/share/zoneinfo/datfiles/russia
deleted file mode 100644
index e96dbc71b8d3..000000000000
--- a/share/zoneinfo/datfiles/russia
+++ /dev/null
@@ -1,18 +0,0 @@
-# Change Time Rules for Moscow
-#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETER/S
-# Historic rules
-Rule Moscow 1930 1980 - Jun 21 0:00 0 MSK
-Rule Moscow 1981 1984 - Apr 1 0:00 1 MSD
-Rule Moscow 1981 1984 - Oct 1 0:00 0 MSK
-Rule Moscow 1984 1990 - Mar lastSun 2:00 1 MSD
-Rule Moscow 1985 1990 - Sep lastSun 3:00 0 MSK
-Rule Moscow 1991 only - Mar lastSun 2:00 0 "EET DST"
-Rule Moscow 1991 only - Sep lastSun 3:00 -1 EET
-Rule Moscow 1992 only - Jan 19 2:00 0 MSK
-# Current rules
-Rule Moscow 1992 max - Mar lastSun 2:00 1 MSD
-Rule Moscow 1992 max - Sep lastSun 3:00 0 MSK
-
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone Moscow 3:00 Moscow %s
diff --git a/share/zoneinfo/datfiles/solar87 b/share/zoneinfo/datfiles/solar87
index 50674570549e..a4e2f39df9bc 100644
--- a/share/zoneinfo/datfiles/solar87
+++ b/share/zoneinfo/datfiles/solar87
@@ -1,4 +1,4 @@
-# @(#)solar87 4.1
+# @(#)solar87 7.2
# So much for footnotes about Saudi Arabia.
# Apparent noon times below are for Riyadh; your mileage will vary.
diff --git a/share/zoneinfo/datfiles/solar88 b/share/zoneinfo/datfiles/solar88
index e7f647e1149c..0384b17a07cd 100644
--- a/share/zoneinfo/datfiles/solar88
+++ b/share/zoneinfo/datfiles/solar88
@@ -1,4 +1,4 @@
-# @(#)solar88 4.2
+# @(#)solar88 7.2
# Apparent noon times below are for Riyadh; they're a bit off for other places.
# Times were computed using formulas in the U.S. Naval Observatory's
diff --git a/share/zoneinfo/datfiles/solar89 b/share/zoneinfo/datfiles/solar89
index 4f25170c3ac1..3221f976c3f1 100644
--- a/share/zoneinfo/datfiles/solar89
+++ b/share/zoneinfo/datfiles/solar89
@@ -1,4 +1,4 @@
-# @(#)solar89 1.3
+# @(#)solar89 7.2
# Apparent noon times below are for Riyadh; they're a bit off for other places.
# Times were computed using a formula provided by the U. S. Naval Observatory:
diff --git a/share/zoneinfo/datfiles/southamerica b/share/zoneinfo/datfiles/southamerica
index abab1059de4f..538fb1f3eb6d 100644
--- a/share/zoneinfo/datfiles/southamerica
+++ b/share/zoneinfo/datfiles/southamerica
@@ -1,4 +1,32 @@
-# @(#)southamerica 4.3
+# @(#)southamerica 7.5
+
+# 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):
+# 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.
+# 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)
+# -4:00 AST ADT Andes*, Antilles*, Asuncion*, Atlantic
+# -4:00 CST CDT Chile (conflicts with -6:00)
+# -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
+#
+# See the `africa' file for Zone naming conventions.
# From Guy Harris:
# From Official Airline Guide - Worldwide Edition (1987). Countries not
@@ -10,6 +38,64 @@
###############################################################################
+###############################################################################
+
+# Argentina
+
+# From Bob Devine (January 28, 1988):
+# Argentina: first Sunday in October to first Sunday in April since 1976.
+# Double Summer time from 1969 to 1974. Switches at midnight.
+
+# From U. S. Naval Observatory (January 19, 19889):
+# ARGENTINA 3 H BEHIND UTC
+
+# 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 1989 only - Mar 16 0:00 0 S
+Rule Arg 1989 only - Oct 15 0:00 1:00 D
+Rule Arg 1990 only - Mar 4 0:00 0 S
+# 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
+ -3:00 Arg E%sT
+
+# 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
+
# Brazil
# From Guy Harris:
@@ -43,17 +129,55 @@
# BRAZIL (ESTIMATED)
# BRAZIL 3 H BEHIND UTC FOR MOST MAJOR AIRPORTS.
+# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+# The mayor of Rio recently attempted to change the time zone rules
+# just in his city, in order to leave more summer time for the tourist trade.
+# The rule change lasted only part of the day;
+# the federal government refused to follow the city's rules, and business
+# was in a chaos, so the mayor backed down that afternoon.
+# Shanks claims Acre stopped observing DST after 1988 Feb 7, but it
+# could just be that his table ran out of room. We're extrapolating
+# about time zone changes after 1990 Feb 11.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Brazil 1987 max - Feb Sat<=14 2:00 0 S
-Rule Brazil 1987 max - Oct Sat<=28 2:00 1:00 D
+Rule Brazil 1914 only - Jan 1 0:00 0 S
+Rule Brazil 1931 only - Oct 3 11:00 1 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 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 1964 only - Mar 1 0:00 0 S
+Rule Brazil 1965 only - Jan 31 0:00 1 D
+Rule Brazil 1965 only - Apr 1 0:00 0 S
+Rule Brazil 1965 only - Dec 1 0:00 1 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 1986 only - Mar 15 0:00 0 S
+Rule Brazil 1986 1987 - Oct Sat<=28 0:00 1 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 1990 max - Feb Sun>=8 0:00 0 S
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Noronha -2:09:40 - LMT 1914
+ -2:00 - FST 1963 Dec 9
+ -2:00 Brazil F%sT
+Zone America/Sao_Paulo -3:06:28 - LMT 1914
+ -3:00 Brazil E%sT
+Zone America/Manaus -4:00:04 - LMT 1914
+ -4:00 - WST 1963 Dec 9
+ -4:00 Brazil W%sT
+# Rio_Branco is too ambiguous, since there's a Rio Branco in Uruguay too.
+Zone America/Porto_Acre -4:31:12 - LMT 1914
+ -5:00 - AST 1963 Dec 9
+ -5:00 Brazil A%sT
+#
+# Martin Vaz and Trinidade are like America/Noronha.
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone Brazil/East -3:00 Brazil E%sT
-Zone Brazil/West -4:00 Brazil W%sT
-Zone Brazil/Acre -5:00 Brazil A%sT
-Zone Brazil/DeNoronha -2:00 Brazil F%sT
-
-###############################################################################
# Chile
@@ -66,14 +190,81 @@ Zone Brazil/DeNoronha -2:00 Brazil F%sT
# Switch is at midnight. OAG is right.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Chile 1977 max - Oct Sun>=8 0:00 1:00 D
-Rule Chile 1978 max - Mar Sun>=8 0:00 0 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>=8 0:00 1:00 D
+Rule Chile 1970 max - Mar Sun>=8 0:00 0 S
+# 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
+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
+#
+# Juan Fernandez Is, San Ambrosio, San Felix
+# no information; probably like America/Santiago
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone Chile/Continental -4:00 Chile C%sT
-Zone Chile/EasterIsland -6:00 Chile E%sT
-###############################################################################
+# 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
+# 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: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
+Zone Pacific/Galapagos -5:58:24 - LMT 1931 # Puerto Baquerizo Moreno
+ -5:00 - EST 1986
+ -6:00 - CST
+
+# Falklands
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Falk 1912 only - Mar 12 0:00 0 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
+# 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
+
+# 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
+
+# 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
+
# Paraguay
@@ -85,19 +276,112 @@ Zone Chile/EasterIsland -6:00 Chile E%sT
# PARAGUAY 4 H BEHIND UTC
# PARAGUAY 3 H BEHIND UTC OCT 1, '88-MAR 31, '89
-# From Arthur David Olson (January 21, 1989):
-# Still don't know time of day when switch occurs. Punt.
+# From Shanks (1991):
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Para 1974 only - Apr 1 0:00 0 S
+Rule Para 1975 1978 - Oct 1 0:00 1:00 D
+Rule Para 1975 1978 - Mar 1 0:00 0 S
+# 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
+# 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
-###############################################################################
+# Peru
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Peru 1908 only - Jul 28 0:00 0 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
+# 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
-# Argentina
+# South Georgia
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Atlantic/South_Georgia -2:26:08 - LMT 1890 # Grytviken
+ -2:00 - FST
-# From Bob Devine (January 28, 1988):
-# Argentina: first Sunday in October to first Sunday in April since 1976.
-# Double Summer time from 1969 to 1974. Switches at midnight.
+# South Sandwich Is
+# no information
-# From U. S. Naval Observatory (January 19, 19889):
-# ARGENTINA 3 H BEHIND UTC
+# Suriname
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+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
+
+# Trinidad and Tobago
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Port_of_Spain -4:06:04 - LMT 1912 Mar 2
+ -4:00 - AST
+
+# Uruguay
+# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+# Uruguay wins the prize for the strangest peacetime manipulation of the rules.
+# Your guess is as good as mine for what happened after 1989.
+# From Shanks (1991):
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Uruguay 1920 only - May 1 0:00 0 S
+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 1934 1935 - Apr 1 0:00 0 S
+Rule Uruguay 1936 1941 - Mar lastSun 0:00 0 S
+Rule Uruguay 1936 only - Nov 1 0:00 0:30 HD
+Rule Uruguay 1937 1940 - Oct lastSun 0:00 0:30 HD
+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
+# 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
-# From Arthur David Olson (January 21, 1989):
-# OAG, USNO and Bob have different data. Punt.
+# 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
diff --git a/share/zoneinfo/datfiles/systemv b/share/zoneinfo/datfiles/systemv
index 8dc7bedfb7e3..a6f79d231a71 100644
--- a/share/zoneinfo/datfiles/systemv
+++ b/share/zoneinfo/datfiles/systemv
@@ -1,4 +1,4 @@
-# @(#)systemv 4.1
+# @(#)systemv 7.2
# Old rules, should the need arise.
# No attempt is made to handle Newfoundland, since it cannot be expressed
diff --git a/share/zoneinfo/datfiles/yearistype b/share/zoneinfo/datfiles/yearistype
new file mode 100755
index 000000000000..42ef29bbe879
--- /dev/null
+++ b/share/zoneinfo/datfiles/yearistype
@@ -0,0 +1,18 @@
+#! /bin/sh
+
+: '@(#)yearistype.sh 7.2'
+
+case $#-$2 in
+ 2-odd) case $1 in
+ *[13579]) exit 0 ;;
+ *) exit 1 ;;
+ esac ;;
+ 2-even) case $1 in
+ *[24680]) exit 0 ;;
+ *) exit 1 ;;
+ esac ;;
+ 2-*) echo "$0: wild type - $2" >&2
+ exit 1 ;;
+ *) echo "$0: usage is $0 year type" >&2
+ exit 1 ;;
+esac
diff --git a/share/zoneinfo/ialloc.c b/share/zoneinfo/ialloc.c
index 9e21d1c7b3ca..7dc2f2b494ac 100644
--- a/share/zoneinfo/ialloc.c
+++ b/share/zoneinfo/ialloc.c
@@ -1,66 +1,28 @@
-/*-
- * Copyright (c) 1991 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Arthur David Olson of the National Cancer Institute.
- *
- * 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[] = "@(#)ialloc.c 5.3 (Berkeley) 4/20/91";
-#endif /* not lint */
-
-#ifdef notdef
-static char elsieid[] = "@(#)ialloc.c 8.18";
-#endif
+#ifndef NOID
+static char elsieid[] = "@(#)ialloc.c 8.21";
+#endif /* !defined NOID */
+#endif /* !defined lint */
/*LINTLIBRARY*/
-#include <string.h>
-#include <stdlib.h>
+#include "private.h"
#ifdef MAL
#define NULLMAL(x) ((x) == NULL || (x) == MAL)
-#else /* !defined MAL */
+#endif /* defined MAL */
+#ifndef MAL
#define NULLMAL(x) ((x) == NULL)
#endif /* !defined MAL */
#define nonzero(n) (((n) == 0) ? 1 : (n))
-char * icalloc __P((int nelem, int elsize));
-char * icatalloc __P((char * old, const char * new));
-char * icpyalloc __P((const char * string));
-char * imalloc __P((int n));
-char * irealloc __P((char * pointer, int size));
-void ifree __P((char * pointer));
+char * icalloc P((int nelem, int elsize));
+char * icatalloc P((char * old, const char * new));
+char * icpyalloc P((const char * string));
+char * imalloc P((int n));
+char * irealloc P((char * pointer, int size));
+void ifree P((char * pointer));
char *
imalloc(n)
@@ -69,10 +31,11 @@ const int n;
#ifdef MAL
register char * result;
- result = malloc((size_t) nonzero(n));
+ result = malloc((alloc_size_t) nonzero(n));
return NULLMAL(result) ? NULL : result;
-#else /* !defined MAL */
- return malloc((size_t) nonzero(n));
+#endif /* defined MAL */
+#ifndef MAL
+ return malloc((alloc_size_t) nonzero(n));
#endif /* !defined MAL */
}
@@ -83,7 +46,7 @@ int elsize;
{
if (nelem == 0 || elsize == 0)
nelem = elsize = 1;
- return calloc((size_t) nelem, (size_t) elsize);
+ return calloc((alloc_size_t) nelem, (alloc_size_t) elsize);
}
char *
@@ -93,7 +56,7 @@ const int size;
{
if (NULLMAL(pointer))
return imalloc(size);
- return realloc((void *) pointer, (size_t) nonzero(size));
+ return realloc((genericptr_t) pointer, (alloc_size_t) nonzero(size));
}
char *
@@ -102,7 +65,7 @@ char * const old;
const char * const new;
{
register char * result;
- register oldsize, newsize;
+ register int oldsize, newsize;
newsize = NULLMAL(new) ? 0 : strlen(new);
if (NULLMAL(old))
diff --git a/share/zoneinfo/private.h b/share/zoneinfo/private.h
new file mode 100644
index 000000000000..5af259c62604
--- /dev/null
+++ b/share/zoneinfo/private.h
@@ -0,0 +1,185 @@
+#ifndef PRIVATE_H
+
+#define PRIVATE_H
+
+/*
+** This header is for use ONLY with the time conversion code.
+** There is no guarantee that it will remain unchanged,
+** or that it will remain at all.
+** Do NOT copy it to any system include directory.
+** Thank you!
+*/
+
+/*
+** ID
+*/
+
+#ifndef lint
+#ifndef NOID
+static char privatehid[] = "@(#)private.h 7.5";
+#endif /* !defined NOID */
+#endif /* !defined lint */
+
+/*
+** const
+*/
+
+#ifndef const
+#ifndef __STDC__
+#define const
+#endif /* !defined __STDC__ */
+#endif /* !defined const */
+
+/*
+** void
+*/
+
+#ifndef void
+#ifndef __STDC__
+#ifndef vax
+#ifndef sun
+#define void char
+#endif /* !defined sun */
+#endif /* !defined vax */
+#endif /* !defined __STDC__ */
+#endif /* !defined void */
+
+/*
+** P((args))
+*/
+
+#ifndef P
+#ifdef __STDC__
+#define P(x) x
+#endif /* defined __STDC__ */
+#ifndef __STDC__
+#define ASTERISK *
+#define P(x) ( /ASTERISK x ASTERISK/ )
+#endif /* !defined __STDC__ */
+#endif /* !defined P */
+
+/*
+** genericptr_t
+*/
+
+#ifdef __STDC__
+typedef void * genericptr_t;
+#endif /* defined __STDC__ */
+#ifndef __STDC__
+typedef char * genericptr_t;
+#endif /* !defined __STDC__ */
+
+#include "sys/types.h" /* for time_t */
+#include "stdio.h"
+#include "ctype.h"
+#include "errno.h"
+#include "string.h"
+#include "limits.h" /* for CHAR_BIT */
+#ifndef _TIME_
+#include "time.h"
+#endif /* !defined _TIME_ */
+
+#ifndef remove
+extern int unlink P((const char * filename));
+#define remove unlink
+#endif /* !defined remove */
+
+#ifndef FILENAME_MAX
+
+#ifndef MAXPATHLEN
+#ifdef unix
+#include "sys/param.h"
+#endif /* defined unix */
+#endif /* !defined MAXPATHLEN */
+
+#ifdef MAXPATHLEN
+#define FILENAME_MAX MAXPATHLEN
+#endif /* defined MAXPATHLEN */
+#ifndef MAXPATHLEN
+#define FILENAME_MAX 1024 /* Pure guesswork */
+#endif /* !defined MAXPATHLEN */
+
+#endif /* !defined FILENAME_MAX */
+
+#ifndef EXIT_SUCCESS
+#define EXIT_SUCCESS 0
+#endif /* !defined EXIT_SUCCESS */
+
+#ifndef EXIT_FAILURE
+#define EXIT_FAILURE 1
+#endif /* !defined EXIT_FAILURE */
+
+#ifdef __STDC__
+
+#define alloc_size_t size_t
+#define qsort_size_t size_t
+#define fwrite_size_t size_t
+
+#endif /* defined __STDC__ */
+#ifndef __STDC__
+
+#ifndef alloc_size_t
+#define alloc_size_t unsigned
+#endif /* !defined alloc_size_t */
+
+#ifndef qsort_size_t
+#ifdef USG
+#define qsort_size_t unsigned
+#endif /* defined USG */
+#ifndef USG
+#define qsort_size_t int
+#endif /* !defined USG */
+#endif /* !defined qsort_size_t */
+
+#ifndef fwrite_size_t
+#define fwrite_size_t int
+#endif /* !defined fwrite_size_t */
+
+#ifndef USG
+extern char * sprintf P((char * buf, const char * format, ...));
+#endif /* !defined USG */
+
+#endif /* !defined __STDC__ */
+
+/*
+** Ensure that these are declared--redundantly declaring them shouldn't hurt.
+*/
+
+extern char * getenv P((const char * name));
+extern genericptr_t malloc P((alloc_size_t size));
+extern genericptr_t calloc P((alloc_size_t nelem, alloc_size_t elsize));
+extern genericptr_t realloc P((genericptr_t oldptr, alloc_size_t newsize));
+
+#ifdef USG
+extern void exit P((int s));
+extern void qsort P((genericptr_t base, qsort_size_t nelem,
+ qsort_size_t elsize, int (*comp)()));
+extern void perror P((const char * string));
+extern void free P((char * buf));
+#endif /* defined USG */
+
+#ifndef TRUE
+#define TRUE 1
+#endif /* !defined TRUE */
+
+#ifndef FALSE
+#define FALSE 0
+#endif /* !defined FALSE */
+
+#ifndef INT_STRLEN_MAXIMUM
+/*
+** 302 / 1000 is log10(2.0) rounded up.
+** Subtract one for the sign bit;
+** add one for integer division truncation;
+** add one more for a minus sign.
+*/
+#define INT_STRLEN_MAXIMUM(type) \
+ ((sizeof(type) * CHAR_BIT - 1) * 302 / 1000 + 2)
+#endif /* !defined INT_STRLEN_MAXIMUM */
+
+/*
+** UNIX is a registered trademark of AT&T.
+** VAX is a trademark of Digital Equipment Corporation.
+*/
+
+#endif /* !defined PRIVATE_H */
diff --git a/share/zoneinfo/scheck.c b/share/zoneinfo/scheck.c
index 4d5c43b641ab..4d9616d645df 100644
--- a/share/zoneinfo/scheck.c
+++ b/share/zoneinfo/scheck.c
@@ -1,53 +1,15 @@
-/*-
- * Copyright (c) 1991 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Arthur David Olson of the National Cancer Institute.
- *
- * 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[] = "@(#)scheck.c 5.3 (Berkeley) 4/20/91";
-#endif /* not lint */
-
-#ifdef notdef
-static char elsieid[] = "@(#)scheck.c 8.9";
-#endif
+#ifndef NOID
+static char elsieid[] = "@(#)scheck.c 8.11";
+#endif /* !defined lint */
+#endif /* !defined NOID */
/*LINTLIBRARY*/
-#include <stdio.h>
-#include <ctype.h>
-#include <string.h>
-#include <stdlib.h>
+#include "private.h"
+
+extern char * imalloc P((int n));
+extern void ifree P((char * p));
char *
scheck(string, format)
@@ -60,11 +22,12 @@ const char * const format;
register int c;
register char * result;
char dummy;
+ static char nada[1];
- result = "";
+ result = nada;
if (string == NULL || format == NULL)
return result;
- fbuf = malloc(2 * strlen(format) + 4);
+ fbuf = imalloc(2 * strlen(format) + 4);
if (fbuf == NULL)
return result;
fp = format;
@@ -92,7 +55,7 @@ const char * const format;
*(tp - 1) = '%';
*tp++ = 'c';
*tp = '\0';
- if (sscanf((char *)string, fbuf, &dummy) != 1)
+ if (sscanf(string, fbuf, &dummy) != 1)
result = (char *) format;
ifree(fbuf);
return result;
diff --git a/share/zoneinfo/tzfile.5 b/share/zoneinfo/tzfile.5
index 08c1760a1156..1d47033848b3 100644
--- a/share/zoneinfo/tzfile.5
+++ b/share/zoneinfo/tzfile.5
@@ -1,160 +1,123 @@
-.\" Copyright (c) 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" Arthur David Olson of the National Cancer Institute.
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\"
-.\" 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.
-.\"
-.\" @(#)tzfile.5 5.3 (Berkeley) 5/10/91
-.\"
-.Dd May 10, 1991
-.Dt TZFILE 5
-.Sh NAME
-.Nm tzfile
-.Nd time zone information
-.Sh SYNOPSIS
-.Fd #include <tzfile.h>
-.Sh DESCRIPTION
+.TH TZFILE 5
+.SH NAME
+tzfile \- time zone information
+.SH SYNOPSIS
+.B
+#include <tzfile.h>
+.SH DESCRIPTION
The time zone information files used by
-.Xr tzset 3
+.IR tzset (3)
begin with bytes reserved for future use,
followed by four four-byte values of type
-.Em long ,
+.BR long ,
written in a ``standard'' byte order
(the high-order byte of the value is written first).
These values are,
in order:
-.Bl -tag -width tzh_ttisstdcnt
-.It Fa tzh_ttisstdcnt
+.TP
+.I tzh_ttisstdcnt
The number of standard/wall indicators stored in the file.
-.It Fa tzh_leapcnt
+.TP
+.I tzh_leapcnt
The number of leap seconds for which data is stored in the file.
-.It Fa tzh_timecnt
+.TP
+.I tzh_timecnt
The number of "transition times" for which data is stored
in the file.
-.It Fa tzh_typecnt
+.TP
+.I tzh_typecnt
The number of "local time types" for which data is stored
in the file (must not be zero).
-.It Fa tzh_charcnt
+.TP
+.I tzh_charcnt
The number of characters of "time zone abbreviation strings"
stored in the file.
-.El
-.Pp
+.PP
The above header is followed by
-.Fa tzh_timecnt
+.I tzh_timecnt
four-byte values of type
-.Em long ,
+.BR long ,
sorted in ascending order.
These values are written in ``standard'' byte order.
Each is used as a transition time (as returned by
-.Xr time 2 )
+.IR time (2))
at which the rules for computing local time change.
Next come
-.Fa tzh_timecnt
+.I tzh_timecnt
one-byte values of type
-.Fa unsigned char ;
+.BR "unsigned char" ;
each one tells which of the different types of ``local time'' types
described in the file is associated with the same-indexed transition time.
These values serve as indices into an array of
-.Fa ttinfo
-structures that appears next in the file;
+.I ttinfo
+structures that appears next in the file;
these structures are defined as follows:
-.Bd -literal -offset indent
-struct ttinfo {
+.in +.5i
+.sp
+.nf
+.ta .5i +\w'unsigned int\0\0'u
+struct ttinfo {
long tt_gmtoff;
int tt_isdst;
unsigned int tt_abbrind;
};
-.Ed
-.Pp
+.in -.5i
+.fi
+.sp
Each structure is written as a four-byte value for
-.Fa tt_gmtoff
+.I tt_gmtoff
of type
-.Em long ,
+.BR long ,
in a standard byte order, followed by a one-byte value for
-.Fa tt_isdst
+.I tt_isdst
and a one-byte value for
-.Fa tt_abbrind .
+.IR tt_abbrind .
In each structure,
-.Fa tt_gmtoff
+.I tt_gmtoff
gives the number of seconds to be added to GMT,
-.Fa tt_isdst
+.I tt_isdst
tells whether
-.Fa tm_isdst
+.I tm_isdst
should be set by
-.Xr localtime 3
+.I localtime (3)
and
-.Fa tt_abbrind
+.I tt_abbrind
serves as an index into the array of time zone abbreviation characters
that follow the
-.Fa ttinfo
+.I ttinfo
structure(s) in the file.
-.Pp
+.PP
Then there are
-.Fa tzh_leapcnt
+.I tzh_leapcnt
pairs of four-byte values, written in standard byte order;
the first value of each pair gives the time
-(as returned by
-.Xr time 2 )
+(as returned by
+.IR time(2))
at which a leap second occurs;
the second gives the
-.Em total
+.I total
number of leap seconds to be applied after the given time.
The pairs of values are sorted in ascending order by time.
-.Pp
+.PP
Finally there are
-.Fa tzh_ttisstdcnt
+.I tzh_ttisstdcnt
standard/wall indicators, each stored as a one-byte value;
they tell whether the transition times associated with local time types
were specified as standard time or wall clock time,
-and are used when a time zone file is used in handling
-.Tn POSIX Ns -style
+and are used when a time zone file is used in handling POSIX-style
time zone environment variables.
-.Pp
-.Fa Localtime
+.PP
+.I Localtime
uses the first standard-time
-.Fa ttinfo
+.I ttinfo
structure in the file
(or simply the first
-.Fa ttinfo
+.I ttinfo
structure in the absence of a standard-time structure)
if either
-.Fa tzh_timecnt
+.I tzh_timecnt
is zero or the time argument is less than the first transition time recorded
in the file.
-.Sh SEE ALSO
-.Xr ctime 3
-.Sh HISTORY
-The
-.Nm tzfile
-file format appeared in
-.Bx 4.3 tahoe.
+.SH SEE ALSO
+newctime(3)
+.\" @(#)tzfile.5 7.2
diff --git a/share/zoneinfo/usno1988 b/share/zoneinfo/usno1988
new file mode 100644
index 000000000000..dcb72834e8c7
--- /dev/null
+++ b/share/zoneinfo/usno1988
@@ -0,0 +1,111 @@
+# @(#)usno1988 7.1
+#
+# From Arthur David Olson (January 19, 1989):
+#
+# Here's some United States Naval Observatory time zone data from
+# February 1988. It's here mostly to convince you that the USNO has indeed
+# been updating its files (see its 1989 data elsewhere).
+#
+ANDORRA 1 H AHEAD OF UTC
+ARGENTINA 3 H BEHIND UTC
+BRASIL WEST 5 H BEHIND UTC (CRUZEIRO DO SUL)
+BRASIL CENTRAL 4 H BEHIND UTC (MANAUS)
+BRASIL EAST 3 H BEHIND UTC COASTAL STATES, RIO, SP, BRASILIA
+BRASIL 2 H BEHIND UTC ATLANTIC ISLANDS
+BRAZIL 5 H BEHIND UTC WEST (CRUZEIRO DO SUL)
+BRAZIL 4 H BEHIND UTC CENTRAL (MANAUS)
+BRAZIL 3 H BEHIND UTC COASTAL STATES, RIO, SP, BRASILIA
+BRAZIL 3 H BEHIND UTC FOR MOST MAJOR AIRPORTS.
+BRAZIL 2 H BEHIND UTC ATLANTIC ISLANDS
+BULGARIA 2 H AHEAD OF UTC WINTER
+BULGARIA 3 H AHEAD OF UTC SUMMER MAR31 - SEP 85, 0100 LOCAL
+CHINA 8 H AHEAD OF UTC; ALL OF CHINA, INCL TAIWAN
+CUBA 5 H BEHIND UTC IN WINTER
+CUBA 4 H BEHIND UTC MAY 8 - OCT 8
+CYPRUS 2 H AHEAD UTC IN WINTER
+CYPRUS 3 H AHEAD UTC MAR 25 - SEP 30
+DENMARK 1 H AHEAD UTC IN WINTER
+DENMARK 2 H AHEAD UTC MAR 31 - SEP 30 , 0200 LOCAL
+DENMK. FAEROE IS 1 H AHEAD UTC MAR 31 - SEP 30 , 0200 LOCAL
+EGYPT 2 H AHEAD UTC
+EGYPT 3 H AHEAD UTC SUMMER (AFTER RAMADAN)
+ENGLAND ON UTC IN WINTER; WALES, SCOTLAND, N.I., CH.IS.
+ENGLAND 1 H AHEAD OF UTC; SUMMER TIL 28 OCT 0200 LOCAL
+FINLAND 2 H AHEAD OF UTC IN WINTER
+FINLAND 3 H AHEAD OF UTC MAR 25 - SEP 30
+FRANCE 1 H AHEAD OF UTC IN WINTER
+FRANCE 2 H AHEAD OF UTC MAR 31 - SEP 30 , 0100 LOCAL
+GREECE 2 H AHEAD OF UTC IN WINTER
+GREECE 3 H AHEAD OF UTC IN SUMMER EFF. 31MAR85 02/03 LOCAL
+GREECE 3 H AHEAD OF UTC MAR 25 - SEP 30
+GREENLAND 4 H BEHIND UTC IN THULE AIRBASE YEAR ROUND
+GREENLAND 3 H BEHIND UTC IN WINTER AT SONDRESTROM
+GREENLAND 2 H BEHIND UTC 30 MAR - 30 SEP 2200 LOCAL AT -"-
+GREENLAND 2 H BEHIND UTC AROUND SCORESBY SUND
+ICELAND ON UTC
+IRAN 3.5H AHEAD OF UTC
+IRELAND ON UTC IN WINTER
+IRELAND 1 H AHEAD OF UTC MAR 31 - OCT 23 0200 LOCAL
+ITALY 1 H AHEAD OF UTC IN WINTER
+ITALY 2 H AHEAD OF UTC MAR 31 - SEP 30, 0030 LOCAL
+JAMAICA 5 H BEHIND UTC IN WINTER
+JAMAICA 4 H BEHIND UTC APR 29 - OCT 29
+LIBYA 2 H AHEAD OF UTC
+MEXICO BAJA CAL N 8 H BEHIND UTC IN WINTER; NORTH BAJA CAL, TIJUANA
+MEXICO BAJA CAL N 7 H BEHIND UTC APR 29 - OCT 29
+MEXICO BAJA CAL S 7 H BEHIND UTC ALL YEAR; MAZATLAN
+MEXICO CENTRAL 6 H BEHIND UTC ALL YEAR; MEXICO CITY
+MONACO 1 H AHEAD UTC IN WINTER
+MONACO 2 H AHEAD UTC MAR 25 - SEP30
+PARAGUAY 4 H BEHIND UTC IN WINTER
+PARAGUAY 3 H BEHIND UTC SEP 30 - MAR 30
+POLAND 1 H AHEAD OF UTC IN WINTER
+POLAND 2 H AHEAD OF UTC MAR 24 - SEP 0200 LOCAL
+PORTUGAL ON UTC IN WINTER
+PORTUGAL 1 H AHEAD OF UTC IN SUMMER MAR 31 - SEP 29 0100 LOCAL
+PORTUGAL AZORES 1 H BEHIND UTC IN WINTER
+PORTUGAL AZORES ON UTC IN SUMMER MAR 31 - SEP 29
+PORTUGAL MADEIRA ON UTC ALL YEAR;
+ROMANIA 2 H AHEAD OF UTC IN WINTER
+ROMANIA 3 H AHEAD OF UTC APR 3 - SEP 24
+SCOTLAND SEE ENGLAND
+SWITZERLAND 1 H AHEAD OF UTC IN WINTER
+SWITZERLAND 2 H AHEAD OF UTC MAR 31 - SEP 30 0200 LOCAL
+TURKEY 3 H AHEAD OF UTC
+USA EASTERN 5 H BEHIND UTC IN WINTER; NEW YORK, WASHINGTON
+USA EASTERN 4 H BEHIND UTC APR 29 - OCT 29
+USA CENTRAL 6 H BEHIND UTC IN WINTER; CHICAGO, HOUSTON
+USA CENTRAL 5 H BEHIND UTC APR 29 - OCT 29
+USA MOUNTAIN 7 H BEHIND UTC IN WINTER; DENVER
+USA MOUNTAIN 6 H BEHIND UTC APR 29 - OCT 29
+USA PACIFIC 8 H BEHIND UTC IN WINTER; L.A., SAN FRANCISCO
+USA PACIFIC 7 H BEHIND UTC APR 29 - OCT 29
+USA ALASKA STD 9 H BEHIND UTC IN WINTER; MOST OF ALASKA (AKST)
+USA ALASKA STD 8 H BEHIND UTC APR 29 - OCT 29 (AKDT)
+USA ALEUTIAN 10 H BEHIND UTC IN WINTER; ISLANDS WEST OF 170W
+USA - " - 9 H BEHIND UTC APR 29 - OCT 29
+USA HAWAII 10 H BEHIND UTC ALL YEAR;
+USA BERING 11 H BEHIND UTC ALL YEAR; SAMOA, MIDWAY
+USSR WEST EUROP 3 H AHEAD OF UTC IN WINTER; LENINGRAD, MOSCOW
+USSR WEST EUROP 4 H AHEAD OF UTC APR 1 - SEP 30
+USSR CENTRAL EUR 4 H AHEAD OF UTC IN WINTER; ROSTOV, BAKU
+USSR CENTRAL EUR 5 H AHEAD OF UTC APR 1 - SEP 30
+USSR EAST EUROP 5 H AHEAD OF UTC IN WINTER; SVERDLOVSK
+USSR EAST EUROP 6 H AHEAD OF UTC APR 1 - SEP 30
+USSR WEST SIBERIAN 6 H AHEAD OF UTC IN WINTER; TASHKENT, ALMA ATA
+USSR WEST SIBERIAN 7 H AHEAD OF UTC APR 1 - SEP 30
+USSR WEST-CENTRAL 7 H AHEAD OF UTC IN WINTER; NOVOSIBIRSK
+USSR WEST-CENTRAL 8 H AHEAD OF UTC APR 1 - SEP 30
+USSR WEST-CENTRAL 8 H AHEAD OF UTC IN WINTER; IRKUTSK
+USSR WEST-CENTRAL 9 H AHEAD OF UTC APR 1 - SEP 30
+USSR CENTRAL SIB 9 H AHEAD OF UTC IN WINTER; YAKUTSK
+USSR CENTRAL SIB 10 H AHEAD OF UTC APR 1 - SEP 30
+USSR CENTRAL SIB 10 H AHEAD OF UTC IN WINTER; VLADIVOSTOK
+USSR CENTRAL SIB 11 H AHEAD OF UTC APR 1 - SEP 30
+USSR EAST SIBERIA 11 H AHEAD OF UTC IN WINTER; MAGADAN
+USSR EAST SIBERIA 12 H AHEAD OF UTC APR 1 - SEP 30
+USSR EAST SIBERIA 12 H AHEAD OF UTC IN WINTER; PETROPAVLOVSK
+USSR EAST SIBERIA 13 H AHEAD OF UTC APR 1 - SEP 30
+USSR EAST SIBERIA 13 H AHEAD OF UTC IN WINTER; UELEN
+USSR EAST SIBERIA 14 H AHEAD OF UTC APR 1 - SEP 30
+WALES SEE ENGLAND
diff --git a/share/zoneinfo/usno1989 b/share/zoneinfo/usno1989
new file mode 100644
index 000000000000..91a69c6fd767
--- /dev/null
+++ b/share/zoneinfo/usno1989
@@ -0,0 +1,452 @@
+# @(#)usno1989 7.1
+#
+# From Arthur David Olson (January 19, 1989):
+#
+# Here's time zone information from the United States Naval Observatory;
+# no corrections have been made, and there are some obvious challenges.
+# The USNO warns:
+# DUE TO FREQUENT CHANGES IN THE LOCAL LAWS GOVERNING DAYLIGHT
+# SAVING TIME, WE CANNOT GUARANTEE THE ACCURACY OF THIS
+# INFORMATION. PLEASE ALERT US TO ANY DISCREPANCY YOU MAY
+# DISCOVER.
+#
+AFGHANISTAN 4.5H AHEAD OF UTC
+ALBANIA 1 H AHEAD OF UTC
+ALBANIA 2 H AHEAD OF UTC MAR 27 - SEP 24
+ALBANIA (ESTIMATED)
+ALGERIA 1 H AHEAD OF UTC
+AMERICAN SAMOA 11 H BEHIND UTC
+ANDORRA 1 H AHEAD OF UTC
+ANDORRA 2 H AHEAD OF UTC MAR 27 - SEP 24
+ANDORRA (ESTIMATED)
+ANGOLA 1 H AHEAD OF UTC
+ARGENTINA 3 H BEHIND UTC
+ARUBA 4 H BEHIND UTC ALSO BONAIRE, CURACAO,
+ARUBA ST.MAARTEN
+AUSTRALIA WEST 8 H AHEAD OF UTC PERTH, EXMOUTH
+AUSTRALIA N.T. 9.5H AHEAD OF UTC DARWIN NO ADVANCED TIME
+AUSTRALIA N.T. IN SUMMER
+AUSTRALIA SOUTH 9.5H AHEAD OF UTC ADELAIDE
+AUSTRALIA INCLUDING BROKEN HILL, NSW
+AUSTRALIA SOUTH 10.5H AHEAD OF UTC ADELAIDE OCT 30, '88-MAR
+AUSTRALIA SOUTH 18, '89 INCLUDING BROKEN
+AUSTRIALIA SOUTH HILL, NSW
+AUSTRALIA QUEENL 10 H AHEAD OF UTC
+AUSTRALIA NSW 10 H AHEAD OF UTC SYDNEY
+AUSTRALIA NSW 11 H AHEAD OF UTC SYDNEY OCT 30, '88-MAR 18,
+AUSTRALIA NSW '89
+AUSTRALIA TASM. 10 H AHEAD OF UTC HOBART
+AUSTRALIA TASM. 11 H AHEAD OF UTC HOBART OCT 30, '88-MAR 18,
+AUSTRALIA TASM. '89
+AUSTRIA 1 H AHEAD OF UTC
+AUSTRIA 2 H AHEAD OF UTC MAR 27 - SEPT 24
+AZORES SEE PORTUGAL
+BAHAMAS 5 H BEHIND UTC EXCLUDING TURKS AND CAICOS
+BAHAMAS ISLANDS)
+BAHAMAS 4 H BEHIND UTC APR 3 - OCT 29 (SAME
+BAHAMAS EXCLUSION)
+BAHRAIN 3 H AHEAD OF UTC
+BANGLADESH 6 H AHEAD OF UTC
+BARBADOS 4 H BEHIND UTC
+BELGIUM 1 H AHEAD OF UTC
+BELGIUM 2 H AHEAD OF UTC MAR 27 - SEP 24
+BELIZE 6 H BEHIND UTC
+BENIN PEOPLES REP 1 H AHEAD OF UTC DAHOMEY
+BERMUDA 4 H BEHIND UTC
+BERMUDA 3 H BEHIND UTC APR 3 - OCT 29
+BHUTAN 6 H AHEAD OF UTC
+BOLIVIA 4 H BEHIND UTC
+BONAIRE 4 H BEHIND UTC ALSO ARUBA,CURACAO,
+BONAIRE ST.MAARTEN, SABA
+BOTSWANA 2 H AHEAD OF UTC
+BRAZIL WEST 5 H BEHIND UTC TERRITORY OF ACRE
+BRAZIL WEST 4 H BEHIND UTC ACRE OCT 23, '88-FEB 11,
+BRAZIL '89 (ESTIMATED)
+BRAZIL CENTRAL 4 H BEHIND UTC MANAUS
+BRAZIL CENTRAL 3 H BEHIND UTC MANAUS OCT 23, '88-FEB 11,
+BRAZIL CENTRAL '89 (ESTIMATED)
+BRAZIL EAST 3 H BEHIND UTC COASTAL STATES, RIO, SAO
+BRAZIL EAST PAULO, BRASILIA
+BRAZIL EAST 2 H BEHIND UTC COASTAL STATES, RIO, SAO
+BRAZIL PAULO, BRASILIA OCT 23,
+BRAZIL '88-FEB 11, '89
+BRAZIL (ESTIMATED)
+BRAZIL 2 H BEHIND UTC ATLANTIC ISLANDS, FERNANDO
+BRAZIL DE NORONHA
+BRAZIL 1 H BEHIND UTC OCT 23, '88-FEB 11, '89
+BRAZIL (ESTIMATED)
+BRAZIL 3 H BEHIND UTC FOR MOST MAJOR AIRPORTS.
+BRITISH VIRGIN I. 4 H BEHIND UTC
+BRUNEI 8 H AHEAD OF UTC
+BULGARIA 2 H AHEAD OF UTC
+BULGARIA 3 H AHEAD OF UTC MAR 27 - SEP 24
+BURKINA FASO ON UTC
+BURMA 6.5H AHEAD OF UTC
+BURUNDI 2 H AHEAD OF UTC
+CAMBODIA SEE KAMPUCHEA
+CAMEROON 1 H AHEAD OF UTC
+CANADA NEW FDL 3.5H BEHIND UTC ST.JOHN'S
+CANADA NEW FDL 1.5H BEHIND UTC APR 3 - OCT 29
+CANADA ATLANTIC 4 H BEHIND UTC HALIFAX
+CANADA ATLANTIC 3 H BEHIND UTC APR 3 - OCT 29
+CANADA EASTERN 5 H BEHIND UTC TORONTO, MONTREAL, OTTAWA
+CANADA EASTERN 4 H BEHIND UTC APR 3 - OCT 29
+CANADA CENTRAL 6 H BEHIND UTC REGINA, WINNIPEG
+CANADA CENTRAL 5 H BEHIND UTC APR 3 - OCT 29
+CANADA MOUNTAIN 7 H BEHIND UTC CALGARY, EDMONTON
+CANADA MOUNTAIN 6 H BEHIND UTC APR 3 - OCT 29
+CANADA PACIFIC 8 H BEHIND UTC VANCOUVER
+CANADA PACIFIC 7 H BEHIND UTC APR 3 - OCT 29
+CANADA YUKON SAME AS PACIFIC DAWSON
+CAPE VERDE 1 H BEHIND UTC
+CAYMAN ISLANDS 5 H BEHIND UTC
+CAROLINE ISLAND 10 H AHEAD OF UTC EXCLUDING PONAPE IS.,
+CAROLINE ISLAND KUSAIE, AND PINGELAP
+CENTRAL AFRICA 1 H AHEAD OF UTC
+CEYLON 5.5H AHEAD OF UTC, SEE SRI LANKA
+CHAD 1 H AHEAD OF UTC
+CHANNEL ISLANDS SEE ENGLAND
+CHILE 4 H BEHIND UTC CONTINENTAL
+CHILE 3 H BEHIND UTC OCT 9, '88-MAR 11, '89
+CHILE 6 H BEHIND UTC EASTER ISLAND
+CHILE 5 H BEHIND UTC OCT 9, '88-MAR 11, '89
+CHINA 8 H AHEAD OF UTC ALL OF CHINA, INCL TAIWAN
+CHINA 9 H AHEAD OF UTC APR 17 - SEP 10
+COCOS (Keeling) I. 6.5H AHEAD OF UTC
+COLOMBIA 5 H BEHIND UTC
+COMOROS 3 H AHEAD OF UTC
+CONGO 1 H AHEAD OF UTC
+COOK ISLANDS 10 H BEHIND UTC
+COOK ISLANDS 9.5H BEHIND UTC OCT 30, '88-MAR 24, '89
+COOK ISLANDS (ESTIMATED)
+COSTA RICA 6 H BEHIND UTC
+COTE D'IVOIRE ON UTC
+CUBA 5 H BEHIND UTC
+CUBA 4 H BEHIND UTC MAR 20 - OCT 8
+CURACAO 4 H BEHIND UTC ALSO BONAIRE, ARUBA,
+CURACAO ST.MAARTEN
+CYPRUS 2 H AHEAD OF UTC
+CYPRUS 3 H AHEAD OF UTC MAR 27 - SEP 24
+CZECHOSLOVAKIA 1 H AHEAD OF UTC
+CZECHOSLOVAKIA 2 H AHEAD OF UTC MAR 27 - SEP 24
+DENMARK 1 H AHEAD OF UTC
+DENMARK 2 H AHEAD OF UTC MAR 27 - SEP 24
+DENMK. FAEROE IS 1 H AHEAD OF UTC MAR 27 - SEP 24
+DJIBOUTI 3 H AHEAD OF UTC
+DOMINICA 4 H BEHIND UTC
+DOMINICAN REP 4 H BEHIND UTC
+ECUADOR 5 H BEHIND UTC CONTINENTAL
+ECUADOR 6 H BEHIND UTC GALAPAGOS ISLANDS
+EGYPT 2 H AHEAD OF UTC
+EGYPT 3 H AHEAD OF UTC MAY 17 - SEP 30 (AFTER
+EGYPT RAMADAN)
+EL SALVADOR 6 H BEHIND UTC
+ENGLAND ON UTC (WALES, SCOTLAND, N.I.,
+ENGLAND CH. IS.)
+ENGLAND 1 H AHEAD OF UTC MAR 27 - OCT 22
+ENEZUELA 4 H BEHIND UTC
+EQUITORIAL GUINEA 1 H AHEAD OF UTC
+ETHIOPIA 3 H AHEAD OF UTC
+FALKLAND ISLANDS 4 H BEHIND UTC
+FALKLAND ISLANDS 3 H BEHIND UTC SEP 11, '88-APR 15, '89
+FALKLAND ISLANDS (ESTIMATED)
+FAROE ISLAND ON UTC
+FAROE ISLAND 1 H AHEAD OF UTC MAR 27 - SEP 24
+FIJI 12 H AHEAD OF UTC
+FINLAND 2 H AHEAD OF UTC
+FINLAND 3 H AHEAD OF UTC MAR 27 - SEP 24
+FRANCE 1 H AHEAD OF UTC
+FRANCE 2 H AHEAD OF UTC MAR 27 - SEP 24
+FRENCH GUIANA 3 H BEHIND UTC
+FRENCH POLYNESIA 9 H BEHIND UTC GAMBIER ISLAND
+FRENCH POLYNESIA 9.5H BEHIND UTC MARQUESAS ISLANDS
+FRENCH POLYNESIA 10 H BEHIND UTC SOCIETY ISLANDS, TUBUAI
+FRENCH POLYNESIA ISLANDS, TUAMOTU ISLAND,
+FRENCH POLYNESIA TAHITI
+GABON 1 H AHEAD OF UTC
+GAMBIA ON UTC
+GERMANY ALL 1 H AHEAD OF UTC
+GERMANY ALL 2 H AHEAD OF UTC MAR 27 - SEP 24
+GHANA ON UTC
+GIBRALTAR 1 H AHEAD OF UTC
+GIBRALTAR 2 H AHEAD OF UTC MAR 27 - SEP 24
+GREECE 2 H AHEAD OF UTC
+GREECE 3 H AHEAD OF UTC MAR 27 - SEP 24
+GREENLAND 4 H BEHIND UTC THULE AIRBASE YEAR ROUND
+GREENLAND 3 H BEHIND UTC ANGMAGSSALIK AND W. COAST
+GREENLAND 2 H BEHIND UTC MAR 27 - SEP 24
+GREENLAND 1 H BEHIND UTC SCORESBYSUND
+GREENLAND ON UTC MAR 27 - SEP 24
+GRENADA 4 H BEHIND UTC
+GUADELOUPE 4 H BEHIND UTC ST. BARTHELEMY, NORTHERN
+GUADELOUPE ST. MARTIN MARTINIQUE
+GUAM 10 H AHEAD OF UTC
+GUATEMALA 6 H BEHIND UTC
+GUINEA ON UTC
+GUINEA BISSAU ON UTC
+GUINEA REPUBLIC ON UTC
+GUINEA EQUATORIAL 1 H AHEAD OF UTC
+GUYANA 3 H BEHIND UTC
+HAITI 5 H BEHIND UTC
+HAITI 4 H BEHIND UTC APR 3 - OCT 29
+HOLLAND SEE NETHERLANDS
+HONDURAS 6 H BEHIND UTC
+HONG KONG 8 H AHEAD OF UTC
+HUNGARY 1 H AHEAD OF UTC
+HUNGARY 2 H AHEAD OF UTC MAR 27 - SEP 24
+ICELAND ON UTC
+INDIA 5.5H AHEAD OF UTC INCLUDING ANDAMAN ISLANDS
+INDONESIA WEST 7 H AHEAD OF UTC SUMATRA, JAVA, BALI,
+INDONESIA WEST JAKARTA
+INDONESIA CENTRAL 8 H AHEAD OF UTC KALIMANTAN, SULAWESI
+INDONESIA EAST 9 H AHEAD OF UTC IRIAN, BARAT
+IRAN 3.5H AHEAD OF UTC
+IRAQ 3 H AHEAD OF UTC
+IRAQ 4 H AHEAD OF UTC APR 1 - SEP 30
+IRELAND ON UTC
+IRELAND 1 H AHEAD OF UTC MAR 27 - OCT 22
+ISRAEL 2 H AHEAD OF UTC
+ISRAEL 3 H AHEAD OF UTC APR 10 - SEP 3
+ITALY 1 H AHEAD OF UTC
+ITALY 2 H AHEAD OF UTC MAR 27 - SEP 24
+IVORY COAST ON UTC
+IWAN 8 H AHEAD OF UTC
+JAMAICA 5 H BEHIND UTC
+JAPAN 9 H AHEAD OF UTC
+JOHNSTON ISLAND 10 H BEHIND UTC
+JORDAN 2 H AHEAD OF UTC
+JORDAN 3 H AHEAD OF UTC APR 1 - OCT 6
+KAMPUCHEA 7 H AHEAD OF UTC
+KENYA 3 H AHEAD OF UTC
+KIRIBATI, REP OF 12 H AHEAD OF UTC CANTON, ENDERBURY ISLANDS
+KIRIBATI, REP OF 11 H AHEAD OF UTC CHRISTMAS ISLAND
+KOREA 9 H AHEAD OF UTC
+KOREA, REP OF 9 H AHEAD OF UTC
+KOREA, REP OF 10 H AHEAD OF UTC MAY 8 - OCT 8
+KUWAIT 3 H AHEAD OF UTC
+KUSAIE, PINGELAP 12 H AHEAD OF UTC INCLUDING MARSHALL IS.,
+KUSAIE, PINGELAP EXCLUDING KWAJALEIN)
+KWAJALEIN 12 H BEHIND UTC
+LAOS 7 H AHEAD OF UTC
+LEBANON 2 H AHEAD OF UTC
+LEBANON 3 H AHEAD OF UTC JUN 1 - OCT 31
+LEEWARD ISLANDS 4 H BEHIND UTC ANTIGUA, DOMINICA,
+LEEWARD ISLANDS MONTSERRAT, ST.
+LEEWARD ISLAANDS CHRISTOPHER, ST. KITTS,
+LEEWARD ISLANDS NEVIS, ANGUILLA
+LESOTHO 2 H AHEAD OF UTC
+LIBERIA ON UTC
+LIBYAN ARAB 1 H AHEAD OF UTC JAMAHIRIYA/LIBYA
+LIBYAN ARAB 2 H AHEAD OF UTC APR 1 - SEP 30 JAMAHIRIYA/LIBYA
+LIECHTENSTEIN 1 H AHEAD OF UTC
+LIECHTENSTEIN 2 H AHEAD OF UTC MAR 27 - SEP 24
+LUXEMBOURG 1 H AHEAD OF UTC
+LUXEMBOURG 2 H AHEAD OF UTC MAR 27 - SEP 24
+MACAO 8 H AHEAD OF UTC
+MADAGASCAR 3 H AHEAD OF UTC
+MADEIRA SEE PORTUGAL
+MALAWI 2 H AHEAD OF UTC
+MALAYSIA 8 H AHEAD OF UTC
+MALDIVES 5 H AHEAD OF UTC
+MALI ON UTC
+MALTA 1 H AHEAD OF UTC
+MALTA 2 H AHEAD OF UTC MAR 27 - SEP 24
+MARTINIQUE 4 H BEHIND UTC
+MAURITANIA ON UTC
+MAURITIUS 4 H AHEAD OF UTC
+MARIANA ISLAND 10 H AHEAD OF UTC EXCLUDING GUAM
+MEXICO BAJA CAL N 7 H BEHIND UTC BAJA CALIFORNIA SUR AND
+MEXICO BAJA CAL N N. PACIFIC COAST (STATES
+MEXICO BAJA CAL N OF SINALOA AND SONORA)
+MEXICO BAJA CAL N 8 H BEHIND UTC ABOVE 28TH PARALLAL APR 3
+MEXICO BAJA CAL N - OCT 29
+MEXICO BAJA CAL N 7 H BEHIND UTC ABOVE 28TH PARALLAL APR 3
+MEXICO BAJA CAL N - 0CT 29
+MEXICO 6 H BEHIND UTC STATES OF DURANGO,
+MEXICO COAHUILA, NUEVO LEON,
+MEXICO TAMAULIPAS
+MEXICO 5 H BEHIND UTC STATES OF DURANGO,
+MEXICO COAHUILA, NUEVO LEON,
+MEXICO TAMAULIPAS APR 3 - OCT 29
+MEXICO 6 H BEHIND UTC GENERAL MEXICO, STATES OF
+MEXICO CAMPECHE, QUINTANA ROO AND
+MEXICO YUCATAN
+MIDWAY ISLAND 11 H BEHIND UTC
+MONACO 1 H AHEAD OF UTC
+MONACO 2 H AHEAD OF UTC MAR 27 - SEP 24
+MONGOLIA 8 H AHEAD OF UTC
+MONGOLIA 9 H AHEAD OF UTC MAR 27 - SEP 24
+MONTSERRAT 4 H BEHIND UTC
+MOROCCO ON UTC
+MOZAMBIQUE 2 H AHEAD OF UTC
+NAMIBIA 2 H AHEAD OF UTC
+NAURU, REP OF 12 H AHEAD OF UTC
+NEPAL 5H45M AHEAD OF UTC
+NETHERLANDS 1 H AHEAD OF UTC
+NETHERLANDS 2 H AHEAD OF UTC MAR 27 - SEP 24
+NETHERLANDS 4 H BEHIND UTC ANTILLES AND SOUTHERN ST.
+NETHERLANDS MAARTEN
+NEW CALEDONIA 11 H AHEAD OF UTC
+NEW HEBRIDES SEE VANUATU
+NEW ZEALAND 12 H AHEAD OF UTC (EXCLUDING CHATHAM ISLAND)
+NEW ZEALAND 13 H AHEAD OF UTC OCT 30, '88-MAR 4, '89
+NEW ZEALAND 12H45M AHEAD OF UTC CHATHAM ISLAND
+NICARAGUA 6 H BEHIND UTC
+NIGER 1 H AHEAD OF UTC
+NIGERIA 1 H AHEAD OF UTC
+NIUE ISLAND 11 H BEHIND UTC
+NORFOLK ISLAND 11H30M AHEAD OF UTC
+NORTHERN IRELAND ON UTC WALES, SCOTLAND, N.I.,
+NORTHERN IRELAND CH.IS.
+NORTHERN IRELAND 1 H AHEAD OF UTC MAR 27 - OCT 22
+NORWAY 1 H AHEAD OF UTC
+NORWAY 2 H AHEAD OF UTC MAR 27 - SEP 24
+OGO ON UTC
+OMAN 4 H AHEAD OF UTC
+PACIFIC ISLAND T.T.
+PALAU ISLAND 9 H AHEAD OF UTC
+PAKISTAN 5 H AHEAD OF UTC
+PANAMA 5 H BEHIND UTC
+PAPUA NEW GUINEA 10 H AHEAD OF UTC INCLUDING BOUGAINVILLE
+PAPUA NEW GUINEA ISLAND
+PARAGUAY 4 H BEHIND UTC
+PARAGUAY 3 H BEHIND UTC OCT 1, '88-MAR 31, '89
+PERU 5 H BEHIND UTC
+PHILIPPINES 8 H AHEAD OF UTC
+PONAPE ISLAND 11 H AHEAD OF UTC
+POLAND 1 H AHEAD OF UTC
+POLAND 2 H AHEAD OF UTC MAR 27 - SEP 24
+PORTUGAL MAINLAND ON UTC
+PORTUGAL MAINLAND 1 H AHEAD OF UTC MAR 27 - SEP 24
+PORTUGAL AZORES 1 H BEHIND UTC
+PORTUGAL AZORES ON UTC MAR 27 - SEP 24
+PORTUGAL MADEIRA ON UTC
+PORTUGAL MADEIRA 1 H AHEAD OF UTC MAR 27 - SEP 24
+PUERTO RICO 4 H BEHIND UTC
+QATAR 3 H AHEAD OF UTC
+ROMANIA 2 H AHEAD OF UTC
+ROMANIA 3 H AHEAD OF UTC MAR 27 - SEP 24
+RUSSIA SEE USSR
+RWANDA 2 H AHEAD OF UTC
+SABA 4 H BEHIND UTC ALSO BONAIRE, CURACAO,
+SAMOA 11 H BEHIND UTC
+SAN MARINO 1 H AHEAD OF UTC
+SAN MARINO 2 H AHEAD OF UTC MAR 27 - SEP 24
+SAN SALVADOR 6 H BEHIND UTC
+SAO TOME ISLAND ON UTC AND PRINCIPE ISLAND
+SAUDI ARABIA 3 H AHEAD OF UTC
+SCOTLAND SEE ENGLAND
+SENEGAL ON UTC
+SEYCHELLES 4 H AHEAD OF UTC
+SIERRA LEONE ON UTC
+SINGAPORE 8 H AHEAD OF UTC
+SOLOMON ISLANDS 11 H AHEAD OF UTC EXCLUDING BOUGAINVILLE
+SOLOMON ISLANDS ISLAND
+SOMALI 3 H AHEAD OF UTC
+SOUTH AFRICA 2 H AHEAD OF UTC
+SPAIN CANARY IS ON UTC
+SPAIN CANARY IS 1 H AHEAD OF UTC MAR 27 - SEP 24
+SPAIN 1 H AHEAD OF UTC CONTINENTAL, BALEARIC AND
+SPAIN MALLORCA ISLANDS
+SPAIN 2 H AHEAD OF UTC CONTINENTAL, BALEARIC AND
+SPAIN MALLORCA ISLANDS MAR 27 -
+SPAIN SEP 24
+SPAIN MAINLAND 1 H AHEAD OF UTC MELILLA
+SPAIN MAINLAND 2 H AHEAD OF UTC MAR 27 - SEP 24
+SRI LANKA 5H30M AHEAD OF UTC
+ST.MAARTEN
+ST.KITTS-NEVIS 4 H BEHIND UTC
+ST.LUCIA 4 H BEHIND UTC
+ST.PIERRE 3 H BEHIND UTC INCLUDING MIQUELON
+ST.PIERRE 2 H BEHIND UTC INLCUDING MIQUELON APR 3
+ST.PIERRE - OCT 29
+ST.VINCENT 4 H BEHIND UTC INCLUDING THE GRENADINES
+ST. HELENA ON UTC
+SURINAME 3 H BEHIND UTC
+SWAZILAND 2 H AHEAD OF UTC
+SWEDEN 1 H AHEAD OF UTC
+SWEDEN 2 H AHEAD OF UTC MAR 27 - SEP 24
+SWITZERLAND 1 H AHEAD OF UTC
+SWITZERLAND 2 H AHEAD OF UTC MAR 27 - SEP 24
+SYRIA 2 H AHEAD OF UTC
+SYRIA 3 H AHEAD OF UTC MAR 15 - OCT 30
+TAHITI 10 H BEHIND UTC
+TANZANIA 3 H AHEAD OF UTC
+THAILAND 7 H AHEAD OF UTC
+TRINIDAD / TOBAGO 4 H BEHIND UTC
+TUNISIA 1 H AHEAD OF UTC
+TUNISIA 2 H AHEAD OF UTC APR 10 - SEP 24
+TURKEY 2 H AHEAD OF UTC
+TURKEY 3 H AHEAD OF UTC MAR 27 - SEP 24
+TURKS AND CAICOS 5 H BEHIND UTC
+TURKS AND CAICOS 4 H BEHIND UTC APR 3 - OCT 29
+TUVALU 12 H AHEAD OF UTC
+UDAN 2 H AHEAD OF UTC
+UGANDA 3 H AHEAD OF UTC
+UNITED ARAB EMIR. 4 H AHEAD OF UTC ABU DHABI, DUBAI, SHARJAH,
+UNITED ARAB EMIR RAS AL KHAIMAH
+UNITED KINGDOM ON UTC WALES, SCOTLAND, N.I., CH.
+UNITED KINGDOM IS.
+UNITED KINGDOM 1 H AHEAD OF UTC MAR 27 - OCT 22
+UNITED STATES SEE USA
+UPPER VOLTA ON UTC
+URUGUAY 3 H BEHIND UTC
+URUGUAY 2 H BEHIND UTC DEC 11, '88-FEB 25, '89
+URAGUAY (ESTIMATED)
+USA EASTERN 5 H BEHIND UTC NEW YORK, WASHINGTON
+USA EASTERN 4 H BEHIND UTC APR 3 - OCT 30
+USA CENTRAL 6 H BEHIND UTC CHICAGO, HOUSTON
+USA CENTRAL 5 H BEHIND UTC APR 3 - OCT 30
+USA MOUNTAIN 7 H BEHIND UTC DENVER
+USA MOUNTAIN 6 H BEHIND UTC APR 3 - OCT 30
+USA PACIFIC 8 H BEHIND UTC L.A., SAN FRANCISCO
+USA PACIFIC 7 H BEHIND UTC APR 3 - OCT 30
+USA ALASKA STD 9 H BEHIND UTC MOST OF ALASKA (AKST)
+USA ALASKA STD 8 H BEHIND UTC APR 3 - OCT 30 (AKDT)
+USA ALEUTIAN 10 H BEHIND UTC ISLANDS WEST OF 170W
+USA - " - 9 H BEHIND UTC APR 3 - OCT 30
+USA HAWAII 10 H BEHIND UTC
+USA BERING 11 H BEHIND UTC SAMOA, MIDWAY
+USA FOR SPECIFIC INFO ON USA ZONES/TIMES CALL DOT 202-426-4520
+USSR WEST EUROP 3 H AHEAD OF UTC LENINGRAD, MOSCOW
+USSR WEST EUROP 4 H AHEAD OF UTC APR 1 - SEP 30
+USSR CENTRAL EUR 4 H AHEAD OF UTC ROSTOV, BAKU
+USSR CENTRAL EUR 5 H AHEAD OF UTC APR 1 - SEP 30
+USSR EAST EUROP 5 H AHEAD OF UTC SVERDLOVSK
+USSR EAST EUROP 6 H AHEAD OF UTC APR 1 - SEP 30
+USSR WEST SIBERIAN 6 H AHEAD OF UTC TASHKENT, ALMA ATA
+USSR WEST SIBERIAN 7 H AHEAD OF UTC APR 1 - SEP 30
+USSR WEST-CENTRAL 7 H AHEAD OF UTC NOVOSIBIRSK
+USSR WEST-CENTRAL 8 H AHEAD OF UTC APR 1 - SEP 30
+USSR WEST-CENTRAL 8 H AHEAD OF UTC IRKUTSK
+USSR WEST-CENTRAL 9 H AHEAD OF UTC APR 1 - SEP 30
+USSR CENTRAL SIB 9 H AHEAD OF UTC YAKUTSK
+USSR CENTRAL SIB 10 H AHEAD OF UTC APR 1 - SEP 30
+USSR CENTRAL SIB 10 H AHEAD OF UTC VLADIVOSTOK
+USSR CENTRAL SIB 11 H AHEAD OF UTC APR 1 - SEP 30
+USSR EAST SIBERIA 11 H AHEAD OF UTC MAGADAN
+USSR EAST SIBERIA 12 H AHEAD OF UTC APR 1 - SEP 30
+USSR EAST SIBERIA 12 H AHEAD OF UTC PETROPAVLOVSK
+USSR EAST SIBERIA 13 H AHEAD OF UTC APR 1 - SEP 30
+USSR EAST SIBERIA 13 H AHEAD OF UTC UELEN
+USSR EAST SIBERIA 14 H AHEAD OF UTC APR 1 - SEP 30
+VANUATU 11 H AHEAD OF UTC (NEW HEBRIDES)
+VANUATU 12 H AHEAD OF UTC SEP 25, '88-MAR 25, '89
+VANUATU (ESTIMATED)
+VATICAN 1 H AHEAD OF UTC
+VATICAN 2 H AHEAD OF UTC MAR 27 - SEP 24
+VIETNAM 7 H AHEAD OF UTC
+VIRGIN ISLANDS 4 H BEHIND UTC ST.CROIX, ST.THOMAS,
+VIRGIN ISLANDS ST.JOHN
+WAKE ISLAND 12 H AHEAD OF UTC
+WALES SEE ENGLAND
+WALLIS/FUTUNA IS. 12 H AHEAD OF UTC
+WINDWARD ISLANDS 4 H BEHIND UTC GRENADA, ST. LUCIA
+YEMEN 3 H AHEAD OF UTC BOTH REPUBLICS
+YUGOSLAVIA 1 H AHEAD OF UTC
+YUGOSLAVIA 2 H AHEAD OF UTC MAR 27 - SEP 24
+ZAIRE EAST 1 H AHEAD OF UTC KINSHASA MBANDAKA
+ZAIRE WEST 2 H AHEAD OF UTC LUBUMBASHI, KASAI, KIVU,
+ZAIRE WEST HAUT-ZAIRE, SHABA
+ZAMBIA 2 H AHEAD OF UTC
+ZIMBABWE 2 H AHEAD OF UTC
diff --git a/share/zoneinfo/zic.8 b/share/zoneinfo/zic.8
index 80cfec9bc734..820a48e00da5 100644
--- a/share/zoneinfo/zic.8
+++ b/share/zoneinfo/zic.8
@@ -1,39 +1,3 @@
-.\" Copyright (c) 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" Arthur David Olson of the National Cancer Institute.
-.\"
-.\" 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.
-.\"
-.\" @(#)zic.8 5.2 (Berkeley) 4/20/91
-.\"
.TH ZIC 8
.SH NAME
zic \- time zone compiler
@@ -56,6 +20,8 @@ zic \- time zone compiler
] [
.B \-s
] [
+.B \-y command
+] [
.I filename
\&... ]
.SH DESCRIPTION
@@ -113,6 +79,13 @@ values.
Limit time values stored in output files to values that are the same
whether they're taken to be signed or unsigned.
You can use this option to generate SVVS-compatible files.
+.TP
+.BI "\-y " command
+Use the given
+.I command
+rather than
+.B yearistype
+when checking year types (see below).
.sp
Input lines are made up of fields.
Fields are separated from one another by any number of white space characters.
@@ -384,7 +357,7 @@ For example:
Leap 1974 Dec 31 23:59:60 + S
.sp
.fi
-The
+The
.BR YEAR ,
.BR MONTH ,
.BR DAY ,
@@ -397,9 +370,15 @@ field
should be
.q +
if a second was added
-or
+or
.q -
-if a second was skipped.
+if a second was skipped
+or
+.q ++
+if two seconds were added
+or
+.q --
+if two seconds were skipped.
The
.B R/S
field
@@ -418,7 +397,7 @@ you may need to use local standard time in the
field of the earliest transition time's rule to ensure that
the earliest transition time recorded in the compiled file is correct.
.SH FILE
-/etc/zoneinfo standard directory used for created files
+/usr/local/etc/zoneinfo standard directory used for created files
.SH "SEE ALSO"
newctime(3), tzfile(5), zdump(8)
-.. @(#)zic.8 4.4
+.\" @(#)zic.8 7.6
diff --git a/share/zoneinfo/zic.c b/share/zoneinfo/zic.c
index 677fb2e9a3e3..125543a0a5e9 100644
--- a/share/zoneinfo/zic.c
+++ b/share/zoneinfo/zic.c
@@ -1,61 +1,18 @@
-/*-
- * Copyright (c) 1991 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Arthur David Olson of the National Cancer Institute.
- *
- * 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.
+/*
+ * This file provided by Arthur David Olson of the National Cancer
+ * Institute. Because it was created by the United States government,
+ * it is in the public domain with the United States, and freely distributable
+ * outside. (Comment added by G. Wollman, FreeBSD Project.)
*/
-
+/* $Id: zic.c,v 1.5 1994/02/20 15:51:36 rgrimes Exp $ */
#ifndef lint
-static char sccsid[] = "@(#)zic.c 5.3 (Berkeley) 4/20/91";
-#endif /* not lint */
-
-#ifdef notdef
-static char elsieid[] = "@(#)zic.c 4.12";
-#endif
-
-#include <sys/types.h>
-#include <sys/cdefs.h>
-#include <sys/stat.h>
-#include <time.h>
-#include <tzfile.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <string.h>
-#include <stdlib.h>
-
-#ifndef TRUE
-#define TRUE 1
-#define FALSE 0
-#endif /* !defined TRUE */
+#ifndef NOID
+static char elsieid[] = "@(#)zic.c 7.19";
+#endif /* !defined NOID */
+#endif /* !defined lint */
+
+#include "private.h"
+#include "tzfile.h"
struct rule {
const char * r_filename;
@@ -108,59 +65,61 @@ struct zone {
time_t z_untiltime;
};
-extern char * icatalloc __P((char * old, const char * new));
-extern char * icpyalloc __P((const char * string));
-extern void ifree __P((char * p));
-extern char * imalloc __P((int n));
-extern char * irealloc __P((char * old, int n));
-extern int link __P((const char * fromname, const char * toname));
+extern int getopt P((int argc, char * argv[], const char * options));
+extern char * icatalloc P((char * old, const char * new));
+extern char * icpyalloc P((const char * string));
+extern void ifree P((char * p));
+extern char * imalloc P((int n));
+extern char * irealloc P((char * old, int n));
+extern int link P((const char * fromname, const char * toname));
extern char * optarg;
extern int optind;
-extern void perror __P((const char * string));
-extern char * scheck __P((const char * string, const char * format));
-static void addtt __P((time_t starttime, int type));
-static int addtype
- __P((long gmtoff, const char * abbr, int isdst,
- int ttisstd));
-static void addleap __P((time_t t, int positive, int rolling));
-static void adjleap __P((void));
-static void associate __P((void));
-static int ciequal __P((const char * ap, const char * bp));
-static void convert __P((long val, char * buf));
-static void dolink __P((const char * fromfile, const char * tofile));
-static void eat __P((const char * name, int num));
-static void eats __P((const char * name, int num,
- const char * rname, int rnum));
-static long eitol __P((int i));
-static void error __P((const char * message));
-static char ** getfields __P((char * buf));
-static long gethms __P((char * string, const char * errstrng,
- int signable));
-static void infile __P((const char * filename));
-static void inleap __P((char ** fields, int nfields));
-static void inlink __P((char ** fields, int nfields));
-static void inrule __P((char ** fields, int nfields));
-static int inzcont __P((char ** fields, int nfields));
-static int inzone __P((char ** fields, int nfields));
-static int inzsub __P((char ** fields, int nfields, int iscont));
-static int itsabbr __P((const char * abbr, const char * word));
-static int itsdir __P((const char * name));
-static int lowerit __P((int c));
-static char * memcheck __P((char * tocheck));
-static int mkdirs __P((char * filename));
-static void newabbr __P((const char * abbr));
-static long oadd __P((long t1, long t2));
-static void outzone __P((const struct zone * zp, int ntzones));
-static void puttzcode __P((long code, FILE * fp));
-static int rcomp __P((const void *leftp, const void *rightp));
-static time_t rpytime __P((const struct rule * rp, int wantedy));
-static void rulesub __P((struct rule * rp, char * loyearp, char * hiyearp,
- char * typep, char * monthp, char * dayp, char * timep));
-static void setboundaries __P((void));
-static time_t tadd __P((time_t t1, long t2));
-static void usage __P((void));
-static void writezone __P((const char * name));
-static int yearistype __P((int year, const char * type));
+extern char * scheck P((const char * string, const char * format));
+
+static void addtt P((time_t starttime, int type));
+static int addtype P((long gmtoff, const char * abbr, int isdst,
+ int ttisstd));
+static void leapadd P((time_t t, int positive, int rolling, int count));
+static void adjleap P((void));
+static void associate P((void));
+static int ciequal P((const char * ap, const char * bp));
+static void convert P((long val, char * buf));
+static void dolink P((const char * fromfile, const char * tofile));
+static void eat P((const char * name, int num));
+static void eats P((const char * name, int num,
+ const char * rname, int rnum));
+static long eitol P((int i));
+static void error P((const char * message));
+static char ** getfields P((char * buf));
+static long gethms P((const char * string, const char * errstrng,
+ int signable));
+static void infile P((const char * filename));
+static void inleap P((char ** fields, int nfields));
+static void inlink P((char ** fields, int nfields));
+static void inrule P((char ** fields, int nfields));
+static int inzcont P((char ** fields, int nfields));
+static int inzone P((char ** fields, int nfields));
+static int inzsub P((char ** fields, int nfields, int iscont));
+static int itsabbr P((const char * abbr, const char * word));
+static int itsdir P((const char * name));
+static int lowerit P((int c));
+static char * memcheck P((char * tocheck));
+static int mkdirs P((char * filename));
+static void newabbr P((const char * abbr));
+static long oadd P((long t1, long t2));
+static void outzone P((const struct zone * zp, int ntzones));
+static void puttzcode P((long code, FILE * fp));
+static int rcomp P((const genericptr_t leftp, const genericptr_t rightp));
+static time_t rpytime P((const struct rule * rp, int wantedy));
+static void rulesub P((struct rule * rp,
+ char * loyearp, char * hiyearp,
+ char * typep, char * monthp,
+ char * dayp, char * timep));
+static void setboundaries P((void));
+static time_t tadd P((time_t t1, long t2));
+static void usage P((void));
+static void writezone P((const char * name));
+static int yearistype P((int year, const char * type));
static int charcnt;
static int errors;
@@ -281,77 +240,77 @@ struct lookup {
const int l_value;
};
-static struct lookup const * byword __P((const char * string,
+static struct lookup const * byword P((const char * string,
const struct lookup * lp));
static struct lookup const line_codes[] = {
- "Rule", LC_RULE,
- "Zone", LC_ZONE,
- "Link", LC_LINK,
- "Leap", LC_LEAP,
- NULL, 0
+ { "Rule", LC_RULE },
+ { "Zone", LC_ZONE },
+ { "Link", LC_LINK },
+ { "Leap", LC_LEAP },
+ { NULL, 0}
};
static struct lookup const mon_names[] = {
- "January", TM_JANUARY,
- "February", TM_FEBRUARY,
- "March", TM_MARCH,
- "April", TM_APRIL,
- "May", TM_MAY,
- "June", TM_JUNE,
- "July", TM_JULY,
- "August", TM_AUGUST,
- "September", TM_SEPTEMBER,
- "October", TM_OCTOBER,
- "November", TM_NOVEMBER,
- "December", TM_DECEMBER,
- NULL, 0
+ { "January", TM_JANUARY },
+ { "February", TM_FEBRUARY },
+ { "March", TM_MARCH },
+ { "April", TM_APRIL },
+ { "May", TM_MAY },
+ { "June", TM_JUNE },
+ { "July", TM_JULY },
+ { "August", TM_AUGUST },
+ { "September", TM_SEPTEMBER },
+ { "October", TM_OCTOBER },
+ { "November", TM_NOVEMBER },
+ { "December", TM_DECEMBER },
+ { NULL, 0 }
};
static struct lookup const wday_names[] = {
- "Sunday", TM_SUNDAY,
- "Monday", TM_MONDAY,
- "Tuesday", TM_TUESDAY,
- "Wednesday", TM_WEDNESDAY,
- "Thursday", TM_THURSDAY,
- "Friday", TM_FRIDAY,
- "Saturday", TM_SATURDAY,
- NULL, 0
+ { "Sunday", TM_SUNDAY },
+ { "Monday", TM_MONDAY },
+ { "Tuesday", TM_TUESDAY },
+ { "Wednesday", TM_WEDNESDAY },
+ { "Thursday", TM_THURSDAY },
+ { "Friday", TM_FRIDAY },
+ { "Saturday", TM_SATURDAY },
+ { NULL, 0 }
};
static struct lookup const lasts[] = {
- "last-Sunday", TM_SUNDAY,
- "last-Monday", TM_MONDAY,
- "last-Tuesday", TM_TUESDAY,
- "last-Wednesday", TM_WEDNESDAY,
- "last-Thursday", TM_THURSDAY,
- "last-Friday", TM_FRIDAY,
- "last-Saturday", TM_SATURDAY,
- NULL, 0
+ { "last-Sunday", TM_SUNDAY },
+ { "last-Monday", TM_MONDAY },
+ { "last-Tuesday", TM_TUESDAY },
+ { "last-Wednesday", TM_WEDNESDAY },
+ { "last-Thursday", TM_THURSDAY },
+ { "last-Friday", TM_FRIDAY },
+ { "last-Saturday", TM_SATURDAY },
+ { NULL, 0 }
};
static struct lookup const begin_years[] = {
- "minimum", YR_MINIMUM,
- "maximum", YR_MAXIMUM,
- NULL, 0
+ { "minimum", YR_MINIMUM },
+ { "maximum", YR_MAXIMUM },
+ { NULL, 0 }
};
static struct lookup const end_years[] = {
- "minimum", YR_MINIMUM,
- "maximum", YR_MAXIMUM,
- "only", YR_ONLY,
- NULL, 0
+ { "minimum", YR_MINIMUM },
+ { "maximum", YR_MAXIMUM },
+ { "only", YR_ONLY },
+ { NULL, 0 }
};
static struct lookup const leap_types[] = {
- "Rolling", TRUE,
- "Stationary", FALSE,
- NULL, 0
+ { "Rolling", TRUE },
+ { "Stationary", FALSE },
+ { NULL, 0 }
};
static const int len_months[2][MONSPERYEAR] = {
- 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
- 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
+ { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
+ { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
};
static const int len_years[2] = {
@@ -362,7 +321,7 @@ static time_t ats[TZ_MAX_TIMES];
static unsigned char types[TZ_MAX_TIMES];
static long gmtoffs[TZ_MAX_TYPES];
static char isdsts[TZ_MAX_TYPES];
-static char abbrinds[TZ_MAX_TYPES];
+static unsigned char abbrinds[TZ_MAX_TYPES];
static char ttisstds[TZ_MAX_TYPES];
static char chars[TZ_MAX_CHARS];
static time_t trans[TZ_MAX_LEAPS];
@@ -436,16 +395,17 @@ static void
usage()
{
(void) fprintf(stderr,
-"%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d directory ]\n\
-\t[ -L leapseconds ] [ filename ... ]\n",
+"%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d directory ] \n\
+\t[ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n",
progname, progname);
(void) exit(EXIT_FAILURE);
}
-static const char * psxrules = NULL;
-static const char * lcltime = NULL;
-static const char * directory = NULL;
-static const char * leapsec = NULL;
+static const char * psxrules;
+static const char * lcltime;
+static const char * directory;
+static const char * leapsec;
+static const char * yitcommand;
static int sflag = FALSE;
int
@@ -458,7 +418,7 @@ char * argv[];
(void) umask(umask(022) | 022);
progname = argv[0];
- while ((c = getopt(argc, argv, "d:l:p:L:vs")) != EOF)
+ while ((c = getopt(argc, argv, "d:l:p:L:vsy:")) != EOF)
switch (c) {
default:
usage();
@@ -492,6 +452,16 @@ char * argv[];
(void) exit(EXIT_FAILURE);
}
break;
+ case 'y':
+ if (yitcommand == NULL)
+ yitcommand = optarg;
+ else {
+ (void) fprintf(stderr,
+"%s: More than one -y option specified\n",
+ progname);
+ (void) exit(EXIT_FAILURE);
+ }
+ break;
case 'L':
if (leapsec == NULL)
leapsec = optarg;
@@ -513,6 +483,8 @@ char * argv[];
usage(); /* usage message by request */
if (directory == NULL)
directory = TZDIR;
+ if (yitcommand == NULL)
+ yitcommand = "sh ./yearistype";
setboundaries();
@@ -557,12 +529,20 @@ const char * const tofile;
register char * fromname;
register char * toname;
- fromname = ecpyalloc(directory);
- fromname = ecatalloc(fromname, "/");
- fromname = ecatalloc(fromname, fromfile);
- toname = ecpyalloc(directory);
- toname = ecatalloc(toname, "/");
- toname = ecatalloc(toname, tofile);
+ if (fromfile[0] == '/')
+ fromname = (char *)fromfile;
+ else {
+ fromname = ecpyalloc(directory);
+ fromname = ecatalloc(fromname, "/");
+ fromname = ecatalloc(fromname, fromfile);
+ }
+ if (tofile[0] == '/')
+ toname = (char *)tofile;
+ else {
+ toname = ecpyalloc(directory);
+ toname = ecatalloc(toname, "/");
+ toname = ecatalloc(toname, tofile);
+ }
/*
** We get to be careful here since
** there's a fair chance of root running us.
@@ -570,13 +550,19 @@ const char * const tofile;
if (!itsdir(toname))
(void) remove(toname);
if (link(fromname, toname) != 0) {
- (void) fprintf(stderr, "%s: Can't link from %s to ",
- progname, fromname);
- (void) perror(toname);
- (void) exit(EXIT_FAILURE);
+ if (mkdirs(toname) != 0)
+ (void) exit(EXIT_FAILURE);
+ if (link(fromname, toname) != 0) {
+ (void) fprintf(stderr, "%s: Can't link from %s to ",
+ progname, fromname);
+ (void) perror(toname);
+ (void) exit(EXIT_FAILURE);
+ }
}
- ifree(fromname);
- ifree(toname);
+ if (fromname != fromfile)
+ ifree(fromname);
+ if (toname != tofile)
+ ifree(toname);
}
static void
@@ -609,9 +595,14 @@ static int
itsdir(name)
const char * const name;
{
- struct stat s;
-
- return (stat(name, &s) == 0 && S_ISDIR(s.st_mode));
+ register char * myname;
+ register int accres;
+
+ myname = ecpyalloc(name);
+ myname = ecatalloc(myname, "/.");
+ accres = access(myname, 0);
+ ifree(myname);
+ return accres == 0;
}
/*
@@ -624,8 +615,8 @@ const char * const name;
static int
rcomp(cp1, cp2)
-const void * cp1;
-const void * cp2;
+const genericptr_t cp1;
+const genericptr_t cp2;
{
return strcmp(((struct rule *) cp1)->r_name,
((struct rule *) cp2)->r_name);
@@ -640,8 +631,9 @@ associate()
register int i;
if (nrules != 0)
- (void) qsort((void *) rules, (size_t) nrules,
- (size_t) sizeof *rules, rcomp);
+ (void) qsort((genericptr_t) rules,
+ (qsort_size_t) nrules,
+ (qsort_size_t) sizeof *rules, rcomp);
for (i = 0; i < nzones; ++i) {
zp = &zones[i];
zp->z_rules = NULL;
@@ -667,8 +659,7 @@ associate()
** Maybe we have a local standard time offset.
*/
eat(zp->z_filename, zp->z_linenum);
- zp->z_stdoff =
- gethms((char *)zp->z_rule, "unruly zone", TRUE);
+ zp->z_stdoff = gethms(zp->z_rule, "unruly zone", TRUE);
/*
** Note, though, that if there's no rule,
** a '%s' in the format is a bad thing.
@@ -716,8 +707,10 @@ const char * name;
fields = getfields(buf);
nfields = 0;
while (fields[nfields] != NULL) {
+ static char nada[1];
+
if (ciequal(fields[nfields], "-"))
- fields[nfields] = "";
+ fields[nfields] = nada;
++nfields;
}
if (nfields == 0) {
@@ -781,7 +774,7 @@ const char * name;
static long
gethms(string, errstring, signable)
-char * string;
+const char * string;
const char * const errstring;
const int signable;
{
@@ -848,22 +841,24 @@ register char ** const fields;
const int nfields;
{
register int i;
- char buf[132];
+ static char * buf;
if (nfields < ZONE_MINFIELDS || nfields > ZONE_MAXFIELDS) {
error("wrong number of fields on Zone line");
return FALSE;
}
if (strcmp(fields[ZF_NAME], TZDEFAULT) == 0 && lcltime != NULL) {
+ buf = erealloc(buf, 132 + strlen(TZDEFAULT));
(void) sprintf(buf,
- "\"Zone %s\" line and -l option are mutually exclusive",
+"\"Zone %s\" line and -l option are mutually exclusive",
TZDEFAULT);
error(buf);
return FALSE;
}
if (strcmp(fields[ZF_NAME], TZDEFRULES) == 0 && psxrules != NULL) {
+ buf = erealloc(buf, 132 + strlen(TZDEFRULES));
(void) sprintf(buf,
- "\"Zone %s\" line and -p option are mutually exclusive",
+"\"Zone %s\" line and -p option are mutually exclusive",
TZDEFRULES);
error(buf);
return FALSE;
@@ -871,6 +866,9 @@ const int nfields;
for (i = 0; i < nzones; ++i)
if (zones[i].z_name != NULL &&
strcmp(zones[i].z_name, fields[ZF_NAME]) == 0) {
+ buf = erealloc(buf, 132 +
+ strlen(fields[ZF_NAME]) +
+ strlen(zones[i].z_filename));
(void) sprintf(buf,
"duplicate zone name %s (file \"%s\", line %d)",
fields[ZF_NAME],
@@ -945,15 +943,20 @@ const int iscont;
fields[i_untilyear],
"only",
"",
- (nfields > i_untilmonth) ? fields[i_untilmonth] : "Jan",
+ (nfields > i_untilmonth) ?
+ fields[i_untilmonth] : "Jan",
(nfields > i_untilday) ? fields[i_untilday] : "1",
(nfields > i_untiltime) ? fields[i_untiltime] : "0");
- z.z_untiltime = rpytime(&z.z_untilrule, z.z_untilrule.r_loyear);
- if (iscont && nzones > 0 && z.z_untiltime < max_time &&
+ z.z_untiltime = rpytime(&z.z_untilrule,
+ z.z_untilrule.r_loyear);
+ if (iscont && nzones > 0 &&
z.z_untiltime > min_time &&
+ z.z_untiltime < max_time &&
+ zones[nzones - 1].z_untiltime > min_time &&
+ zones[nzones - 1].z_untiltime < max_time &&
zones[nzones - 1].z_untiltime >= z.z_untiltime) {
error("Zone continuation line end time is not after end time of previous line");
- return FALSE;
+ return FALSE;
}
}
zones = (struct zone *) erealloc((char *) zones,
@@ -984,8 +987,7 @@ const int nfields;
}
dayoff = 0;
cp = fields[LP_YEAR];
- if (sscanf((char *)cp, scheck(cp, "%d"), &year) != 1 ||
- year < min_year || year > max_year) {
+ if (sscanf(cp, scheck(cp, "%d"), &year) != 1) {
/*
* Leapin' Lizards!
*/
@@ -1015,7 +1017,7 @@ const int nfields;
++j;
}
cp = fields[LP_DAY];
- if (sscanf((char *)cp, scheck(cp, "%d"), &day) != 1 ||
+ if (sscanf(cp, scheck(cp, "%d"), &day) != 1 ||
day <= 0 || day > len_months[isleap(year)][month]) {
error("invalid day of month");
return;
@@ -1035,16 +1037,32 @@ const int nfields;
}
tod = gethms(fields[LP_TIME], "invalid time of day", FALSE);
cp = fields[LP_CORR];
- if (strcmp(cp, "+") != 0 && strcmp(cp, "") != 0) {
- /* infile() turned "-" into "" */
- error("illegal CORRECTION field on Leap line");
- return;
- }
- if ((lp = byword(fields[LP_ROLL], leap_types)) == NULL) {
- error("illegal Rolling/Stationary field on Leap line");
- return;
+ {
+ register int positive;
+ int count;
+
+ if (strcmp(cp, "") == 0) { /* infile() turns "-" into "" */
+ positive = FALSE;
+ count = 1;
+ } else if (strcmp(cp, "--") == 0) {
+ positive = FALSE;
+ count = 2;
+ } else if (strcmp(cp, "+") == 0) {
+ positive = TRUE;
+ count = 1;
+ } else if (strcmp(cp, "++") == 0) {
+ positive = TRUE;
+ count = 2;
+ } else {
+ error("illegal CORRECTION field on Leap line");
+ return;
+ }
+ if ((lp = byword(fields[LP_ROLL], leap_types)) == NULL) {
+ error("illegal Rolling/Stationary field on Leap line");
+ return;
+ }
+ leapadd(tadd(t, tod), positive, lp->l_value, count);
}
- addleap(tadd(t, tod), *cp == '+', lp->l_value);
}
static void
@@ -1125,12 +1143,9 @@ char * const timep;
"%s: panic: Invalid l_value %d\n",
progname, lp->l_value);
(void) exit(EXIT_FAILURE);
- } else if (sscanf(cp, scheck(cp, "%d"), &rp->r_loyear) != 1 ||
- rp->r_loyear < min_year || rp->r_loyear > max_year) {
- if (noise)
- error("invalid starting year");
- if (rp->r_loyear > max_year)
- return;
+ } else if (sscanf(cp, scheck(cp, "%d"), &rp->r_loyear) != 1) {
+ error("invalid starting year");
+ return;
}
cp = hiyearp;
if ((lp = byword(cp, end_years)) != NULL) switch ((int) lp->l_value) {
@@ -1148,19 +1163,10 @@ char * const timep;
"%s: panic: Invalid l_value %d\n",
progname, lp->l_value);
(void) exit(EXIT_FAILURE);
- } else if (sscanf(cp, scheck(cp, "%d"), &rp->r_hiyear) != 1 ||
- rp->r_hiyear < min_year || rp->r_hiyear > max_year) {
- if (noise)
- error("invalid ending year");
- if (rp->r_hiyear < min_year)
- return;
+ } else if (sscanf(cp, scheck(cp, "%d"), &rp->r_hiyear) != 1) {
+ error("invalid ending year");
+ return;
}
- if (rp->r_hiyear < min_year)
- return;
- if (rp->r_loyear < min_year)
- rp->r_loyear = min_year;
- if (rp->r_hiyear > max_year)
- rp->r_hiyear = max_year;
if (rp->r_loyear > rp->r_hiyear) {
error("starting year greater than ending year");
return;
@@ -1236,7 +1242,9 @@ FILE * const fp;
char buf[4];
convert(val, buf);
- (void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp);
+ (void) fwrite((genericptr_t) buf,
+ (fwrite_size_t) sizeof buf,
+ (fwrite_size_t) 1, fp);
}
static void
@@ -1245,15 +1253,11 @@ const char * const name;
{
register FILE * fp;
register int i, j;
- char fullname[BUFSIZ];
+ static char * fullname;
static struct tzhead tzh;
- if (strlen(directory) + 1 + strlen(name) >= sizeof fullname) {
- (void) fprintf(stderr,
- "%s: File name %s/%s too long\n", progname,
- directory, name);
- (void) exit(EXIT_FAILURE);
- }
+ fullname = erealloc(fullname,
+ strlen(directory) + 1 + strlen(name) + 1);
(void) sprintf(fullname, "%s/%s", directory, name);
if ((fp = fopen(fullname, "wb")) == NULL) {
if (mkdirs(fullname) != 0)
@@ -1269,7 +1273,9 @@ const char * const name;
convert(eitol(timecnt), tzh.tzh_timecnt);
convert(eitol(typecnt), tzh.tzh_typecnt);
convert(eitol(charcnt), tzh.tzh_charcnt);
- (void) fwrite((void *) &tzh, (size_t) sizeof tzh, (size_t) 1, fp);
+ (void) fwrite((genericptr_t) &tzh,
+ (fwrite_size_t) sizeof tzh,
+ (fwrite_size_t) 1, fp);
for (i = 0; i < timecnt; ++i) {
j = leapcnt;
while (--j >= 0)
@@ -1280,16 +1286,18 @@ const char * const name;
puttzcode((long) ats[i], fp);
}
if (timecnt > 0)
- (void) fwrite((void *) types, (size_t) sizeof types[0],
- (size_t) timecnt, fp);
+ (void) fwrite((genericptr_t) types,
+ (fwrite_size_t) sizeof types[0],
+ (fwrite_size_t) timecnt, fp);
for (i = 0; i < typecnt; ++i) {
puttzcode((long) gmtoffs[i], fp);
(void) putc(isdsts[i], fp);
(void) putc(abbrinds[i], fp);
}
if (charcnt != 0)
- (void) fwrite((void *) chars, (size_t) sizeof chars[0],
- (size_t) charcnt, fp);
+ (void) fwrite((genericptr_t) chars,
+ (fwrite_size_t) sizeof chars[0],
+ (fwrite_size_t) charcnt, fp);
for (i = 0; i < leapcnt; ++i) {
if (roll[i]) {
if (timecnt == 0 || trans[i] < ats[0]) {
@@ -1344,28 +1352,35 @@ const int zonecount;
typecnt = 0;
charcnt = 0;
/*
- ** Two guesses. . .the second may well be corrected later.
+ ** A guess that may well be corrected later.
*/
- gmtoff = zpfirst->z_gmtoff;
stdoff = 0;
+ /*
+ ** Thanks to Earl Chew (earl@dnd.icp.nec.com.au)
+ ** for noting the need to unconditionally initialize startttisstd.
+ */
+ startttisstd = FALSE;
#ifdef lint
starttime = 0;
- startttisstd = FALSE;
#endif /* defined lint */
for (i = 0; i < zonecount; ++i) {
- usestart = i > 0;
- useuntil = i < (zonecount - 1);
zp = &zpfirst[i];
+ usestart = i > 0 && (zp - 1)->z_untiltime > min_time;
+ useuntil = i < (zonecount - 1);
+ if (useuntil && zp->z_untiltime <= min_time)
+ continue;
+ gmtoff = zp->z_gmtoff;
eat(zp->z_filename, zp->z_linenum);
startisdst = -1;
if (zp->z_nrules == 0) {
- type = addtype(oadd(zp->z_gmtoff, zp->z_stdoff),
- zp->z_format, zp->z_stdoff != 0,
- startttisstd);
+ stdoff = zp->z_stdoff;
+ (void) strcpy(startbuf, zp->z_format);
+ type = addtype(oadd(zp->z_gmtoff, stdoff),
+ startbuf, stdoff != 0, startttisstd);
if (usestart)
addtt(starttime, type);
- gmtoff = zp->z_gmtoff;
- stdoff = zp->z_stdoff;
+ else if (stdoff != 0)
+ addtt(min_time, type);
} else for (year = min_year; year <= max_year; ++year) {
if (useuntil && year > zp->z_untilrule.r_hiyear)
break;
@@ -1395,11 +1410,11 @@ const int zonecount;
** assuming the current gmtoff and
** stdoff values.
*/
- offset = gmtoff;
- if (!zp->z_untilrule.r_todisstd)
- offset = oadd(offset, stdoff);
untiltime = tadd(zp->z_untiltime,
- -offset);
+ -gmtoff);
+ if (!zp->z_untilrule.r_todisstd)
+ untiltime = tadd(untiltime,
+ -stdoff);
}
/*
** Find the rule (of those to do, if any)
@@ -1435,21 +1450,33 @@ const int zonecount;
if (useuntil && ktime >= untiltime)
break;
if (usestart) {
- if (ktime < starttime) {
- stdoff = rp->r_stdoff;
- startoff = oadd(zp->z_gmtoff,
- rp->r_stdoff);
- (void) sprintf(startbuf,
- zp->z_format,
- rp->r_abbrvar);
- startisdst =
- rp->r_stdoff != 0;
- continue;
+ if (ktime < starttime) {
+ stdoff = rp->r_stdoff;
+ startoff = oadd(zp->z_gmtoff,
+ rp->r_stdoff);
+ (void) sprintf(startbuf, zp->z_format,
+ rp->r_abbrvar);
+ startisdst = rp->r_stdoff != 0;
+ continue;
+ }
+ usestart = FALSE;
+ if (ktime != starttime) {
+ if (startisdst < 0 &&
+ zp->z_gmtoff !=
+ (zp - 1)->z_gmtoff) {
+ type = (timecnt == 0) ? 0 :
+ types[timecnt - 1];
+ startoff = oadd(gmtoffs[type],
+ -(zp - 1)->z_gmtoff);
+ startisdst = startoff != 0;
+ startoff = oadd(startoff,
+ zp->z_gmtoff);
+ (void) strcpy(startbuf,
+ &chars[abbrinds[type]]);
}
- if (ktime != starttime &&
- startisdst >= 0)
+ if (startisdst >= 0)
addtt(starttime, addtype(startoff, startbuf, startisdst, startttisstd));
- usestart = FALSE;
+ }
}
eats(zp->z_filename, zp->z_linenum,
rp->r_filename, rp->r_linenum);
@@ -1458,9 +1485,7 @@ addtt(starttime, addtype(startoff, startbuf, startisdst, startttisstd));
offset = oadd(zp->z_gmtoff, rp->r_stdoff);
type = addtype(offset, buf, rp->r_stdoff != 0,
rp->r_todisstd);
- if (timecnt != 0 || rp->r_stdoff != 0)
- addtt(ktime, type);
- gmtoff = zp->z_gmtoff;
+ addtt(ktime, type);
stdoff = rp->r_stdoff;
}
}
@@ -1468,9 +1493,10 @@ addtt(starttime, addtype(startoff, startbuf, startisdst, startttisstd));
** Now we may get to set starttime for the next zone line.
*/
if (useuntil) {
- starttime = tadd(zp->z_untiltime,
- -gmtoffs[types[timecnt - 1]]);
+ starttime = tadd(zp->z_untiltime, -gmtoff);
startttisstd = zp->z_untilrule.r_todisstd;
+ if (!startttisstd)
+ starttime = tadd(starttime, -stdoff);
}
}
writezone(zpfirst->z_name);
@@ -1483,6 +1509,8 @@ const int type;
{
if (timecnt != 0 && type == types[timecnt - 1])
return; /* easy enough! */
+ if (timecnt == 0 && type == 0 && isdsts[0] == 0)
+ return; /* handled by default rule */
if (timecnt >= TZ_MAX_TIMES) {
error("too many transitions?!");
(void) exit(EXIT_FAILURE);
@@ -1534,14 +1562,15 @@ const int ttisstd;
}
static void
-addleap(t, positive, rolling)
+leapadd(t, positive, rolling, count)
const time_t t;
const int positive;
const int rolling;
+int count;
{
register int i, j;
- if (leapcnt >= TZ_MAX_LEAPS) {
+ if (leapcnt + (positive ? count : 1) > TZ_MAX_LEAPS) {
error("too many leap seconds");
(void) exit(EXIT_FAILURE);
}
@@ -1553,15 +1582,17 @@ const int rolling;
}
break;
}
- for (j = leapcnt; j > i; --j) {
- trans[j] = trans[j-1];
- corr[j] = corr[j-1];
- roll[j] = roll[j-1];
- }
- trans[i] = t;
- corr[i] = (positive ? 1L : -1L);
- roll[i] = rolling;
- ++leapcnt;
+ do {
+ for (j = leapcnt; j > i; --j) {
+ trans[j] = trans[j - 1];
+ corr[j] = corr[j - 1];
+ roll[j] = roll[j - 1];
+ }
+ trans[i] = t;
+ corr[i] = positive ? 1L : eitol(-count);
+ roll[i] = rolling;
+ ++leapcnt;
+ } while (positive && --count != 0);
}
static void
@@ -1584,8 +1615,8 @@ yearistype(year, type)
const int year;
const char * const type;
{
- char buf[BUFSIZ];
- int result;
+ static char * buf;
+ int result;
if (type == NULL || *type == '\0')
return TRUE;
@@ -1593,7 +1624,8 @@ const char * const type;
return (year % 4) == 0;
if (strcmp(type, "nonpres") == 0)
return (year % 4) != 0;
- (void) sprintf(buf, "yearistype %d %s", year, type);
+ buf = erealloc(buf, 132 + strlen(yitcommand) + strlen(type));
+ (void) sprintf(buf, "%s %d %s", yitcommand, year, type);
result = system(buf);
if (result == 0)
return TRUE;
@@ -1710,7 +1742,7 @@ const long t2;
register long t;
t = t1 + t2;
- if (t2 > 0 && t <= t1 || t2 < 0 && t >= t1) {
+ if ((t2 > 0 && t <= t1) || (t2 < 0 && t >= t1)) {
error("time overflow");
(void) exit(EXIT_FAILURE);
}
@@ -1729,7 +1761,7 @@ const long t2;
if (t1 == min_time && t2 < 0)
return min_time;
t = t1 + t2;
- if (t2 > 0 && t <= t1 || t2 < 0 && t >= t1) {
+ if ((t2 > 0 && t <= t1) || (t2 < 0 && t >= t1)) {
error("time overflow");
(void) exit(EXIT_FAILURE);
}
@@ -1803,7 +1835,7 @@ register const int wantedy;
} else {
dayoff = oadd(dayoff, (long) -1);
if (--wday < 0)
- wday = LDAYSPERWEEK;
+ wday = LDAYSPERWEEK - 1;
--i;
}
if (i < 0 || i >= len_months[isleap(y)][m]) {
@@ -1811,24 +1843,14 @@ register const int wantedy;
(void) exit(EXIT_FAILURE);
}
}
- if (dayoff < 0 && !tt_signed) {
- if (wantedy == rp->r_loyear)
- return min_time;
- error("time before zero");
- (void) exit(EXIT_FAILURE);
- }
+ if (dayoff < 0 && !tt_signed)
+ return min_time;
t = (time_t) dayoff * SECSPERDAY;
/*
** Cheap overflow check.
*/
- if (t / SECSPERDAY != dayoff) {
- if (wantedy == rp->r_hiyear)
- return max_time;
- if (wantedy == rp->r_loyear)
- return min_time;
- error("time overflow");
- (void) exit(EXIT_FAILURE);
- }
+ if (t / SECSPERDAY != dayoff)
+ return (dayoff > 0) ? max_time : min_time;
return tadd(t, rp->r_tod);
}
@@ -1839,7 +1861,7 @@ const char * const string;
register int i;
i = strlen(string) + 1;
- if (charcnt + i >= TZ_MAX_CHARS) {
+ if (charcnt + i > TZ_MAX_CHARS) {
error("too many, or too long, time zone abbreviations");
(void) exit(EXIT_FAILURE);
}
@@ -1881,8 +1903,9 @@ const int i;
long l;
l = i;
- if (i < 0 && l >= 0 || i == 0 && l != 0 || i > 0 && l <= 0) {
- (void) fprintf(stderr, "%s: %d did not sign extend correctly\n",
+ if ((i < 0 && l >= 0) || (i == 0 && l != 0) || (i > 0 && l <= 0)) {
+ (void) fprintf(stderr,
+ "%s: %d did not sign extend correctly\n",
progname, i);
(void) exit(EXIT_FAILURE);
}