aboutsummaryrefslogtreecommitdiffstats
path: root/misc_cmds
diff options
context:
space:
mode:
authorCameron Katri <me@cameronkatri.com>2021-05-09 14:20:58 -0400
committerCameron Katri <me@cameronkatri.com>2021-05-09 14:20:58 -0400
commit5fd83771641d15c418f747bd343ba6738d3875f7 (patch)
tree5abf0f78f680d9837dbd93d4d4c3933bb7509599 /misc_cmds
downloadapple_cmds-5fd83771641d15c418f747bd343ba6738d3875f7.tar.gz
apple_cmds-5fd83771641d15c418f747bd343ba6738d3875f7.tar.zst
apple_cmds-5fd83771641d15c418f747bd343ba6738d3875f7.zip
Import macOS userland
adv_cmds-176 basic_cmds-55 bootstrap_cmds-116.100.1 developer_cmds-66 diskdev_cmds-667.40.1 doc_cmds-53.60.1 file_cmds-321.40.3 mail_cmds-35 misc_cmds-34 network_cmds-606.40.1 patch_cmds-17 remote_cmds-63 shell_cmds-216.60.1 system_cmds-880.60.2 text_cmds-106
Diffstat (limited to 'misc_cmds')
-rw-r--r--misc_cmds/calendar/calendar.1265
-rw-r--r--misc_cmds/calendar/calendar.c153
-rw-r--r--misc_cmds/calendar/calendar.h93
-rw-r--r--misc_cmds/calendar/calendars/calendar.all20
-rw-r--r--misc_cmds/calendar/calendars/calendar.australia58
-rw-r--r--misc_cmds/calendar/calendars/calendar.birthday299
-rw-r--r--misc_cmds/calendar/calendars/calendar.christian32
-rw-r--r--misc_cmds/calendar/calendars/calendar.computer76
-rw-r--r--misc_cmds/calendar/calendars/calendar.croatian12
-rw-r--r--misc_cmds/calendar/calendars/calendar.dutch78
-rw-r--r--misc_cmds/calendar/calendars/calendar.freebsd283
-rw-r--r--misc_cmds/calendar/calendars/calendar.french12
-rw-r--r--misc_cmds/calendar/calendars/calendar.german12
-rw-r--r--misc_cmds/calendar/calendars/calendar.history476
-rw-r--r--misc_cmds/calendar/calendars/calendar.holiday563
-rw-r--r--misc_cmds/calendar/calendars/calendar.hungarian12
-rw-r--r--misc_cmds/calendar/calendars/calendar.judaic227
-rw-r--r--misc_cmds/calendar/calendars/calendar.lotr48
-rw-r--r--misc_cmds/calendar/calendars/calendar.music240
-rw-r--r--misc_cmds/calendar/calendars/calendar.newzealand25
-rw-r--r--misc_cmds/calendar/calendars/calendar.russian12
-rw-r--r--misc_cmds/calendar/calendars/calendar.southafrica23
-rw-r--r--misc_cmds/calendar/calendars/calendar.ukrainian12
-rw-r--r--misc_cmds/calendar/calendars/calendar.usholiday42
-rw-r--r--misc_cmds/calendar/calendars/calendar.world19
-rw-r--r--misc_cmds/calendar/calendars/de_AT.ISO_8859-15/calendar.feiertag62
-rw-r--r--misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.all17
-rw-r--r--misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.feiertag56
-rw-r--r--misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.geschichte198
-rw-r--r--misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.kirche32
-rw-r--r--misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.literatur54
-rw-r--r--misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.musik66
-rw-r--r--misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.wissenschaft19
-rw-r--r--misc_cmds/calendar/calendars/fr_FR.ISO8859-1/calendar.all14
-rw-r--r--misc_cmds/calendar/calendars/fr_FR.ISO8859-1/calendar.fetes630
-rw-r--r--misc_cmds/calendar/calendars/fr_FR.ISO8859-1/calendar.french12
-rw-r--r--misc_cmds/calendar/calendars/fr_FR.ISO8859-1/calendar.jferies46
-rw-r--r--misc_cmds/calendar/calendars/fr_FR.ISO8859-1/calendar.proverbes354
-rw-r--r--misc_cmds/calendar/calendars/hr_HR.ISO8859-2/calendar.all12
-rw-r--r--misc_cmds/calendar/calendars/hr_HR.ISO8859-2/calendar.praznici44
-rw-r--r--misc_cmds/calendar/calendars/hu_HU.ISO8859-2/calendar.all13
-rw-r--r--misc_cmds/calendar/calendars/hu_HU.ISO8859-2/calendar.nevnapok386
-rw-r--r--misc_cmds/calendar/calendars/hu_HU.ISO8859-2/calendar.unnepek53
-rw-r--r--misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.all17
-rw-r--r--misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.common90
-rw-r--r--misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.holiday25
-rw-r--r--misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.military27
-rw-r--r--misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.msk16
-rw-r--r--misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.orthodox34
-rw-r--r--misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.pagan42
-rw-r--r--misc_cmds/calendar/calendars/uk_UA.KOI8-U/calendar.all14
-rw-r--r--misc_cmds/calendar/calendars/uk_UA.KOI8-U/calendar.holiday22
-rw-r--r--misc_cmds/calendar/calendars/uk_UA.KOI8-U/calendar.misc18
-rw-r--r--misc_cmds/calendar/calendars/uk_UA.KOI8-U/calendar.orthodox35
-rw-r--r--misc_cmds/calendar/day.c498
-rw-r--r--misc_cmds/calendar/io.c470
-rw-r--r--misc_cmds/calendar/ostern.c111
-rw-r--r--misc_cmds/calendar/paskha.c93
-rw-r--r--misc_cmds/calendar/pathnames.h40
-rw-r--r--misc_cmds/leave/leave.1100
-rw-r--r--misc_cmds/leave/leave.c196
-rw-r--r--misc_cmds/misc_cmds.xcodeproj/project.pbxproj971
-rw-r--r--misc_cmds/ncal/calendar.c330
-rw-r--r--misc_cmds/ncal/calendar.h42
-rw-r--r--misc_cmds/ncal/easter.c101
-rw-r--r--misc_cmds/ncal/ncal.1198
-rw-r--r--misc_cmds/ncal/ncal.c1177
-rw-r--r--misc_cmds/tsort/tsort.190
-rw-r--r--misc_cmds/tsort/tsort.c443
-rw-r--r--misc_cmds/units/pathnames.h33
-rw-r--r--misc_cmds/units/units.1181
-rw-r--r--misc_cmds/units/units.c749
-rw-r--r--misc_cmds/units/units.lib732
73 files changed, 12055 insertions, 0 deletions
diff --git a/misc_cmds/calendar/calendar.1 b/misc_cmds/calendar/calendar.1
new file mode 100644
index 0000000..1d82f71
--- /dev/null
+++ b/misc_cmds/calendar/calendar.1
@@ -0,0 +1,265 @@
+.\" Copyright (c) 1989, 1990, 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.
+.\"
+.\" @(#)calendar.1 8.1 (Berkeley) 6/29/93
+.\" $FreeBSD: src/usr.bin/calendar/calendar.1,v 1.38 2005/02/13 22:25:20 ru Exp $
+.\"
+.Dd June 13, 2002
+.Dt CALENDAR 1
+.Os
+.Sh NAME
+.Nm calendar
+.Nd reminder service
+.Sh SYNOPSIS
+.Nm
+.Op Fl a
+.Op Fl A Ar num
+.Op Fl B Ar num
+.Op Fl F Ar friday
+.Op Fl f Ar calendarfile
+.Oo
+.Bk -words
+.Fl t Ar dd Ns
+.Sm off
+.Op . Ar mm Op . Ar year
+.Sm on
+.Ek
+.Oc
+.Op Fl W Ar num
+.Sh DESCRIPTION
+The
+.Nm
+utility checks the current directory for a file named
+.Pa calendar
+and displays lines that begin with either today's date
+or tomorrow's.
+On the day before a weekend (normally Friday), events for the next
+three days are displayed.
+.Pp
+The following options are available:
+.Bl -tag -width Ds
+.It Fl A Ar num
+Print lines from today and the next
+.Ar num
+days (forward, future).
+.It Fl a
+Process the ``calendar'' files of all users and mail the results
+to them.
+This requires super-user privileges.
+.It Fl B Ar num
+Print lines from today and the previous
+.Ar num
+days (backward, past).
+.It Fl F Ar friday
+Specify which day of the week is ``Friday'' (the day before the
+weekend begins).
+Default is 5.
+.It Fl f Pa calendarfile
+Use
+.Pa calendarfile
+as the default calendar file.
+.It Xo Fl t
+.Sm off
+.Ar dd
+.Op . Ar mm Op . Ar year
+.Sm on
+.Xc
+For test purposes only: set date directly to argument values.
+.It Fl W Ar num
+Print lines from today and the next
+.Ar num
+days (forward, future).
+Ignore weekends when calculating the number of days.
+.El
+.Pp
+To handle calendars in your national code table you can specify
+.Dq LANG=<locale_name>
+in the calendar file as early as possible.
+To handle national Easter
+names in the calendars
+.Dq Easter=<national_name>
+(for Catholic Easter) or
+.Dq Paskha=<national_name>
+(for Orthodox Easter) can be used.
+.Pp
+Other lines should begin with a month and day.
+They may be entered in almost any format, either numeric or as character
+strings.
+If the proper locale is set, national month and weekday
+names can be used.
+A single asterisk (``*'') matches every month.
+A day without a month matches that day of every week.
+A month without a day matches the first of that month.
+Two numbers default to the month followed by the day.
+Lines with leading tabs default to the last entered date, allowing
+multiple line specifications for a single date.
+.Pp
+``Easter'', is Easter for this year, and may be followed by a positive
+or negative integer.
+.Pp
+``Paskha'', is Orthodox Easter for this year, and may be followed by a
+positive or negative integer.
+.Pp
+Weekdays may be followed by ``-4'' ...\& ``+5'' (aliases for
+last, first, second, third, fourth) for moving events like
+``the last Monday in April''.
+.Pp
+By convention, dates followed by an asterisk are not fixed, i.e., change
+from year to year.
+.Pp
+Day descriptions start after the first <tab> character in the line;
+if the line does not contain a <tab> character, it is not displayed.
+If the first character in the line is a <tab> character, it is treated as
+a continuation of the previous line.
+.Pp
+The ``calendar'' file is preprocessed by
+.Xr cpp 1 ,
+allowing the inclusion of shared files such as lists of company holidays or
+meetings.
+If the shared file is not referenced by a full pathname,
+.Xr cpp 1
+searches in the current (or home) directory first, and then in the
+directory
+.Pa /usr/share/calendar .
+Empty lines and lines protected by the C commenting syntax
+.Pq Li /* ... */
+are ignored.
+.Pp
+Some possible calendar entries (<tab> characters highlighted by
+\fB\et\fR sequence)
+.Bd -unfilled -offset indent
+LANG=C
+Easter=Ostern
+
+#include <calendar.usholiday>
+#include <calendar.birthday>
+
+6/15\fB\et\fRJune 15 (if ambiguous, will default to month/day).
+Jun. 15\fB\et\fRJune 15.
+15 June\fB\et\fRJune 15.
+Thursday\fB\et\fREvery Thursday.
+June\fB\et\fREvery June 1st.
+15 *\fB\et\fR15th of every month.
+
+May Sun+2\fB\et\fRsecond Sunday in May (Muttertag)
+04/SunLast\fB\et\fRlast Sunday in April,
+\fB\et\fRsummer time in Europe
+Easter\fB\et\fREaster
+Ostern-2\fB\et\fRGood Friday (2 days before Easter)
+Paskha\fB\et\fROrthodox Easter
+
+.Ed
+.Sh FILES
+.Bl -tag -width calendar.christian -compact
+.It Pa calendar
+file in current directory
+.It Pa ~/.calendar
+.Pa calendar
+HOME directory.
+A chdir is done into this directory if it exists.
+.It Pa ~/.calendar/calendar
+calendar file to use if no calendar file exists in the current directory.
+.It Pa ~/.calendar/nomail
+do not send mail if this file exists.
+.El
+.Pp
+The following default calendar files are provided:
+.Pp
+.Bl -tag -width calendar.southafrica -compact
+.It Pa calendar.all
+File which includes all the default files.
+.It Pa calendar.australia
+Calendar of events in Australia.
+.It Pa calendar.birthday
+Births and deaths of famous (and not-so-famous) people.
+.It Pa calendar.christian
+Christian holidays.
+This calendar should be updated yearly by the local system administrator
+so that roving holidays are set correctly for the current year.
+.It Pa calendar.computer
+Days of special significance to computer people.
+.It Pa calendar.croatian
+Calendar of events in Croatia.
+.It Pa calendar.freebsd
+Birthdays of
+.Fx
+committers.
+.It Pa calendar.french
+Calendar of events in France.
+.It Pa calendar.german
+Calendar of events in Germany.
+.It Pa calendar.history
+Everything else, mostly U.S.\& historical events.
+.It Pa calendar.holiday
+Other holidays, including the not-well-known, obscure, and
+.Em really
+obscure.
+.It Pa calendar.judaic
+Jewish holidays.
+This calendar should be updated yearly by the local system administrator
+so that roving holidays are set correctly for the current year.
+.It Pa calendar.music
+Musical events, births, and deaths.
+Strongly oriented toward rock 'n' roll.
+.It Pa calendar.newzealand
+Calendar of events in New Zealand.
+.It Pa calendar.russian
+Russian calendar.
+.It Pa calendar.southafrica
+Calendar of events in South Africa.
+.It Pa calendar.usholiday
+U.S.\& holidays.
+This calendar should be updated yearly by the local system administrator
+so that roving holidays are set correctly for the current year.
+.It Pa calendar.world
+Includes all calendar files except for national files.
+.El
+.Sh COMPATIBILITY
+The
+.Nm
+program previously selected lines which had the correct date anywhere
+in the line.
+This is no longer true, the date is only recognized when it occurs
+at the beginning of a line.
+.Sh SEE ALSO
+.Xr at 1 ,
+.Xr cpp 1 ,
+.Xr mail 1 ,
+.Xr cron 8
+.Sh HISTORY
+A
+.Nm
+command appeared in
+.At v7 .
+.Sh BUGS
+The
+.Nm
+utility does not handle Jewish holidays and moon phases.
diff --git a/misc_cmds/calendar/calendar.c b/misc_cmds/calendar/calendar.c
new file mode 100644
index 0000000..ae30497
--- /dev/null
+++ b/misc_cmds/calendar/calendar.c
@@ -0,0 +1,153 @@
+/*
+ * Copyright (c) 1989, 1993, 1994
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+static const char copyright[] =
+"@(#) Copyright (c) 1989, 1993\n\
+ The Regents of the University of California. All rights reserved.\n";
+#endif
+
+#if 0
+#ifndef lint
+static char sccsid[] = "@(#)calendar.c 8.3 (Berkeley) 3/25/94";
+#endif
+#endif
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: src/usr.bin/calendar/calendar.c,v 1.19 2007/05/07 11:18:30 dwmalone Exp $");
+
+#include <err.h>
+#include <errno.h>
+#include <locale.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+
+#include "pathnames.h"
+#include "calendar.h"
+
+struct passwd *pw;
+int doall = 0;
+time_t f_time = 0;
+
+int f_dayAfter = 1; /* days after current date */
+int f_dayBefore = 0; /* days before current date */
+int Friday = 5; /* day before weekend */
+
+int
+main(int argc, char *argv[])
+{
+ int ch;
+
+ (void) setlocale(LC_ALL, "");
+
+ while ((ch = getopt(argc, argv, "-af:t:A:B:F:W:")) != -1)
+ switch (ch) {
+ case '-': /* backward contemptible */
+ case 'a':
+ if (getuid()) {
+ errno = EPERM;
+ err(1, NULL);
+ }
+ doall = 1;
+ break;
+
+
+ case 'f': /* other calendar file */
+ calendarFile = optarg;
+ break;
+
+ case 't': /* other date, undocumented, for tests */
+ f_time = Mktime (optarg);
+ break;
+
+ case 'W': /* we don't need no steenking Fridays */
+ Friday = -1;
+
+ /* FALLTHROUGH */
+ case 'A': /* days after current date */
+ f_dayAfter = atoi(optarg);
+ break;
+
+ case 'B': /* days before current date */
+ f_dayBefore = atoi(optarg);
+ break;
+
+ case 'F':
+ Friday = atoi(optarg);
+ break;
+
+ case '?':
+ default:
+ usage();
+ }
+ argc -= optind;
+ argv += optind;
+
+ if (argc)
+ usage();
+
+ /* use current time */
+ if (f_time <= 0)
+ (void)time(&f_time);
+
+ settime(f_time);
+
+ if (doall)
+ while ((pw = getpwent()) != NULL) {
+ (void)setegid(pw->pw_gid);
+ (void)initgroups(pw->pw_name, pw->pw_gid);
+ (void)seteuid(pw->pw_uid);
+ if (!chdir(pw->pw_dir))
+ cal();
+ (void)seteuid(0);
+ }
+ else
+ cal();
+ exit(0);
+}
+
+
+void
+usage(void)
+{
+ (void)fprintf(stderr, "%s\n%s\n",
+ "usage: calendar [-a] [-A days] [-B days] [-F friday] "
+ "[-f calendarfile]",
+ " [-t dd[.mm[.year]]] [-W days]");
+ exit(1);
+}
+
+
diff --git a/misc_cmds/calendar/calendar.h b/misc_cmds/calendar/calendar.h
new file mode 100644
index 0000000..57e84a1
--- /dev/null
+++ b/misc_cmds/calendar/calendar.h
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 1989, 1993, 1994
+ * 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.
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendar.h,v 1.12 2007/06/09 05:54:13 grog Exp $
+ */
+
+#include <sys/types.h>
+#include <sys/uio.h>
+
+extern struct passwd *pw;
+extern int doall;
+extern struct iovec header[];
+extern struct tm *tp;
+extern const char *calendarFile;
+extern int *cumdays;
+extern int yrdays;
+extern struct fixs neaster, npaskha;
+
+void cal(void);
+void closecal(FILE *);
+int getday(char *);
+int getdayvar(char *);
+int getfield(char *, char **, int *);
+int getmonth(char *);
+int geteaster(char *, int);
+int getpaskha(char *, int);
+int easter(int);
+int isnow(char *, int *, int *, int *);
+FILE *opencal(void);
+void settime(time_t);
+time_t Mktime(char *);
+void usage(void);
+void setnnames(void);
+
+#define isleap(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0)
+
+/* some flags */
+#define F_ISMONTH 0x01 /* month (Januar ...) */
+#define F_ISDAY 0x02 /* day of week (Sun, Mon, ...) */
+#define F_ISDAYVAR 0x04 /* variables day of week, like SundayLast */
+#define F_EASTER 0x08 /* Easter or easter depending days */
+
+extern int f_dayAfter; /* days after current date */
+extern int f_dayBefore; /* days bevore current date */
+extern int Friday; /* day before weekend */
+
+struct fixs {
+ char *name;
+ int len;
+};
+
+struct event *event_add(struct event *events, int month, int day, char *date,
+ int var, char *txt);
+void event_continue(struct event *events, char *txt);
+void event_print_all(FILE *fp, struct event *events);
+/* Stored calendar event */
+struct event {
+ int month;
+ int day;
+ int var;
+ char *date;
+ char *text;
+ struct event *next;
+};
diff --git a/misc_cmds/calendar/calendars/calendar.all b/misc_cmds/calendar/calendars/calendar.all
new file mode 100644
index 0000000..c7593f6
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.all
@@ -0,0 +1,20 @@
+/*
+ * International and national calendar files
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.all,v 1.10 2007/06/09 05:51:24 grog Exp $
+ */
+
+#ifndef _calendar_all_
+#define _calendar_all_
+
+#include <calendar.world>
+#include <calendar.croatian>
+#include <calendar.dutch>
+#include <calendar.french>
+#include <calendar.german>
+#include <calendar.hungarian>
+#include <calendar.southafrica>
+#include <calendar.russian>
+#include <calendar.usholiday>
+
+#endif /* !_calendar_all_ */
diff --git a/misc_cmds/calendar/calendars/calendar.australia b/misc_cmds/calendar/calendars/calendar.australia
new file mode 100644
index 0000000..32a3900
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.australia
@@ -0,0 +1,58 @@
+/*
+ * Australian holidays
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.australia,v 1.7 2006/10/06 23:20:01 flz Exp $
+ */
+
+#ifndef _calendar_australia_
+#define _calendar_australia_
+
+LANG=en_AU.ISO8859-1
+
+/* Australia */
+Jan 26 Australia Day
+Mar/SunLast Daylight Savings Time ends in ACT, NSW, SA, TAS and VIC.
+Apr 25 Anzac Day
+Jun/MonSecond Queen's Birthday Holiday (Australia, except WA)
+Oct/SunLast Daylight Savings Time starts in ACT, NSW, SA and VIC.
+
+/* ACT, NSW, common */
+Mar 18 Canberra Day (ACT)
+8/MonFirst Bank Holiday (ACT, NSW)
+10/MonFirst Labour Day (ACT, NSW, SA)
+
+/* Victoria */
+3/MonSecond Labour Day (Vic)
+Nov/TueFirst Melbourne Cup (Vic)
+
+/* Tasmania */
+Feb 11 Regatta Day (Tas)
+Feb 27 Launceston Cup (Tas)
+Mar 11 Eight Hours Day (Tas)
+Oct/SunFirst Daylight Savings Time starts in TAS.
+Oct 10 Launceston Show Day (Tas)
+Oct 24 Hobart Show Day (Tas)
+Nov 04 Recreation Day (N Tas)
+
+/* South Australia */
+May/MonThird Adelaide Cup (SA)
+Dec 26 Proclamation Day holiday (SA)
+
+/* Western Australia */
+3/MonFirst Labour Day (WA)
+6/MonFirst Foundation Day (WA)
+Sep 30 Queen's Birthday (WA)
+
+/* Northern Territory */
+5/MonFirst May Day (NT)
+7/FriFirst Alice Springs Show Day (NT)
+7/FriSecond Tennant Creek Show Day (NT)
+7/FriThird Katherine Show Day (NT)
+7/FriLast Darwin Show Day (NT)
+8/MonFirst Picnic Day (NT)
+
+/* Queensland */
+5/MonFirst Labour Day (Qld)
+Aug 14 RNA Show Day (Brisbane metro)
+
+#endif
diff --git a/misc_cmds/calendar/calendars/calendar.birthday b/misc_cmds/calendar/calendars/calendar.birthday
new file mode 100644
index 0000000..5233a0b
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.birthday
@@ -0,0 +1,299 @@
+/*
+ * Birthday
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.birthday,v 1.35 2007/10/14 08:52:29 maxim Exp $
+ */
+
+#ifndef _calendar_birthday_
+#define _calendar_birthday_
+
+01/01 J.D. Salinger born, 1919
+01/01 Paul Revere born in Boston, 1735
+01/02 Isaac Asimov born in Petrovichi, Russian SFSR, 1920
+01/04 George Washington Carver born in Missouri, 1864
+01/04 Jakob Grimm born, 1785
+01/04 Wilhelm Beer born, 1797, first astronomer to map Mars
+01/05 DeWitt B. Brace born, 1859, inventor of spectrophotometer
+01/10 Ethan Allen born, 1738
+01/11 Alexander Hamilton born in Nevis, British West Indies, 1757?
+01/12 "Long" John Baldry is born in London, 1941
+01/13 Horatio Alger born, 1834
+01/13 Sophie Tucker born, 1884
+01/13 Wilhelm Wien born, 1864, Nobel prize for blackbody radiation laws
+01/14 Albert Schweitzer born, 1875
+01/15 Martin Luther King, Jr. born
+01/17 Benjamin Franklin born in Boston, 1706
+01/19 Edgar Allan Poe born in Boston, 1809
+01/19 Robert Edward Lee born in Stratford Estate, Virginia, 1807
+01/20 George Burns born, 1898
+01/21 Lenin died, 1924
+01/21 Thomas Jonathan "Stonewall" Jackson born in Clarksburg, VA, 1824
+01/22 Sir Francis Bacon born, 1561
+01/23 Ernst Abbe born, 1840, formulated diffraction theory
+01/23 Humphrey Bogart born in New York City, 1899
+01/23 John Hancock born, 1737
+01/23 Joseph Hewes born, 1730
+01/23 Samuel Barber died, 1981
+01/24 John Belushi is born in Chicago, 1949
+01/25 Robert Burns born, 1759
+01/25 Virginia Woolf born, 1882
+01/25 W. Somerset Maugham born, 1874
+01/27 Samuel Gompers born, 1850
+01/30 Franklin Delano Roosevelt born in Hyde Park, New York, 1882
+01/31 Jackie Robinson born, 1919
+02/03 Gertrude Stein born, 1874
+02/05 Alex Harvey (SAHB) is born in Glasgow, Scotland, 1935
+02/06 King George VI of UK dies; his daughter becomes Elizabeth II, 1952
+02/07 Sinclair Lewis born, 1885
+02/08 Friedleib F. Runge born, 1795, father of paper chromatography
+02/08 Jules Verne born in Nantes, France, 1828
+02/09 George Hartmann born, 1489, designed astrolabes, timepieces, etc.
+02/10 Charles Lamb born, 1775
+02/10 William Allen White born, 1868
+02/11 Thos. Edison born, 1847
+02/11 William Henry Fox Talbot (photographic pioneer) born, 1800
+02/12 Abraham Lincoln born, 1809
+02/12 Charles Darwin born in Shrewsbury, England, 1809
+02/15 Galileo Galilei born in Pisa, Italy, 1564
+02/15 Susan B. Anthony born, 1820
+02/16 Pierre Bouguer born, 1698, founder of photometry
+02/17 Federick Eugene Ives born, 1856, pioneer of halftone
+02/17 Marion Anderson born, 1902
+02/17 T. J. Watson, Sr. born, 1874
+02/18 Ernst Mach born, 1838, philosopher & optics pioneer
+02/19 Nicolas Copernicus born in Thorn, Poland, 1473
+02/20 Ludwig Boltzmann born, 1838, atomic physics pioneer
+02/21 Alexis De Rochon born, 1838, developed the spyglass
+02/22 George Washington born, 1732
+02/22 Pierre Jules Cesar Janssen born, 1838, found hydrogen in the sun
+02/23 W.E.B. DuBois born, 1868
+02/24 Winslow Homer born, 1836
+02/25 George Harrison born in Liverpool, England, 1943
+02/25 Renoir born, 1841
+02/26 Dominique Francois Jean Arago born, 1786;
+ observed "Poisson's spot" cf June 21
+02/28 Michel de Mantaigne born, 1533
+02/29 Herman Hollerith born, 1860
+03/01 David Niven born, 1910
+03/02 Dr. Seuss born, 1904
+03/04 Casimir Pulaski born, 1747
+03/05 John Belushi dies in Los Angeles, 1982
+03/07 Sir John Frederick William Herschel born, 1792, astronomer
+03/08 Alvan Clark born, 1804, astronomer & lens manufacturer
+03/08 Howard Aiken born, 1900
+03/11 Robert Treat Paine born, 1737
+03/11 Vannevar Bush born, 1890
+03/12 Gustav Robert Kirchhoff born, 1824, physicist
+03/14 Albert Einstein born, 1879
+03/14 Casey Jones born, 1864
+03/14 Giovanni Virginia Schiaparelli born, 1835, astronomer;
+ named Mars "canals"
+03/14 Jean Baptiste Joseph Fourier born, 1768, mathematician & physicist
+03/15 Andrew "Old Hickory" Jackson, 7th President of the United States,
+ born in Waxhaw, South Carolina, 1767
+03/15 J.J. Robert's Birthday in Liberia
+03/16 George Clymer born, 1739
+03/16 James Madison, 4th President of the United States, born in King George
+ County, Virginia, 1751
+03/21 NetBSD project born, 1993
+03/24 Harry Houdini born, 1874
+03/26 Benjamin Thompson born, 1753, Count Rumford; physicist
+03/26 David Packard died, 1996; age of 83
+03/27 Wilhelm Conrad Roentgen born, 1845, discoverer of X-rays
+03/28 Pierre Simon de Laplace born, 1749, mathematician & astronomer
+03/30 Francisco Jose de Goya born, 1746
+03/30 Sean O'Casey born, 1880
+03/30 Vincent Van Gogh born, 1853
+03/31 Rene Descartes born, 1596, mathematician & philosopher
+04/02 Hans Christian Andersen born, 1805, fairy tale author
+04/02 Pope John Paul II (Karol Wojtyla) died in Vatican, 2005
+04/03 Washington Irving born, 1783
+04/05 Thomas Hobbes born, 1588, philosopher
+04/08 Buddha born, 563 BC
+04/08 David Rittenhouse born, 1732, astronomer & mathematician
+04/09 Edward Muybridge born, 1830, motion-picture pioneer
+04/09 J. Presper Eckert born, 1919
+04/10 Commodore Matthew Calbraith Perry born, 1794
+04/10 William Booth born, 1829, founder of the Salvation Army
+04/13 Thomas Jefferson, 3rd President of the United States, born Shadwell
+ Plantation, Albemarle County, Virginia, 1743
+04/14 Christian Huygen born, 1629, physicist & astronomer;
+ discovered Saturn's rings
+04/15 Leonardo da Vinci born, 1452
+04/16 Charles (Charlie) Chaplin (Sir) born in London, 1889
+04/22 Kant born, 1724
+04/27 Louis Victor de Broglie born, 1774, physicist
+04/28 James Monroe, 5th President of the United States, born in Westmoreland
+ County, Viriginia, 1758
+04/29 Jules Henri Poincare born, 1854, founder of topology
+04/29 William Randolph Hearst born in San Francisco, 1863
+04/30 Karl Friedrich Gauss born, 1777, mathematician & astronomer
+05/01 Little Walter (Marion Walter Jacobs) is born in Alexandria,
+ Louisiana, 1930
+05/02 Dr. Benjamin Spock born, 1903
+05/04 Alice Liddell born, 1852, Alice's Adventures in Wonderland
+ & Through the Looking-Glass
+05/09 Pinza died, 1957
+05/10 Fred Astaire (Frederick Austerlitz) born in Omaha, Nebraska, 1899
+05/11 Johnny Appleseed born, 1768
+05/12 Florence Nightingale born in Florence, Italy, 1820
+05/13 Arthur S. Sullivan born, 1842
+05/15 Mike Oldfield is born in Essex, England, 1953
+05/18 Pope John Paul II (Karol Wojtyla) born in Wadowice, Poland, 1920
+05/19 Ho Chi Minh born, 1890
+05/21 Plato (Aristocles) born in Athens(?), 427BC
+05/27 Hubert H. Humphrey born, 1911
+05/28 Dionne quintuplets born, 1934
+05/29 Gilbert Keith Chesterton born, 1874
+05/29 John Fitzgerald Kennedy, 35th President of the United States, born in
+ Brookline, Massachusetts, 1917
+05/29 Patrick Henry born, 1736
+05/30 Mel (Melvin Jerome) Blanc born in San Francisco, 1908
+06/01 Brigham Young born, 1801
+06/01 Marilyn Monroe born, 1928
+06/02 Edward Elgar (Sir) born in Worcester, England, 1857
+06/03 Henry James born, 1811
+06/07 (Eugene Henri) Paul Gaugin born, 1848
+06/07 George Bryan "Beau" Brummel born, 1778
+06/07 Alan Mathison Turing died, 1954
+06/08 Frank Lloyd Wright born in Richland Center, Wisconsin, 1867
+06/13 Alexander the Great dies (323BC)
+06/15 Edward (Edvard Hagerup) Grieg born in Bergen, Norway, 1843
+06/16 Hammurabi the Great dies, Babylon, 1686 BC
+06/18 M.C. Escher born, 1898
+06/19 FreeBSD project born, 1993
+06/22 Carl Hubbell born, 1903
+06/22 Meryl Streep born in Summit, New Jersey, 1949
+06/22 Konrad Zuse born in Berlin, 1919
+06/23 Alan Mathison Turing born, 1912
+06/25 Eric Arthur Blair (a.k.a. George Orwell) born, 1903
+06/27 Helen Keller born, 1880
+07/03 Franz Kafka born, 1883
+07/04 Nathaniel Hawthorne born in Salem, Massachusetts, 1804
+07/04 John Adams and Thomas Jefferson die on same day, 1826
+07/06 (Helen) Beatrix Potter born, 1866
+07/06 John Paul Jones born, 1747
+07/07 P.T. Barnum dies, 1891
+07/08 Count Ferdinand von Zeppelin born, 1838
+07/10 John Calvin born, 1509
+07/11 John Quincy Adams, 6th President of the United States, born in
+ Braintree, Massachusetts, 1767
+07/12 Henry David Thoreau born, 1817
+07/15 Clement Clarke Moore born, 1779, author of "A Visit from
+ Saint Nicholas"
+07/18 Brian Auger is born in London, 1939
+07/25 Steve Goodman is born in Chicago, 1948
+07/29 Mussolini born, 1883
+07/30 Emily Bronte born, 1818
+07/30 Henry Ford born, 1863
+08/01 Herman Melville born, 1819
+08/03 Lenny Bruce dies of a morphine overdose, 1966
+08/06 Jonathan B. Postel is born in Altadena, California, 1943
+08/08 Dustin Hoffman born in Los Angeles, 1937
+08/12 Thomas Mann's Death, 1955
+08/13 Alfred Hitchcock born, 1899
+08/13 Annie Oakley born, 1860
+08/13 Fidel Castro born, 1927
+08/17 Mae West born, 1892
+08/18 Meriwether Lewis born, 1774
+08/20 Leon Trotsky assassinated, 1940
+08/21 Christopher Robin Milne born, 1920
+08/21 Winnie-the-Pooh (Edward Bear) born (given to Christopher Robin
+ Milne), 1921
+08/23 Gene Kelly born, 1912
+08/27 Lyndon B. Johnson born, 1908
+08/29 Oliver Wendell Holmes born, 1809, physician & father of the jurist
+08/30 John W. Mauchly born, 1907
+09/05 King Louis XIV of France born, 1638
+09/05 Raquel Welch born, 1942
+09/06 Word is received that Perry has reached the North Pole and died, 1909
+09/07 James Fenimore Cooper born in Burlington, NJ, 1789
+09/07 Queen Elizabeth I of England born, 1533
+09/08 Richard ``the Lionheart'', king of England born in Oxford, 1157
+09/08 Peter Sellers born in Southsea, England, 1925
+09/09 Chinese Communist Party Chairman Mao Tse-Tung dies at age 82, 1976
+09/09 Dennis Ritchie born, 1941
+09/12 Jesse Owens born, 1913
+09/13 Walter Reed born, 1851
+09/15 Agatha Christie born in Torquay, England, 1890
+09/16 Allen Funt born in Brooklyn, NY, 1914
+09/18 Greta Garbo born, 1905
+09/18 Jimi Hendrix dies from an overdose, 1970
+09/20 Upton (Beall) Sinclair born, 1878
+09/21 H.G. (Herbert George) Wells born in Bromley, England, 1866
+09/21 Louis Joliet born, 1645
+09/22 President Garfield dies of wounds in Baltimore, 1881
+09/23 Augustus (Gaius Octavius) Caesar born in Rome, 63 BC
+09/23 Euripides born in Salamis, Greece, 480 BC
+09/24 F. Scott Fitzgerald born, 1896
+09/26 Johnny Appleseed born, 1774
+09/26 T.S. (Thomas Stearns) Eliot born in St. Louis, 1888
+09/27 Thomas Nast born, 1840
+09/28 Michelangelo Buonarroti born in Caprese, Italy, 1573
+09/28 Pompey (Gnaeus Pompeius Magnus) born in Rome, 106BC
+09/28 Seymour Cray born, 1925
+09/29 Gene Autry born, 1907
+10/01 Jimmy Carter, 39th President of United States, born in Plains, Georgia,
+ 1924
+10/02 Aristotle dies of indigestion, 322 BC
+10/02 Mohandas K. Gandhi born at Porbandar, Kathiawad, India, 1869
+10/04 John V. Atanasoff born, 1903
+10/05 Ray Kroc (founder of McDonald's) born, 1902
+10/13 Lenny Bruce is born in New York City, 1925
+10/13 Virgil (Publius Vergilius Maro) born near Mantua, Italy, 70 BC
+10/14 Dwight David Eisenhower, 34th President of the United States, born in
+ Denison, Texas, 1890
+10/14 William Penn born in London, 1644
+10/15 Pelham Grenville Wodehouse born, 1881
+10/16 Noah Webster born, 1758
+10/16 Oscar (Fingal O'Flahertie Wills) Wilde born in Dublin, 1854
+10/16 Dr. Jonathan B. Postel dies at age 55, 1998
+10/17 Richard Mentor Johnson born, 1780, 9th V.P. of U.S.
+10/21 Alfred Nobel born in Stockholm, 1833
+10/25 Pablo Picasso born in Malaga, Spain, 1881
+10/27 James Cook is born, 1728
+10/27 Theodore (Teddy) Roosevelt, 26th President of the United States, born
+ New York, New York, 1858
+10/27 Gerald M. Weinberg born, 1933
+10/30 John Adams, 2nd President of the United States, born Quincy,
+ Massachusetts 1735.
+10/31 Chiang Kai-Shek born, 1887
+10/31 Dale Evans born, 1912
+11/02 Daniel Boone born near Reading, PA, 1734
+11/04 King William III of Orange born, 1650
+11/05 Roy Rogers born, 1912
+11/09 Carl Sagan born, 1934
+11/10 Martin Luther born in Eisleben, Germany, 1483
+11/10 Soviet President Leonid Brezhnev dies at age 75, 1982
+11/11 Kurt Vonnegut, Jr, born in Indianapolis, 1922
+11/13 Robert Louis Stevenson born, 1850
+11/13 St. Augustine of Hippo born in Numidia, Algeria, 354
+11/18 Imogene Coca born, 1908
+11/18 William S. Gilbert born, 1836
+11/20 Robert Francis Kennedy (RFK) born in Boston, Massachusetts, 1925
+11/26 Charles Schulz born in Minneapolis, 1922
+11/26 Norbert Wiener born in Columbia, Missouri, 1894
+11/29 John Mayall is born in Cheshire, England, 1933
+11/30 Cleopatra died, 30 BC
+11/30 Mark Twain (Samuel Clemmens) born in Florida, Missouri, 1835
+12/01 Woody Allen (Allen Stuart Konigsberg) born in Brooklyn, NY, 1935
+12/04 Tommy Bolin dies of a heroin overdose in Miami, 1976
+12/05 Martin Van Buren, 8th President of the United States, born in
+ Kinderhook, New York, 1837
+12/05 Walt (Walter Elias) Disney born in Chicago, 1901
+12/08 Horace (Quintus Horatius Flaccus) born in Venosa (Italy), 65BC
+12/08 James (Grover) Thurber born in Columbus, Ohio, 1894
+12/10 Emily Dickenson born, 1830
+12/12 E.G. Robinson born, 1893
+12/14 George Washington dies, 1799
+12/17 William Safire (Safir) born, 1929
+12/18 Konrad Zuse died in Hünfeld, 1995
+12/20 Carl Sagan died, 1996
+12/21 Benjamin Disraeli born, 1804
+12/22 Giacomo Puccini born, 1858
+12/23 Joseph Smith born, 1805
+12/25 Isaac Newton (Sir) born in Grantham, England, 1642
+12/26 Chas. Babbage born, 1791
+12/28 John von Neumann born, 1903
+
+#endif /* !_calendar_birthday_ */
diff --git a/misc_cmds/calendar/calendars/calendar.christian b/misc_cmds/calendar/calendars/calendar.christian
new file mode 100644
index 0000000..b04b411
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.christian
@@ -0,0 +1,32 @@
+/*
+ * Christian
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.christian,v 1.10 2006/12/29 06:36:32 ru Exp $
+ */
+
+#ifndef _calendar_christian_
+#define _calendar_christian_
+
+01/05 Last (twelfth) day of Christmastide
+01/06 Epiphany
+Easter-47 Shrove Tuesday / Mardi Gras (day before Ash Wednesday)
+Easter-46 Ash Wednesday (First day of Lent)
+Easter-7 Palm Sunday (7 days before Easter)
+Easter-3 Maundy Thursday (3 days before Easter)
+Easter-2 Good Friday (2 days before Easter)
+Easter Easter Sunday
+Easter+39 Ascension Day (10 days before Pentecost)
+Easter+49 Pentecost (Whitsunday)
+Easter+50 Whitmonday
+Easter+56 Trinity Sunday (7 days after Pentecost)
+Easter+60 Corpus Christi (11 days after Pentecost)
+05/28* Rogation Sunday
+10/18 Feast Day of St. Luke
+11/SunLast First Sunday of Advent (4th Sunday before Christmas)
+12/SunFirst First Sunday of Advent (4th Sunday before Christmas)
+12/06 St. Nicholas' Day
+12/24 Christmas eve
+12/25 Christmastide begins: First day of Christmas
+12/26 Second day of Christmas (Boxing Day)
+
+#endif /* !_calendar_christian_ */
diff --git a/misc_cmds/calendar/calendars/calendar.computer b/misc_cmds/calendar/calendars/calendar.computer
new file mode 100644
index 0000000..6a4e9f0
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.computer
@@ -0,0 +1,76 @@
+/*
+ * Computer
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.computer,v 1.11 2007/09/07 03:23:06 edwin Exp $
+ */
+
+#ifndef _calendar_computer_
+#define _calendar_computer_
+
+01/01 AT&T officially divests its local Bell companies, 1984
+01/01 The Epoch (Time 0 for UNIX systems, Midnight GMT, 1970)
+01/03 Apple Computer founded, 1977
+01/08 American Telephone and Telegraph loses antitrust case, 1982
+01/08 Herman Hollerith patents first data processing computer, 1889
+01/08 Justice Dept. drops IBM suit, 1982
+01/10 First CDC 1604 delivered to Navy, 1960
+01/16 Set uid bit patent issued, to Dennis Ritchie, 1979
+01/17 Justice Dept. begins IBM anti-trust suit, 1969 (drops it, January 8, 1982)
+01/24 DG Nova introduced, 1969
+01/25 First U.S. meeting of ALGOL definition committee, 1958
+01/26 EDVAC demonstrated, 1952
+01/31 Hewlett-Packard founded, 1939
+02/11 Last day of JOSS service at RAND Corp., 1966
+02/14 First micro-on-a-chip patented (TI), 1978
+02/15 ENIAC demonstrated, 1946
+03/01 First NPL (later PL/I) report published, 1964
+03/04 First Cray-1 shipped to Los Alamos
+03/09 "GOTO considered harmful" (E.J. Dijkstra) published in CACM, 1968
+03/14 LISP introduced, 1960
+03/28 DEC announces PDP-11, 1970
+03/31 Eckert-Mauchly Computer Corp. founded, Phila, 1946
+04/01 Yourdon, Inc. founded, 1974 (It figures.)
+04/03 IBM 701 introduced, 1953
+04/04 Tandy Corp. acquires Radio Shack, 1963 (9 stores)
+04/07 IBM announces System/360, 1964
+04/09 ENIAC Project begun, 1943
+04/28 Zilog Z-80 introduced, 1976
+05/06 EDSAC demonstrated, 1949
+05/01 First BASIC program run at Dartmouth, 1964
+05/16 First report on SNOBOL distributed (within BTL), 1963
+05/19 UNIX is 10000 days old, 1997
+05/21 DEC announces PDP-8, 1965
+05/22 Ethernet first described, 1973
+05/27 First joint meeting of U.S. and European ALGOL definition cte., 1958
+05/28 First meeting of COBOL definition cte. (eventually CODASYL), 1959
+05/30 Colossus Mark II, 1944
+06/02 First issue of Computerworld, 1967
+06/07 Alan Mathison Turing died, 1954
+06/10 First Apple II shipped, 1977
+06/15 UNIVAC I delivered to the Census Bureau, 1951
+06/16 First publicized programming error at Census Bureau, 1951
+06/23 IBM unbundles software, 1969
+06/23 Alan Mathison Turing born, 1912
+06/30 First advanced degree on computer related topic: to H. Karamanian,
+ Temple Univ., Phila, 1948, for symbolic differentiation on the ENIAC
+07/08 Bell Telephone Co. formed (predecessor of AT&T), 1877
+07/08 CDC incorporated, 1957
+07/FriLast System Administrator Appreciation Day
+08/14 First Unix-based mallet created, 1954
+08/14 IBM PC announced, 1981
+08/22 CDC 6600 introduced, 1963
+08/23 DEC founded, 1957
+09/15 ACM founded, 1947
+09/20 Harlan Herrick runs first FORTRAN program, 1954
+10/02 First robotics-based CAM, 1939
+10/06 First GPSS manual published, 1961
+10/08 First VisiCalc prototype, 1978
+10/12 Univac gives contract for SIMULA compiler to Nygaard and Dahl, 1962
+10/14 British Computer Society founded, 1957
+10/15 First FORTRAN Programmer's Reference Manual published, 1956
+10/20 Zurich ALGOL report published, 1958
+10/25 DEC announces VAX-11/780
+11/04 UNIVAC I program predicts Eisenhower victory based on 7% of votes, 1952
+12/08 First Ph.D. awarded by Computer Science Dept, Univ. of Penna, 1965
+
+#endif /* !_calendar_computer_ */
diff --git a/misc_cmds/calendar/calendars/calendar.croatian b/misc_cmds/calendar/calendars/calendar.croatian
new file mode 100644
index 0000000..61d7493
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.croatian
@@ -0,0 +1,12 @@
+/*
+ * Croatian calendar files
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.croatian,v 1.5 2001/06/11 04:24:43 ache Exp $
+ */
+
+#ifndef _calendar_croatian_
+#define _calendar_croatian_
+
+#include <hr_HR.ISO8859-2/calendar.all>
+
+#endif /* !_calendar_croatian_ */
diff --git a/misc_cmds/calendar/calendars/calendar.dutch b/misc_cmds/calendar/calendars/calendar.dutch
new file mode 100644
index 0000000..1ce5562
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.dutch
@@ -0,0 +1,78 @@
+/*
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.dutch,v 1.4 2008/02/18 07:09:17 edwin Exp $
+ *
+ * Originally submitted by Edwin Groothuis <edwin@FreeBSD.org>
+ */
+
+LANG=nl_NL.ISO8859-15
+
+/*
+ * Feestdagen
+ */
+01/01 Nieuwjaar
+01/06 Driekoningen
+04/01 Een April
+04/30 Koninginendag
+05/01 Dag van de Arbeid
+05/04 Dodenherdenking
+05/05 Bevrijdingsdag
+10/04 Dierendag
+11/01 Allerheilingen
+11/02 Allerzielen
+11/11 Sint Maarten
+11/11 Elfde-van-de-elfde
+12/05 Sinterklaas avond
+12/15 Koninkrijksdag
+12/24 Kerstavond
+12/25 Eerste kerstdag
+12/26 Tweede kerstdag
+12/28 Feest der Onnozele Kinderen
+12/31 Oudjaar
+
+/*
+ * Pasen gerelateerd
+ */
+Easter-50 Carnaval
+Easter-49 Carnaval
+Easter-48 Carnaval
+Easter-47 Carnaval (Vastenavond)
+Easter-46 Aswoensdag
+Easter-7 Palmzondag
+Easter-3 Witte Donderdag
+Easter-2 Goede vrijdag
+Easter-1 Stille zaterdag
+Easter Eerste paasdag
+Easter+1 Tweede paasdag
+Easter+39 Hemelvaartsdag
+Easter+49 Eerste Pinksterdag
+Easter+50 Tweede Pinksterdag
+Easter+56 Trinitatis
+
+/*
+ * Misc
+ */
+05/SunSecond Moederdag
+06/SunThird Vaderdag
+09/TueThird Prinsjesdag
+
+/*
+ * Het koningshuis
+ */
+01/19 Prinses Margriet (1943)
+01/31 Koningin Beatrix (1938)
+02/17 Prins Willem III (1817 - 1890)
+02/18 Prinses Christina (1947)
+04/10 Prinses Ariane (2007)
+04/19 Prins Hendrik (1876 - 1934)
+04/27 Kroonprins Willem Alexander (1967)
+04/30 Koningin Juliana (1909 - 2004)
+04/30 Mr. Pieter van Vollenhoven (1939)
+05/17 Prinses Maxima (1971)
+06/26 Prinses Alexia (2005)
+06/29 Prins Bernhard (1911 - 2004)
+08/05 Prinses Irene (1939)
+08/31 Prinses Wilhelmina (1880 - 1962)
+09/06 Prins Claus (1925 - 2002)
+09/25 Prins Johan Friso (1968)
+10/11 Prins Constantijn (1969)
+12/07 Prinses Catharina-Amalia (2003)
diff --git a/misc_cmds/calendar/calendars/calendar.freebsd b/misc_cmds/calendar/calendars/calendar.freebsd
new file mode 100644
index 0000000..2cda19b
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.freebsd
@@ -0,0 +1,283 @@
+/*
+ * FreeBSD
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.freebsd,v 1.224 2008/02/05 19:34:54 antoine Exp $
+ */
+
+#ifndef _calendar_freebsd_
+#define _calendar_freebsd_
+
+01/01 Alexander Langer <alex@FreeBSD.org> born in Duesseldorf, Nordrhein-Westfalen, Germany, 1981
+01/02 Ion-Mihai "IOnut" Tetcu <itetcu@FreeBSD.org> born in Bucharest, Romania, 1980
+01/02 Patrick Li <pat@FreeBSD.org> born in Beijing, People's Republic of China, 1985
+01/03 Tetsurou Okazaki <okazaki@FreeBSD.org> born in Mobara, Chiba, Japan, 1972
+01/04 Hiroyuki Hanai <hanai@FreeBSD.org> born in Kagawa pre., Japan, 1969
+01/08 Michael L. Hostbaek <mich@FreeBSD.org> born in Copenhagen, Denmark, 1977
+01/10 Jean-Yves Lefort <jylefort@FreeBSD.org> born in Charleroi, Belgium, 1980
+01/12 Yen-Ming Lee <leeym@FreeBSD.org> born in Taipei, Taiwan, Republic of China, 1977
+01/12 Ying-Chieh Liao <ijliao@FreeBSD.org> born in Taipei, Taiwan, Republic of China, 1979
+01/16 Ariff Abdullah <ariff@FreeBSD.org> born in Kuala Lumpur, Malaysia, 1978
+01/16 Dmitry Sivachenko <demon@FreeBSD.org> born in Moscow, USSR, 1978
+01/16 Vanilla I. Shu <vanilla@FreeBSD.org> born in Taipei, Taiwan, Republic of China, 1978
+01/18 Dejan Lesjak <lesi@FreeBSD.org> born in Ljubljana, Slovenia, Yugoslavia, 1977
+01/19 Marshall Kirk McKusick <mckusick@FreeBSD.org> born in Wilmington, Delaware, United States, 1954
+01/19 Marcelo S. Araujo <araujo@FreeBSD.org> born in Joinville, Santa Catarina, Brazil, 1981
+01/19 Ruslan Ermilov <ru@FreeBSD.org> born in Simferopol, USSR, 1974
+01/20 Poul-Henning Kamp <phk@FreeBSD.org> born in Korsoer, Denmark, 1966
+01/22 Johann Visagie <wjv@FreeBSD.org> born in Cape Town, South Africa, 1970
+01/23 Hideyuki KURASHINA <rushani@FreeBSD.org> born in Niigata, Japan, 1982
+01/24 Matteo Riondato <matteo@FreeBSD.org> born in Padova, Italy, 1986
+01/25 Bernd Walter <ticso@FreeBSD.org> born in Moers, Nordrhein-Westfalen, Germany, 1974
+01/26 Andrew Gallatin <gallatin@FreeBSD.org> born in Buffalo, New York, United States, 1970
+01/27 Nick Sayer <nsayer@FreeBSD.org> born in San Diego, California, United States, 1968
+01/27 Jacques Anthony Vidrine <nectar@FreeBSD.org> born in Baton Rouge, Louisiana, United States, 1971
+01/31 Hidetoshi Shimokawa <simokawa@FreeBSD.org> born in Yokohama, Kanagawa, Japan, 1970
+02/01 Nicola Vitale <nivit@FreeBSD.org> born in Busto Arsizio, Varese, Italy, 1976
+02/01 Paul Saab <ps@FreeBSD.org> born in Champaign-Urbana, Illinois, United States, 1978
+02/01 Martin Wilke <miwi@FreeBSD.org> born in Ludwigsfelde, Brandenburg, Germany, 1980
+02/01 Christian Brueffer <brueffer@FreeBSD.org> born in Gronau, Nordrhein-Westfalen, Germany, 1982
+02/01 Juli Mallett <jmallett@FreeBSD.org> born in Washington, Pennsylvania, United States, 1985
+02/02 Diomidis D. Spinellis <dds@FreeBSD.org> born in Athens, Greece, 1967
+02/02 Yoichi Nakayama <yoichi@FreeBSD.org> born in Tsu, Mie, Japan, 1976
+02/05 Frank Laszlo <laszlof@FreeBSD.org> born in Howell, Michigan, United States, 1983
+02/10 David Greenman <dg@FreeBSD.org> born in Portland, Oregon, United States, 1968
+02/10 Paul Richards <paul@FreeBSD.org> born in Ammanford, Carmarthenshire, United Kingdom, 1968
+02/10 Simon Barner <barner@FreeBSD.org> born in Rosenheim, Bayern, Germany, 1980
+02/13 Jesper Skriver <jesper@FreeBSD.org> born in Aarhus, Denmark, 1975
+02/13 Andrey Slusar <anray@FreeBSD.org> born in Odessa, USSR, 1979
+02/13 David W. Chapman Jr. <dwcjr@FreeBSD.org> born in Bethel, Connecticut, United States, 1981
+02/14 Erwin Lansing <erwin@FreeBSD.org> born in 's-Hertogenbosch, the Netherlands, 1975
+02/14 Martin Blapp <mbr@FreeBSD.org> born in Olten, Switzerland, 1976
+02/19 Murray Stokely <murray@FreeBSD.org> born in Jacksonville, Florida, United States, 1979
+02/20 Anders Nordby <anders@FreeBSD.org> born in Oslo, Norway, 1976
+02/21 Alexey Zelkin <phantom@FreeBSD.org> born in Simferopol, Ukraine, 1978
+02/22 Brooks Davis <brooks@FreeBSD.org> born in Longview, Washington, United States, 1976
+02/22 Jake Burkholder <jake@FreeBSD.org> born in Maynooth, Ontario, Canada, 1979
+02/23 Peter Wemm <peter@FreeBSD.org> born in Perth, Western Australia, Australia, 1971
+02/23 Mathieu Arnold <mat@FreeBSD.org> born in Champigny sur Marne, Val de Marne, France, 1978
+02/24 Johan Karlsson <johan@FreeBSD.org> born in Mariannelund, Sweden, 1974
+02/24 Colin Percival <cperciva@FreeBSD.org> born in Burnaby, Canada, 1981
+02/28 Daichi GOTO <daichi@FreeBSD.org> born in Shimizu Suntou, Shizuoka, Japan, 1980
+03/01 Hye-Shik Chang <perky@FreeBSD.org> born in Daejeon, Republic of Korea, 1980
+03/02 Cy Schubert <cy@FreeBSD.org> born in Edmonton, Alberta, Canada, 1956
+03/03 Sergey Matveychuk <sem@FreeBSD.org> born in Moscow, Russian Federation, 1973
+03/03 Doug White <dwhite@FreeBSD.org> born in Eugene, Oregon, United States, 1977
+03/03 Gordon Tetlow <gordon@FreeBSD.org> born in Reno, Nevada, United States, 1978
+03/05 Philip Paeps <philip@FreeBSD.org> born in Leuven, Belgium, 1983
+03/05 Ulf Lilleengen <lulf@FreeBSD.org> born in Hamar, Norway, 1985
+03/06 Christopher Piazza <cpiazza@FreeBSD.org> born in Kamloops, British Columbia, Canada, 1981
+03/07 Michael P. Pritchard <mpp@FreeBSD.org> born in Los Angeles, California, United States, 1964
+03/07 Giorgos Keramidas <keramida@FreeBSD.org> born in Athens, Greece, 1976
+03/10 Andreas Klemm <andreas@FreeBSD.org> born in Duesseldorf, Nordrhein-Westfalen, Germany, 1963
+03/11 Soeren Straarup <xride@FreeBSD.org> born in Andst, Denmark, 1978
+03/12 Greg Lewis <glewis@FreeBSD.org> born in Adelaide, South Australia, Australia, 1969
+03/13 Alexander Leidinger <netchild@FreeBSD.org> born in Neunkirchen, Saarland, Germany, 1976
+03/13 Will Andrews <will@FreeBSD.org> born in Pontiac, Michigan, United States, 1982
+03/15 Paolo Pisati <piso@FreeBSD.org> born in Lodi, Italy, 1977
+03/15 Brian Fundakowski Feldman <green@FreeBSD.org> born in Alexandria, Virginia, United States, 1983
+03/17 Michael Smith <msmith@FreeBSD.org> born in Bankstown, New South Wales, Australia, 1971
+03/18 Koop Mast <kwm@FreeBSD.org> born in Dokkum, the Netherlands, 1981
+03/19 Mikhail Teterin <mi@FreeBSD.org> born in Kyiv, Ukraine, 1972
+03/20 MANTANI Nobutaka <nobutaka@FreeBSD.org> born in Hiroshima, Japan, 1978
+03/20 Cameron Grant <cg@FreeBSD.org> died in Hemel Hempstead, United Kingdom, 2005
+03/20 Henrik Brix Andersen <brix@FreeBSD.org> born in Aarhus, Denmark, 1978
+03/22 Brad Davis <brd@FreeBSD.org> born in Farmington, New Mexico, United States, 1983
+03/23 Daniel C. Sobral <dcs@FreeBSD.org> born in Brasilia, Distrito Federal, Brazil, 1971
+03/23 Benno Rice <benno@FreeBSD.org> born in Adelaide, South Australia, Australia, 1977
+03/24 Marcel Moolenaar <marcel@FreeBSD.org> born in Hilversum, the Netherlands, 1968
+03/24 Emanuel Haupt <ehaupt@FreeBSD.org> born in Zurich, Switzerland, 1979
+03/25 Andrew R. Reiter <arr@FreeBSD.org> born in Springfield, Massachusetts, United States, 1980
+03/27 Josef El-Rayes <josef@FreeBSD.org> born in Linz, Austria, 1982
+03/28 Sean C. Farley <scf@FreeBSD.org> born in Indianapolis, Indiana, United States, 1970
+03/29 Thierry Thomas <thierry@FreeBSD.org> born in Luxeuil les Bains, France, 1961
+04/01 Matthew Jacob <mjacob@FreeBSD.org> born in San Francisco, California, United States, 1958
+04/01 Bill Fenner <fenner@FreeBSD.org> born in Bellefonte, Pennsylvania, United States, 1971
+04/01 Peter Edwards <peadar@FreeBSD.org> born in Dublin, Ireland, 1973
+04/03 Hellmuth Michaelis <hm@FreeBSD.org> born in Kiel, Schleswig-Holstein, Germany, 1958
+04/03 Tong Liu <nemoliu@FreeBSD.org> born in Beijing, People's Republic of China, 1981
+04/08 Jordan K. Hubbard <jkh@FreeBSD.org> born in Honolulu, Hawaii, United States, 1963
+04/09 Ceri Davies <ceri@FreeBSD.org> born in Haverfordwest, Pembrokeshire, United Kingdom, 1976
+04/11 Bruce A. Mah <bmah@FreeBSD.org> born in Fresno, California, United States, 1969
+04/12 Patrick Gardella <patrick@FreeBSD.org> born in Columbus, Ohio, United States, 1967
+04/13 Oliver Braun <obraun@FreeBSD.org> born in Nuremberg, Bavaria, Germany, 1972
+04/14 Crist J. Clark <cjc@FreeBSD.org> born in Milwaukee, Wisconsin, United States, 1970
+04/15 David Malone <dwmalone@FreeBSD.org> born in Dublin, Ireland, 1973
+04/17 Dryice Liu <dryice@FreeBSD.org> born in Jinan, Shandong, China, 1975
+04/22 Joerg Wunsch <joerg@FreeBSD.org> born in Dresden, Sachsen, Germany, 1962
+04/22 Jun Kuriyama <kuriyama@FreeBSD.org> born in Matsue, Shimane, Japan, 1973
+04/29 Adam Weinberger <adamw@FreeBSD.org> born in Berkeley, California, United States, 1980
+04/29 Eric Anholt <anholt@FreeBSD.org> born in Portland, Oregon, United States, 1983
+05/02 Wojciech A. Koszek <wkoszek@FreeBSD.org> born in Czestochowa, Poland, 1987
+05/03 Brian Dean <bsd@FreeBSD.org> born in Elkins, West Virginia, United States, 1966
+05/03 Robert Nicholas Maxwell Watson <rwatson@FreeBSD.org> born in Harrow, Middlesex, United Kingdom, 1977
+05/04 Denis Peplin <den@FreeBSD.org> born in Nizhniy Novgorod, Russian Federation, 1977
+05/08 Kirill Ponomarew <krion@FreeBSD.org> born in Volgograd, Russian Federation, 1977
+05/08 Sean Kelly <smkelly@FreeBSD.org> born in Walnut Creek, California, United States, 1982
+05/09 Daniel Eischen <deischen@FreeBSD.org> born in Syracuse, New York, United States, 1963
+05/09 Aaron Dalton <aaron@FreeBSD.org> born in Boise, Idaho, United States, 1973
+05/10 Markus Brueffer <markus@FreeBSD.org> born in Gronau, Nordrhein-Westfalen, Germany, 1977
+05/11 Jesus Rodriguez <jesusr@FreeBSD.org> born in Barcelona, Spain, 1972
+05/11 Roman Kurakin <rik@FreeBSD.org> born in Moscow, USSR, 1979
+05/13 Pete Fritchman <petef@FreeBSD.org> born in Lansdale, Pennsylvania, United States, 1983
+05/14 Tatsumi Hosokawa <hosokawa@FreeBSD.org> born in Tokyo, Japan, 1968
+05/14 Shigeyuku Fukushima <shige@FreeBSD.org> born in Osaka, Japan, 1974
+05/16 Johann Kois <jkois@FreeBSD.org> born in Wolfsberg, Austria, 1975
+05/16 Marcus Alves Grando <mnag@FreeBSD.org> born in Florianopolis, Santa Catarina, Brazil, 1979
+05/17 Thomas Abthorpe <tabthorpe@FreeBSD.org> born in Port Arthur, Ontario, Canada, 1968
+05/19 Philippe Charnier <charnier@FreeBSD.org> born in Fontainebleau, France, 1966
+05/19 Ian Dowse <iedowse@FreeBSD.org> born in Dublin, Ireland, 1975
+05/21 Kris Kennaway <kris@FreeBSD.org> born in Winnipeg, Manitoba, Canada, 1978
+05/22 Clive Tong-I Lin <clive@FreeBSD.org> born in Changhua, Taiwan, Republic of China, 1978
+05/22 Michael Bushkov <bushman@FreeBSD.org> born in Rostov-on-Don, Russia, 1985
+05/23 Munechika Sumikawa <sumikawa@FreeBSD.org> born in Osaka, Osaka, Japan, 1972
+05/24 Duncan McLennan Barclay <dmlb@FreeBSD.org> born in London, Middlesex, United Kingdom, 1970
+05/24 Oliver Lehmann <oliver@FreeBSD.org> born in Karlsburg, Germany, 1981
+05/25 Tom Rhodes <trhodes@FreeBSD.org> born in Ellwood City, Pennsylvania, United States, 1981
+05/26 Jim Pirzyk <pirzyk@FreeBSD.org> born in Chicago, Illinois, United States, 1968
+05/27 Ollivier Robert <roberto@FreeBSD.org> born in Paris, France, 1967
+05/29 Wilko Bulte <wilko@FreeBSD.org> born in Arnhem, the Netherlands, 1965
+05/29 Seigo Tanimura <tanimura@FreeBSD.org> born in Kitakyushu, Fukuoka, Japan, 1976
+05/31 Ville Skytta <scop@FreeBSD.org> born in Helsinki, Finland, 1974
+06/02 Jean-Marc Zucconi <jmz@FreeBSD.org> born in Pontarlier, France, 1954
+06/02 Alexander Botero-Lowry <alexbl@FreeBSD.org> born in Austin, TX, USA, 1986
+06/03 CHOI Junho <cjh@FreeBSD.org> born in Seoul, Korea, 1974
+06/04 Julian Elischer <julian@FreeBSD.org> born in Perth, Australia, 1959
+06/04 Jason Evans <jasone@FreeBSD.org> born in Greeley, Colorado, United States, 1973
+06/04 Thomas Moestl <tmm@FreeBSD.org> born in Braunschweig, Niedersachsen, Germany, 1980
+06/06 Sergei Kolobov <sergei@FreeBSD.org> born in Karpinsk, Russian Federation, 1972
+06/06 Alan Eldridge <alane@FreeBSD.org> died in Denver, Colorado, 2003
+06/07 Benjamin Close <benjsc@FreeBSD.org> born in Adelaide, Australia, 1978
+06/07 Jimmy Olgeni <olgeni@FreeBSD.org> born in Milano, Italy, 1976
+06/17 Tilman Linneweh <arved@FreeBSD.org> born in Weinheim, Baden-Wuertemberg, Germany, 1978
+06/18 Li-Wen Hsu <lwhsu@FreeBSD.org> born in Taipei, Taiwan, Republic of China, 1984
+06/18 Roman Bogorodskiy <novel@FreeBSD.org> born in Saratov, Russian Federation, 1986
+06/19 Charlie Root <root@FreeBSD.org> born in Portland, Oregon, United States, 1993
+06/21 Niels Heinen <niels@FreeBSD.org> born in Markelo, the Netherlands, 1978
+06/24 Chris Faulhaber <jedgar@FreeBSD.org> born in Springfield, Illinois, United States, 1971
+06/26 Brian Somers <brian@FreeBSD.org> born in Dundrum, Dublin, Ireland, 1967
+06/28 Mark Santcroos <marks@FreeBSD.org> born in Rotterdam, the Netherlands, 1979
+06/28 Xin Li <delphij@FreeBSD.org> born in Beijing, People's Republic of China, 1982
+06/29 Wilfredo Sanchez Vega <wsanchez@FreeBSD.org> born in Majaguez, Puerto Rico, United States, 1972
+06/29 Daniel Harris <dannyboy@FreeBSD.org> born in Lubbock, Texas, United States, 1985
+06/29 Andrew Pantyukhin <sat@FreeBSD.org> born in Moscow, Russian Federation, 1985
+06/30 Guido van Rooij <guido@FreeBSD.org> born in Best, Noord-Brabant, the Netherlands, 1965
+07/01 Matthew Dillon <dillon@apollo.backplane.net> born in San Francisco, California, United States, 1966
+07/02 Mark Christopher Ovens <marko@FreeBSD.org> born in Preston, Lancashire, United Kingdom, 1958
+07/02 Vasil Venelinov Dimov <vd@FreeBSD.org> born in Shumen, Bulgaria, 1982
+07/04 Motoyuki Konno <motoyuki@FreeBSD.org> born in Musashino, Tokyo, Japan, 1969
+07/04 Florent Thoumie <flz@FreeBSD.org> born in Montmorency, Val d'Oise, France, 1982
+07/07 Andrew Thompson <thompsa@FreeBSD.org> born in Lower Hutt, Wellington, New Zealand, 1979
+07/07 Maxime Henrion <mux@FreeBSD.org> born in Metz, France, 1981
+07/07 George Reid <greid@FreeBSD.org> born in Frimley, Hampshire, United Kingdom, 1983
+07/10 Jung-uk Kim <jkim@FreeBSD.org> born in Seoul, Korea, 1971
+07/10 Justin Seger <jseger@FreeBSD.org> born in Harvard, Massachusetts, United States, 1981
+07/10 David Schultz <das@FreeBSD.org> born in Oakland, California, United States, 1982
+07/11 Jesus R. Camou <jcamou@FreeBSD.org> born in Hermosillo, Sonora, Mexico, 1983
+07/15 Gary Jennejohn <gj@FreeBSD.org> born in Rochester, New York, United States, 1950
+07/16 Suleiman Souhlal <ssouhlal@FreeBSD.org> born in Roma, Italy, 1983
+07/17 Michael Chin-Yuan Wu <keichii@FreeBSD.org> born in Taipei, Taiwan, Republic of China, 1980
+07/19 Masafumi NAKANE <max@FreeBSD.org> born in Okazaki, Aichi, Japan, 1972
+07/19 Simon L. Nielsen <simon@FreeBSD.org> born in Copenhagen, Denmark, 1980
+07/19 Gleb Smirnoff <glebius@FreeBSD.org> born in Kharkov, USSR, 1981
+07/22 James Housley <jeh@FreeBSD.org> born in Chicago, Illinois, United States, 1965
+07/22 Jens Schweikhardt <schweikh@FreeBSD.org> born in Waiblingen, Baden-Wuerttemberg, Germany, 1967
+07/22 Lukas Ertl <le@FreeBSD.org> born in Weissenbach/Enns, Steiermark, Austria, 1976
+07/23 Sergey A. Osokin <osa@FreeBSD.org> born in Krasnogorsky, Stepnogorsk, Akmolinskaya region, Kazakhstan, 1972
+07/24 Alexander Nedotsukov <bland@FreeBSD.org> born in Ulyanovsk, Russian Federation, 1974
+07/28 Jim Mock <jim@FreeBSD.org> born in Bethlehem, Pennsylvania, United States, 1974
+07/28 Tom Hukins <tom@FreeBSD.org> born in Manchester, United Kingdom, 1976
+07/29 Dirk Meyer <dinoex@FreeBSD.org> born in Kassel, Hessen, Germany, 1965
+08/02 Gabor Kovesdan <gabor@FreeBSD.org> born in Budapest, Hungary, 1987
+08/05 Alfred Perlstein <alfred@FreeBSD.org> born in Brooklyn, New York, United States, 1978
+08/06 Anton Berezin <tobez@FreeBSD.org> born in Dnepropetrovsk, Ukraine, 1970
+08/06 John-Mark Gurney <jmg@FreeBSD.org> born in Detroit, Michigan, United States, 1978
+08/07 Jonathan Mini <mini@FreeBSD.org> born in San Mateo, California, United States, 1979
+08/10 Peter Pentchev <roam@FreeBSD.org> born in Sofia, Bulgaria, 1977
+08/12 Joe Marcus Clarke <marcus@FreeBSD.org> born in Lakeland, Florida, United States, 1976
+08/14 Stefan Esser <se@FreeBSD.org> born in Cologne, Nordrhein-Westfalen, Germany, 1961
+08/17 Olivier Houchard <cognet@FreeBSD.org> born in Nancy, France, 1980
+08/19 Pav Lucistnik <pav@FreeBSD.org> born in Kutna Hora, Czech Republic, 1980
+08/19 Chin-San Huang <chinsan@FreeBSD.org> born in Yi-Lan, Taiwan, Republic of China, 1979
+08/20 Michael Heffner <mikeh@FreeBSD.org> born in Cleona, Pennsylvania, United States, 1981
+08/24 Mark Linimon <linimon@FreeBSD.org> born in Houston, Texas, United States, 1955
+08/25 Jean Milanez Melo <jmelo@FreeBSD.org> born in Divinopolis, Minas Gerais, Brazil, 1982
+08/25 Beech Rintoul <beech@FreeBSD.org> born in Oakland, California, United States, 1952
+08/26 Dima Ruban <dima@FreeBSD.org> born in Nalchik, USSR, 1970
+08/26 Marc Fonvieille <blackend@FreeBSD.org> born in Avignon, France, 1972
+08/26 Herve Quiroz <hq@FreeBSD.org> born in Aix-en-Provence, France, 1977
+08/27 Andrey Chernov <ache@FreeBSD.org> born in Moscow, USSR, 1966
+08/27 Tony Finch <fanf@FreeBSD.org> born in London, United Kingdom, 1974
+08/27 Michael Johnson <ahze@FreeBSD.org> born in Morganton, North Carolina, United States, 1980
+08/28 Norikatsu Shigemura <nork@FreeBSD.org> born in Fujisawa, Kanagawa, Japan, 1974
+08/29 Thomas Gellekum <tg@FreeBSD.org> born in Moenchengladbach, Nordrhein-Westfalen, Germany, 1967
+08/29 Max Laier <mlaier@FreeBSD.org> born in Karlsruhe, Germany, 1981
+09/01 Pyun YongHyeon <yongari@FreeBSD.org> born in Kimcheon, Korea, 1968
+09/03 Max Khon <fjoe@FreeBSD.org> born in Novosibirsk, USSR, 1976
+09/03 Cheng-Lung Sung <clsung@FreeBSD.org> born in Taipei, Taiwan, Republic of China, 1977
+09/05 Mark Robert Vaughan Murray <markm@FreeBSD.org> born in Harare, Mashonaland, Zimbabwe, 1961
+09/05 Adrian Harold Chadd <adrian@FreeBSD.org> born in Perth, Western Australia, Australia, 1979
+09/07 Tim Bishop <tdb@FreeBSD.org> born in Cornwall, United Kingdom, 1978
+09/08 Boris Samorodov <bsam@FreeBSD.org> born in Krasnodar, Russian Federation, 1963
+09/09 Yoshio Mita <mita@FreeBSD.org> born in Hiroshima, Japan, 1972
+09/10 Wesley R. Peters <wes@FreeBSD.org> born in Hartford, Alabama, United States, 1961
+09/12 Weongyo Jeong <weongyo@FreeBSD.org> born in Haman, Korea, 1980
+09/12 William C. Fumerola II <billf@FreeBSD.org> born in Detroit, Michigan, United States, 1981
+09/17 Maxim Bolotin <mb@FreeBSD.org> born in Rostov-on-Don, Russian Federation, 1976
+09/20 Kevin Lo <kevlo@FreeBSD.org> born in Taipei, Taiwan, Republic of China, 1972
+09/27 Neil Blakey-Milner <nbm@FreeBSD.org> born in Port Elizabeth, South Africa, 1978
+09/27 Renato Botelho <garga@FreeBSD.org> born in Araras, Sao Paulo, Brazil, 1979
+09/28 Greg Lehey <grog@FreeBSD.org> born in Melbourne, Victoria, Australia, 1948
+09/28 Alex Dupre <ale@FreeBSD.org> born in Milano, Italy, 1980
+09/29 Matthew Hunt <mph@FreeBSD.org> born in Johnstown, Pennsylvania, United States, 1976
+09/30 Hiten M. Pandya <hmp@FreeBSD.org> born in Dar-es-Salaam, Tanzania, East Africa, 1986
+10/05 Hiroki Sato <hrs@FreeBSD.org> born in Yamagata, Japan, 1977
+10/05 Chris Costello <chris@FreeBSD.org> born in Houston, Texas, United States, 1985
+10/09 Stefan Walter <stefan@FreeBSD.org> born in Werne, Nordrhein-Westfalen, 1978
+10/12 Pawel Jakub Dawidek <pjd@FreeBSD.org> born in Radzyn Podlaski, Poland, 1980
+10/15 Maxim Konovalov <maxim@FreeBSD.org> born in Khabarovsk, USSR, 1973
+10/16 Remko Lodder <remko@FreeBSD.org> born in Rotterdam, the Netherlands, 1983
+10/17 Maho NAKATA <maho@FreeBSD.org> born in Osaka, Japan, 1974
+10/18 Sheldon Hearn <sheldonh@FreeBSD.org> born in Cape Town, Western Cape, South Africa, 1974
+10/19 Nicholas Souchu <nsouch@FreeBSD.org> born in Suresnes, Hauts-de-Seine, France, 1972
+10/20 Joel Dahl <joel@FreeBSD.org> born in Lidkoping, Sweden, 1983
+10/21 Dan Moschuk <dan@FreeBSD.org> born in Halifax, Nova Scotia, Canada, 1980
+10/21 Ben Smithurst <ben@FreeBSD.org> born in Sheffield, South Yorkshire, United Kingdom, 1981
+10/22 Jean-Sebastien Pedron <dumbbell@FreeBSD.org> born in Redon, Ille-et-Vilaine, France, 1980
+10/23 Mario Sergio Fujikawa Ferreira <lioux@FreeBSD.org> born in Brasilia, Distrito Federal, Brazil, 1976
+10/25 Eric Melville <eric@FreeBSD.org> born in Los Gatos, California, United States, 1980
+10/27 Takanori Watanabe <takawata@FreeBSD.org> born in Numazu, Shizuoka, Japan, 1972
+11/05 M. Warner Losh <imp@FreeBSD.org> born in Kansas City, Kansas, United States, 1966
+11/09 Coleman Kane <cokane@FreeBSD.org> born in Cincinnati, OH, United States, 1980
+11/09 Antoine Brodin <antoine@FreeBSD.org> born in Bagnolet, France, 1981
+11/10 Gregory Neil Shapiro <gshapiro@FreeBSD.org> born in Providence, Rhode Island, United States, 1970
+11/13 John Baldwin <jhb@FreeBSD.org> born in Stuart, Virginia, United States, 1977
+11/15 Lars Engels <lme@FreeBSD.org> born in Hilden, Nordrhein-Westfalen, Germany, 1980
+11/16 Jose Maria Alcaide Salinas <jmas@FreeBSD.org> born in Madrid, Spain, 1962
+11/17 Ralf S. Engelschall <rse@FreeBSD.org> born in Dachau, Bavaria, Germany, 1972
+11/18 Thomas Quinot <thomas@FreeBSD.org> born in Paris, France, 1977
+11/19 Konstantin Belousov <kib@FreeBSD.org> born in Kiev, USSR, 1972
+11/20 Dmitry Morozovsky <marck@FreeBSD.org> born in Moscow, USSR, 1968
+11/23 Josef Lawrence Karthauser <joe@FreeBSD.org> born in Pembury, Kent, United Kingdom, 1972
+11/24 Andrey Zakhvatov <andy@FreeBSD.org> born in Chelyabinsk, Russian Federation, 1974
+11/24 Daniel Gerzo <danger@FreeBSD.org> born in Bratislava, Slovakia, 1986
+11/28 Nik Clayton <nik@FreeBSD.org> born in Peterborough, United Kingdom, 1973
+11/28 Stanislav Sedov <stas@FreeBSD.org> born in Chelyabinsk, USSR, 1985
+12/01 Hajimu Umemoto <ume@FreeBSD.org> born in Nara, Japan, 1961
+12/01 Alexey Dokuchaev <danfe@FreeBSD.org> born in Magadan, USSR, 1980
+12/03 Diane Bruce <db@FreeBSD.org> born in Ottawa, Ontario, Canada, 1952
+12/06 Stefan Farfeleder <stefanf@FreeBSD.org> born in Wien, Austria, 1980
+12/15 James FitzGibbon <jfitz@FreeBSD.org> born in Amersham, Buckinghamshire, United Kingdom, 1974
+12/15 Timur I. Bakeyev <timur@FreeBSD.org> born in Kazan, Republic of Tatarstan, USSR, 1974
+12/18 Chris Timmons <cwt@FreeBSD.org> born in Ellensburg, Washington, United States, 1964
+12/18 Dag-Erling Smorgrav <des@FreeBSD.org> born in Brussels, Belgium, 1977
+12/18 Semen Ustimenko <semenu@FreeBSD.org> born in Novosibirsk, Russian Federation, 1979
+12/21 Rong-En Fan <rafan@FreeBSD.org> born in Taipei, Taiwan, Republic of China, 1982
+12/22 Maxim Sobolev <sobomax@FreeBSD.org> born in Dnepropetrovsk, Ukraine, 1976
+12/23 Sean Chittenden <seanc@FreeBSD.org> born in Seattle, Washington, United States, 1979
+12/23 Alejandro Pulver <alepulver@FreeBSD.org> born in Buenos Aires, Argentina, 1989
+12/28 Soren Schmidt <sos@FreeBSD.org> born in Maribo, Denmark, 1960
+12/28 Ade Lovett <ade@FreeBSD.org> born in London, England, 1969
+12/28 Marius Strobl <marius@FreeBSD.org> born in Cham, Bavaria, Germany, 1978
+12/31 Edwin Groothuis <edwin@FreeBSD.org> born in Geldrop, the Netherlands, 1970
+
+#endif /* !_calendar_freebsd_ */
diff --git a/misc_cmds/calendar/calendars/calendar.french b/misc_cmds/calendar/calendars/calendar.french
new file mode 100644
index 0000000..a9af6f1
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.french
@@ -0,0 +1,12 @@
+/*
+ * French calendar file(s)
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.french,v 1.2 2002/04/29 20:57:36 dwmalone Exp $
+ */
+
+#ifndef _calendar_french_
+#define _calendar_french_
+
+#include <fr_FR.ISO8859-1/calendar.all>
+
+#endif /* !_calendar_french_ */
diff --git a/misc_cmds/calendar/calendars/calendar.german b/misc_cmds/calendar/calendars/calendar.german
new file mode 100644
index 0000000..d84e260
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.german
@@ -0,0 +1,12 @@
+/*
+ * German calendar file(s)
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.german,v 1.6 2001/06/11 04:24:43 ache Exp $
+ */
+
+#ifndef _calendar_german_
+#define _calendar_german_
+
+#include <de_DE.ISO8859-1/calendar.all>
+
+#endif /* !_calendar_german_ */
diff --git a/misc_cmds/calendar/calendars/calendar.history b/misc_cmds/calendar/calendars/calendar.history
new file mode 100644
index 0000000..e8abdb7
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.history
@@ -0,0 +1,476 @@
+/*
+ * History
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.history,v 1.35 2006/12/29 06:39:35 ru Exp $
+ */
+
+#ifndef _calendar_history_
+#define _calendar_history_
+
+01/01 Anniversary of the Triumph of the Revolution in Cuba
+01/01 Castro expels Cuban President Batista, 1959
+01/01 Churchill delivers his "Iron Curtain" speech, 1947
+01/01 First Rose Bowl; Michigan 49 - Stanford 0, 1902
+01/04 Quadrantid meteor shower (look north)
+01/05 -50 degrees F, Strawberry UT, 1913
+01/05 The FCC hears the first demonstration of FM radio, 1940
+01/05 Twelfth night
+01/06 Millard Fillmore's birthday (let's party!)
+01/08 Battle of New Orleans
+01/09 Plough Monday
+01/10 First meeting of United Nations General Assembly in London, 1946
+01/10 Thomas Paine's Common Sense published, 1776
+01/11 Anniversary of the Peoples Republic of Albania
+01/11 De Hostos' Birthday in Puerto Rico
+01/11 Milk delivered in bottles for first time, 1878
+01/11 Prithvi Jayanti in Nepal
+01/11 Surgeon General condemned cigarettes, 1964
+01/11 The Whiskey-A-Go-Go opens on Sunset Boulevard in Los Angeles, 1963
+01/14 The first "Be-In" is held in Golden Gate Park, 1967
+01/16 Prohibition begins, 1920
+01/18 Grey whale migration, California
+01/20 St. Agnes Eve (Ah, bitter chill it was...)
+01/24 Eskimo Pie patented by Christian Nelson, 1922
+01/24 Gold discovered in California at Sutter's Mill, 1848
+01/26 Sydney, New South Wales settled, 1788
+01/27 Grissom, White and Chaffe burned to death in Apollo 1, 1967
+01/27 Vietnam War cease-fire signed, 1973
+01/28 First ski tow, Woodstock VT, 1914
+01/28 Space Shuttle Challenger (51-L) explodes 74 seconds after liftoff
+ killing Scobee, Smith, McNair, Resnick, Jarvis, Onizuka and McAuliffe,
+ 1986
+01/30 Mohandas Gandhi assassinated in New Delhi by Hindu fanatic, 1948
+01/30 Tet Offensive, 1968
+01/31 "Ham" the chimpanzee soars into space aboard Mercury-Redstone 2, 1961
+01/31 Explorer I launched, 1958. Van Allen Belt discovered
+01/31 Irving Langmuir, 1881, invented tungsten filament lamp
+02/01 First TV soap: Secret Storm, 1954
+02/01 Forces led by Khomeini take over Iran, 1979
+02/01 Space Shuttle Columbia (STS-107) disintegrates 15 minutes before landing
+ killing Husband, McCool, Chawla, Clark, Ramon, Brown, and Anderson, 2003
+02/04 Cybernet inaugurated, 1969
+02/04 Patricia Hearst kidnapped by Symbionese Liberation Army, 1974
+02/08 1963 Revolution Anniversary in Iraq
+02/09 -51 degrees F, Vanderbilt MI, 1934
+02/12 US President Abraham Lincoln's real birthday
+02/12 Santa Barbara oil leak, 1969
+02/14 Bombing of Dresden, 1945
+02/15 Chicago Seven convicted, 1970
+02/16 Nylon patented, 1937
+02/16 Stephen Decatur burns US frigate in Tripoli, 1804
+02/18 Pluto discovered by Clyde Tombaugh, Lowell Observatory, AZ, 1930
+02/19 US Marines land on Iwo Jima, 1945
+02/20 John Glenn orbits the Earth 3 times, 1962
+02/21 Battle of Verdun begins, 1916 1M casualties
+02/21 First telephone directory, New Haven, Connecticut, 1878
+02/21 Malcom X shot to death in Harlem, 1965
+02/23 Lt. Calley confesses, implicates Cpt. Medina, 1971
+02/24 Impeachment proceedings against Andrew Johnson begin, 1868
+02/28 The "French Connection" drug bust occurs in Marseilles, 1972
+02/29 French and Indian raid on Deerfield MA, 1704
+03/01 Sarah Goode, Sarah Osborne, and Tituba arrested for witchcraft
+ in Salem, Massachusetts, 1692
+03/02 Blackthorn winds (New England) (Does anyone know what this is?)
+03/04 First meeting of Congress, 1789, in N.Y.C.
+03/13 "Striptease" introduced, Paris, 1894
+03/14 Teddy Roosevelt excludes Japanese laborers from continental US, 1907
+03/15 Day of the 1848 revolution in Hungary
+03/15 Buzzards return to Hinckley OH
+03/15 France assumes protectorate over Vietnam, 1874
+03/15 Watts, Los Angeles, riots kill two, injure 25, 1966
+03/15 Ides of March. Gaius Julius Caesar assassinated by senators,
+ including adoptive son Marcus Junius Brutus Caepio, 44BC
+03/16 First liquid-fuel-powered rocket flight, 1926
+03/16 MyLai Massacre; 300 non-combatant villagers killed by US infantrymen
+03/16 Robert Goddard launches first liquid-fueled rocket, Auburn MA, 1926
+03/17 Vanguard I launched, 1958. Earth proved pear-shaped
+03/18 Aleksei Leonov performs first spacewalk, 1965
+03/19 Swallows return to Capistrano
+03/20 Radio Caroline, the original British pirate radio station, sinks, 1980
+03/24 Construction of New York subway system begins, 1900
+03/25 Triangle Shirt Waist Fire, 1911
+03/26 Popeye statue unveiled, Crystal City TX Spinach Festival, 1937
+03/27 Khrushchev becomes Premier of Soviet Union, 1958
+03/28 Three Mile Island releases radioactive gas, 1979
+03/29 Swedish settled Christiana (Wilmington) DE, 1638
+03/30 Alaska purchased from Russia for $7.2 million, 1867
+03/30 Five rings around Uranus discovered, 1977
+03/30 Pencil with eraser patented, 1858
+04/01 People of superb intelligence, savoir-faire, etc. born this day.
+04/04 Martin Luther King assassinated in Memphis, Tennessee, 1968
+04/04 NATO Established, 1949
+04/06 Joseph Smith founds Mormon Church, 1830
+04/07 Albert Hofmann synthesizes LSD in Switzerland, 1943
+04/07 Alewives run, Cape Cod
+04/08 Matthew Flinders and Nicolas Baudin meet in Encounter Bay, 1802
+04/09 Lee surrenders to Grant at Appomattox Courthouse, 1865
+04/12 Confederate troops fire first shots of Civil War at Ft Sumter, 1861
+04/12 Space Shuttle Columbia launched, 1981
+04/12 Yuri Gagarin becomes the first man in space, 1961
+04/13 Laotian New Year (3 days) in Laos
+04/14 US President Abraham Lincoln shot in Ford's Theatre by John Wilkes Booth, 1865
+04/14 Titanic hits iceberg and sinks, 1912
+04/15 US President Abraham Lincoln dies, 1865
+04/15 Ray Kroc opens first McDonalds in Des Plaines, IL, 1955
+04/17 Bay of Pigs invasion crushed by Castro forces, 1961
+04/18 Einstein's Death, 1955
+04/18 First Laundromat opens, Fort Worth Texas, 1934
+04/18 San Francisco earthquake, 1906
+04/19 Landing of the "33" in Uruguay
+04/19 Warsaw Ghetto uprising, 1943
+04/20 Supreme Court unanimously rules in favor of busing, 1971
+04/21 Lyrid meteor shower
+04/22 Vladimir Ilich Ulyanov, called Lenin, Russian political leader, born in Simbirsk, 1870
+04/23 Hank Aaron hits his first home run, 1954
+04/26 William Shakespeare baptized in Stratford-on-Avon, England, 1564,
+ birthdate unknown
+04/27 Magellan killed in Philippines, 1521
+04/29 Zipper patented by Gideon Sindback, 1913
+05/01 Beltaine; Feast of the god Bel, sun god
+05/03 Anti-war protest disrupts business in Washington, 1971
+05/04 Four Kent State students are shot down by the National Guard, 1970
+05/05 John Scopes arrested for teaching evolution, Dayton, TN, 1925
+05/06 Hindenburg explodes and burns upon landing at Lakehurst, NJ, 1937
+05/07 Germany surrenders after WWII, 1945
+05/08 Beginning of ostrich mating season
+05/08 US institutes mining of Haiphong Harbor, 1972
+05/09 94 degrees, New York, 1979
+05/10 Germany invades Low Countries, 1940
+05/10 Nazi bookburning, 1933
+05/14 Beginning of Lewis and Clark Expedition, 1804
+05/14 Nation of Israel proclaimed, 1948
+05/15 Asylum for Inebriates founded, Binghamton NY, 1854
+05/17 24" rain in 11 hours, Pearl River, S. China, 1982
+05/17 Six SLA members killed in televised gun fight, 1974
+05/18 Battle of Las Piedras in Uruguay
+05/18 Napoleon crowned Emperor, 1804
+05/21 Battle of Iquique in Chile
+05/21 US explodes first hydrogen bomb, 1956
+05/22 US Civil War ends, 1865
+05/23 Israeli raid into Argentina to capture Adolf Eichmann, 1960
+05/23 Two Yetis sighted, Mt. Everest, 1953
+05/23 Federal Republic of Germany founded, 1949
+05/24 Battle of Pinchincha in Ecuador
+05/25 Oral Roberts sees 900 foot tall Jesus Christ, Tulsa OK, 1980
+05/25 Successful test of the limelight in Purfleet, England, 1830
+05/26 Congress sets first immigration quotas, 1924
+05/27 Golden Gate Bridge opens, 1937
+05/29 Edmund Hillary and Tenzing Norkay climb Mt. Everest, 1953
+05/29 First food stamps issued, 1961
+05/30 US Marines sent to Nicaragua, 1912
+06/02 Native Americans "granted" citizenship, 1924
+06/04 Roquefort cheese developed, 1070
+06/05 Robert Kennedy assassinated, 1968
+06/05 US leaves the Gold Standard, 1933
+06/06 First drive-in movie, 1933
+06/06 Normandy landing, 1944
+06/10 Death of Alexander the Great, 323 B.C.
+06/10 Denver police tear gas Jethro Tull and 2000 fans at Red Rocks, 1971
+06/11 Greeks seize Troy, 1184BC
+06/13 Pioneer flies past Neptune, and therefore out of the Solar System
+06/14 Sandpaper invented by I. Fischer, Jr., 1834
+06/15 Ben Franklin's kite experiment, 1752
+06/15 Magna Carta signed, 1215
+06/15 Series of photographs by Edward Muggeridge prove to Leland Stanford
+ that all the hooves of a horse are off the ground during the gallop,
+ 1878
+06/16 "The Blues Brothers" premieres in Chicago, 1980
+06/17 China explodes its first Hydrogen bomb, 1967
+06/17 Watergate Democratic National Committee break-in, 1972
+06/19 Julius and Ethel Rosenberg are executed in Sing-Sing prison, 1953
+06/19 Lizzie Bordon acquitted, 1893
+06/20 Victoria crowned, 1837
+06/21 Berlin airlift begins, 1948
+06/21 Sun rises over Heelstone at Stonehenge
+06/22 Civil rights workers disappear in Mississippi, 1964
+06/23 Slavery abolished in England, 1772
+06/24 Senate repeals Gulf of Tonkin resolution, 1970
+06/25 Custer's Last Stand at Little Big Horn, 1876
+06/25 North Korea invades South Korea, 1950
+06/26 Battle of Gettysburg, 1863
+06/26 St. Lawrence Seaway dedicated by Eisenhower & Queen Elizabeth II, 1959
+06/26 Toothbrush invented, 1498
+06/27 100 degrees, Fort Yukon, 1915
+06/27 Bill Graham closes the Fillmore East, 1971
+06/28 Supreme Court decides in favor of Alan Bakke, 1978
+06/30 "That" explosion in Siberia, 1908
+06/30 China and Soviet Union announce split over ideology, 1960
+07/01 Battle of Gettysburg begins, 1863
+07/03 Dog days begin
+07/04 Battles of Vicksburg and Gettysburg won by Union forces, 1863
+07/04 Cloudy, 76 degrees, Philadelphia PA, 1776
+07/04 New York abstains on Declaration of Independence vote, 1776
+07/04 Thoreau enters woods, 1845
+07/06 First `talkie' (talking motion picture) premiere in New York, 1928
+07/06 Lawrence of Arabia captures Aqaba, 1917
+07/07 First radio broadcast of "Dragnet", 1949
+07/07 Terrorists detonate four bombs on London public transport, 2005
+07/08 First public reading of the Declaration of Independence, 1776
+07/08 Liberty Bell cracks while being rung at funeral of John Marshall, 1835
+07/09 10-hour working day set by law, NH, 1847
+07/10 134 degrees in Death Valley, 1913
+07/12 Minimum wages established: 40 cents/hour, 1933
+07/13 Women first compete in Olympic games, 1908
+07/16 Detonation of the first atomic bomb at Alamagordo, NM, 1945
+07/17 Disneyland opens, 1955
+07/18 Ty Cobb gets 4000th base hit, 1927
+07/19 Five Massachusetts women executed for witchcraft, 1692
+07/20 Armstrong and Aldrin land on moon, 1969
+07/21 First Train Robbery, Jesse James gets $3000 near Adair, Iowa, 1873
+07/21 Vietnam divided at 17th parallel, 1954
+07/23 Ice cream cone introduced, St. Louis MO, 1904
+07/24 Scopes Monkey Trial, 1925
+07/30 "In God We Trust" made US motto, 1956
+07/31 Harry S. Truman dedicates N.Y. Int'l Airport @ Idlewild Field, 1948,
+ later JFK
+08/01 Lughnasa; Feast of the god Lugh, a 30 day Celtic feast centers on
+ this day
+08/03 Columbus sets sail for Cathay, 1492
+08/03 USS Nautilus crosses under north polar ice cap, 1958
+08/04 Axe murder of Andrew and Abbey Borden, 1892
+08/04 Bombing of N. Vietnam begins, 1964
+08/04 Britain declares war on Germany starting World War I, 1914
+08/06 Atomic bomb dropped on Hiroshima, 1945
+08/06 Caricom in Barbados
+08/06 Cy Young pitches first game, 1890
+08/08 Montenegro declares war on Germany, 1914
+08/08 Richard Nixon resigns the US presidency, 1974
+08/08 The Great Train Robbery -- $7,368,000, 1963
+08/09 Helter Skelter... the Charles Manson murders take place, 1969
+08/09 Persia defeats Spartan King Leonidas at Thermopylae, 480 BC
+08/09 US/Canada border defined in the Webster-Ashburton Treaty, 1842
+08/09 Atomic bomb dropped on Nagasaki, 1945
+08/09 Singapore secedes from Malaysia, 1965
+08/10 Chicago incorporated as a village of 300 people, 1833
+08/10 US and Panama agree to transfer the canal in the year 2000, 1977
+08/11 Dog days end
+08/11 France Ends War in Indochina, 1954
+08/11 Perseid meteor shower (look north; three days)
+08/12 First test flight of Space Shuttle "Enterprise" from 747, 1977
+08/12 Last US ground troops out of Vietnam, 1972
+08/13 Berlin wall erected, 1961
+08/13 Li'l Abner debut, 1934
+08/14 Social Security begins in US, 1935
+08/15 Gandhi's movement obtains independence for Pakistan and India, 1947
+08/15 Hurricane hits Plymouth Plantation, 1635
+08/16 Roller Coaster patented, 1898
+08/17 First public bath opened in N.Y., 1891
+08/18 Anti-Cigarette League of America formed
+08/19 Air Force cargo plane snares payload from Discoverer 14 spy satellite,
+ marking start of practical military reconnaissance from space, 1960
+08/19 Gail Borden patents condensed milk, 1856
+08/22 Death of King Richard III, 1485, Last of the Plantagenets
+08/22 Joe Walker sets X-15 all time altitude mark (67 miles), 1963
+08/22 St. Columbia reports seeing monster in Loch Ness, 565
+08/23 Sacco and Vanzetti executed, 1927
+08/24 "Alice's Restaurant" premieres in New York and Los Angeles, 1969
+08/24 -126.9 F at Vostok, Antarctica, 1960
+08/24 British troops burn Washington, 1814
+08/25 Gen. De Gaulle leads French forces into Paris, 1944
+08/26 19th amendment of US constitution gives women the vote, 1920
+08/27 "Tarzan of the Apes" published, 1912
+08/27 Krakatoa, Java explodes with a force of 1,300 megatons, 1883
+08/28 Martin Luther King leads over 200,000 in civil rights rally in Washington, DC, 1963
+08/29 Star in Cygnus goes nova and becomes 4th brightest in sky, 1975;
+ Nova Cygni 1975.
+08/30 75 cents a pound tariff set on opium, 1842
+08/30 Japan Stationery Co. sells first felt-tipped pen, 1960
+08/30 St. Rose of Lima in Peru
+08/30 Washington-to-Moscow hot line connected, 1963
+08/31 269 people killed after Korean Airlines 747 shot down by USSR, 1983
+08/31 Mary Anne Nichols becomes Jack the Ripper's first victim, 1888
+08/31 Non-aggression pact signed by USSR and Afghanistan, 1926
+08/31 Federation of Malaya gains independence from Great Britain, 1957
+09/01 Bobby Fischer defeats Boris Spassky in World Chess Match, 1972
+09/01 Joshua A. Norton proclaims himself 'Emperor Norton I', 1859
+09/02 Great Britain adopts Gregorian Calendar, 1752
+09/02 Japan signs unconditional surrender on US battleship `Missouri', 1945
+09/03 Richard ``the Lionheart'' crowned king of England, 1189
+09/03 Anniversary of the Founding of the Republic in San Marino
+09/05 US President Kennedy orders resumption of underground nuclear tests, 1961
+09/05 The first Continental Congress was convened in Philadelphia, 1774
+09/06 149 Pilgrims set forth from England aboard the Mayflower, 1620
+09/06 First Star Trek episode (The Man Trap) aired 1966
+09/06 US President McKinley shot, 1901
+09/06 Somhlolo in Swaziland
+09/08 "Star Trek" debuts on NBC (1966)
+09/08 Jack the Ripper kills again, Annie Chapman is second victim, 1888
+09/08 US President Ford pardons Richard M. Nixon, 1974
+09/09 California becomes the 31st state of the USA, 1850
+09/09 United Colonies is renamed the United States, 1776
+09/10 Mountain Meadows Massacre. Mormons kill Gentile wagon train, 1857
+09/11 CIA-sponsored terrorists overthrow Chilean government, murder President Allende, 1973
+09/11 Terrorists destroy World Trade Center in New York, 2001
+09/12 German paratroopers rescue Mussolini from captivity in Rome, 1943
+09/12 Germany annexes Sudetenland, 1938
+09/13 58° C (136.4° F) measured at el Azizia, Libya, 1922
+09/13 British defeat the French at Abraham near Quebec City, 1788
+09/13 Building of Hadrian's Wall begun, 122
+09/13 Chiang Kai-Shek becomes president of China, 1943
+09/14 Benjamin Franklin is sent to France as an American minister, 1778
+09/14 Salem, Massachusetts, is founded, 1629
+09/14 The US Selective Service Act establishes the first peacetime draft, 1940
+09/15 Soviet Premier Nikita Khrushchev begins his 13 day tour of the US, 1959
+09/15 The US Foreign Affairs Dept. becomes the US State Department, 1789
+09/16 The village of Shawmut, Massachusetts, becomes the city of Boston, 1630
+09/16 Malaya, Sabah, Sarawak and Singapore unite to become Malaysia, 1963
+09/17 Battle of Antietam, 1862
+09/18 Victory of Uprona in Burundi
+09/19 New Zealand women get the right to vote, 1893
+09/20 Equal Rights Party nominates Belva Lockwood for US President, 1884
+09/20 First meeting of the American Association for the Advancement of
+ Science, 1848
+09/20 First meeting of the US National Research Council, 1916
+09/20 Magellan leaves Spain on the first Round the World passage, 1519
+09/20 The Roxy Theater opens in Hollywood, 1973
+09/22 US President Lincoln issues the Emancipation Proclamation, 1862
+09/22 Special prosecutor Leon Jeworski subpoenas US President Nixon, 1974
+09/22 The first Soviet atomic bomb explodes, 1949
+09/23 Philippine President Ferdinand Marcos declares martial law, 1972
+09/23 The New York Knickerbockers becomes the first US Baseball club, 1845
+09/23 US Vice President Nixon denies campaign fund fraud with his "Checkers" speech, 1952
+09/25 Sandra Day O'Connor becomes first woman on US Supreme Court, 1981
+09/27 The first passenger was hauled in a locomotive in England, 1825
+09/28 "Pilgrim's Progress" published, 1678
+09/28 A Greek soldier runs 26+ miles after the Persian defeat at Marathon,
+ 490BC
+09/30 Red Jack kills 2, Elizabeth Stride (#3) and Catherine Eddowes (#4),
+ 1888
+09/30 The first tooth is extracted under anesthesia in Charleston, Mass, 1846
+09/30 The verdicts of the Nuremberg trials are announced, 1946
+10/01 NASA officially begins operations, 1958
+10/02 Thurgood Marshall sworn as the first black Supreme Court Justice, 1967
+10/04 Crimean war begins, 1853
+10/04 First space vehicle, Sputnik I, launched, 1957
+10/06 Antioch College is the first public school to admit men and women, 1853
+10/06 Egyptian President Anwar es-Sadat is assassinated in Cairo, 1981
+10/06 Israel is attacked by the alliance of Egypt and Syria, 1973
+10/07 Foundation of the German Democratic Republic (GDR or DDR), 1949
+10/07 Georgia Tech. beats Cumberland Univ. 222-0, 1916
+10/07 Maryland Governor Marvin Mandel sent to prison on fraud charges, 1977
+10/07 Mother Teresa of Calcutta awarded the Nobel Peace Prize, 1979
+10/07 Police stop Wilbur Mills car, Fanne Fox jumps into water, 1974
+10/08 Great Chicago Fire, 1871
+10/09 First two-way telephone conversation, 1876
+10/10 Beginning of the Wars for Independence in Cuba
+10/10 Foundation of the Workers Party in North Korea
+10/10 Mercury at Superior Conjunction with Sun. Moves into night sky. (1984)
+10/10 Spiro T. Agnew resigns as Vice-President due to income tax fraud, 1973
+10/11 "Saturday Night Live" premiers on NBC-TV, 1975
+10/11 The Gang of Four are arrested in Peking, 1976
+10/11 The first steam powered ferry ran between New York and Hoboken, 1811
+10/11 The second Vatican Ecumenical Council opens in Rome, 1962
+10/11 First broadcast of Saturday Night Live, 1975
+10/12 Bahama Natives discover Columbus of Europe lost on their shores, 1492
+10/12 Khrushchev pounds his desk with shoe during a speech to the UN, 1960
+10/12 Man O'War's last race, 1920
+10/12 Native Americans discover Columbus of Europe lost on their shores, 1492
+10/13 Italy declares war on Germany, 1943
+10/13 US Navy born, 1775, authorized by the Second Continental Congress
+10/14 Battle of Hastings won by William the Conqueror and the Normans, 1066
+10/14 Chuck Yeager breaks sound barrier, 1947
+10/15 First draft card burned, 1965
+10/18 Boston Shoemakers form first US labor org., 1648
+10/18 Soviets announce their probe took photos of the Moon's far side, 1959
+10/19 Mao Tse-tung establishes the People's Republic of China, 1949
+10/19 Napoleon's beaten army begins the long retreat from Moscow, 1812
+10/20 "Saturday Night Massacre", 1973
+10/20 OPEC embargo, 1973
+10/21 Edison makes the first practical incandescent lamp, 1879
+10/21 Guggenheim Museum opens, 1959
+10/23 Battle of Leyte Gulf begins, 1944
+10/23 Day of the 1956 revolution in Hungary
+10/23 Earth created at 6:30 AM, 4004BC.
+10/23 Swallows leave Capistrano
+10/25 The UN removes Taiwan and admits the People's Republic of China, 1971
+10/26 UN's World Health Organization declares smallpox eradicated, 1978
+10/27 New York's Boss Tweed is arrested on fraud charges, 1871
+10/27 The first New York Subway is opened, 1904
+10/28 Columbus discovers Cuba, 1492
+10/28 Constantine's army defeats forces of Maxentius at Mulvian Bridge, 312
+10/28 Harvard was founded in Massachusetts, 1636
+10/28 Statue of Liberty was dedicated on Bedloe's Island, 1886
+10/29 Stock Market Crash, 1929
+10/30 Orson Welles' "War of the Worlds" broadcast, 1938
+10/31 Luther nails 95 Theses to door of Castle Church, Wittenberg, 1517
+11/01 Austria-Hungary become two separate nations, 1918
+11/01 Puerto Rican nationalists try to kill Truman at the Blair House, 1950
+11/02 Luftwaffe completes 57 consecutive nights of bombing of London, 1940
+11/02 Two Frenchmen make the first free hot air balloon flight, 1783
+11/03 Beef rises to 3 cents a pound, IL, 1837
+11/03 Linus Pauling wins Nobel Chemistry Prize, 1954
+11/03 Sputnik II launched, 1957, bearing space dog Laika
+11/04 Iranian militants seize US embassy personnel in Teheran, 1979
+11/04 Soviet forces crush the anti-communist revolt in Hungary, 1956
+11/05 Guy Fawkes' Plot, 1605
+11/07 Abolitionist newspaperman Elijah P. Lovejoy murdered by mob, 1837
+11/07 Lewis and Clark Expedition in sight of the Pacific Ocean, 1805
+11/09 Blackout of New York, New England, and Eastern Canada, 1965
+11/09 Giant panda discovered (?!), China, 1927
+11/09 Jack the Ripper kills fifth and final victim, Jane Kelly, 1888
+11/09 Margaret Sanger forms American Birth Control League, 1921
+11/09 Roosevelt establishes the Civil Works Administration, 1933
+11/10 41 Women arrested in suffragette demonstrations near White House, 1917
+11/10 Cpt. Wirz, commandant of Andersonville Prison hanged, 1865
+11/10 Henry Stanley asks David Livingston, "Dr. Livingston, I presume?", 1871
+11/11 Washington becomes the 42nd state, 1889
+11/12 Dr. Sun Yat-sen's Birthday in Taiwan
+11/12 USA first exports oil to Europe, 1861
+11/14 Quarter Pounder price raised from $0.53 to $0.55 in violation of Nixon
+ price controls (but okayed by Price Commission after formal request
+ from McDonald's), 1971
+11/15 Niagara Falls power plant startup, 1896
+11/16 Opening of the Suez Canal, 1869
+11/17 46,000 meteoroids fall over AZ in 20 minutes, 1966
+11/17 Richard Nixon says "I am not a crook.", 1973
+11/18 First hydrogen bomb blasts Enewetok, 1952
+11/18 Local standard time zones established for US, 1883
+11/19 Gettysburg Address delivered, 1863
+11/21 Announcement of 18 1/2 minute gap on Watergate tape, 1973
+11/22 Kennedy shot in Dallas, Texas by Lee Harvey Oswald, 1963
+11/23 First broadcast of Dr. Who (longest running TV series), 1963
+11/24 Lee Harvey Oswald killed by Jack Ruby, 1963
+11/25 Alfred Nobel invents dynamite, 1867
+11/27 Alfred Nobel establishes Nobel Prize, 1895
+11/27 Friction match invented, England, 1826
+11/27 Hoosac Railroad Tunnel completed, 1873, in NW Massachusetts
+11/29 King Tut's tomb opened, 1922
+12/01 First national corn-husking championship, Alleman IA, 1924
+12/01 Martin Luther King Jr., leads black boycott of Montgomery buses, 1955
+12/01 Rosa Parks refuses to move to back of the bus (Montgomery, AL), 1953
+12/03 First neon light display, Paris, 1910
+12/03 First successful human heart transplant led by Dr. Barnard, 1967
+12/03 The Montreux Casino burns down during a Frank Zappa concert, 1971
+12/04 Washington takes leave of his officers at Fraunce's Tavern, NYC, 1783
+12/05 End of Prohibition, 1933 (at least the alcohol part)
+12/05 Phi Beta Kappa founded, 1776
+12/05 The Eighteenth Amendment repealed, ending Prohibition, 1933
+12/07 Japan bombs Pearl Harbor, 1941
+12/08 Japan enters Second World War with invasion of Pantai Sabak, Kelantan, 1941
+12/09 Ball-bearing roller skates patented, 1884
+12/10 Metric system established in France, 1799
+12/10 Nobel Peace Prize awarded each year
+12/12 First wireless message sent across Atlantic by Marconi, 1901
+12/13 Apollo 17 leaves the moon, with "last" men to walk on moon aboard, 1972
+12/13 Dartmouth College chartered, 1769
+12/13 Geminid meteor shower (look south)
+12/15 Argo Merchant oil spill, 1976
+12/15 Bill of Rights adopted, 1791
+12/15 James Naismith invents basketball, Canada, 1891
+12/15 Sitting Bull shot in head while submitting to arrest, 1890
+12/20 US buys ~1,000,000 sq. miles of Louisiana for ~$20/sq.mi.
+12/21 Phileas Fogg completes his trip around the world in less than 80 days
+12/21 Women gain the right to vote in South Australia, 1894
+12/21 Women gain the right to hold political office in South Australia, 1894
+12/24 KKK formed in Pulaski, Tenn, 1865
+12/26 DPMA founded, 1951
+12/27 APT report published, 1956
+12/27 Ether first used as anesthetic in childbirth, 1845
+12/28 Comet Kohoutek at perihelion, 1973
+12/28 Proclamation of the Province of South Australia, 1836
+12/29 Battle of Wounded knee, 1890
+12/30 First Los Angeles freeway dedicated, 1940
+12/31 St. Sylvester in Switzerland
+12/31 Winterland closes its doors, 1978
+
+#endif /* !_calendar_history_ */
diff --git a/misc_cmds/calendar/calendars/calendar.holiday b/misc_cmds/calendar/calendars/calendar.holiday
new file mode 100644
index 0000000..f3093dd
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.holiday
@@ -0,0 +1,563 @@
+/*
+ * Holiday
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.holiday,v 1.36 2007/09/07 03:23:06 edwin Exp $
+ */
+
+#ifndef _calendar_holiday_
+#define _calendar_holiday_
+
+01/01 Beginning of the Year in Japan
+01/01 Independence Day in Haiti and Sudan
+01/01 Universal Fraternity Day in Mozambique
+01/02 Ancestry Day in Haiti
+01/02 St. Berchtold's Day in Switzerland
+01/03 New Year's Holiday in Scotland
+01/03 Revolution Day in Upper Volta
+01/04 Independence Day in Burma
+01/04 Martyrs Day in Zaire
+01/06 Children's Day in Uruguay
+01/06 Three Kings' Day in Puerto Rico
+01/07 Christmas in Ethiopia
+01/07 Pioneer's Day in Liberia
+01/09 Day of the Martyrs in Panama
+01/11 Armed Forces Day in Liberia
+01/12 Zanzibar Revolution Day in Tanzania
+01/13 National Liberation Day in Togo
+01/15 Arbor Day in Jordan
+01/16 Martyrs Day in Benin
+01/18 Revolution Day in Tunisia
+01/19 Confederate Heroes Day in Texas
+01/19 Ethiopian Epiphany in Ethiopia
+01/19 Nameday of Archbishop Makarios in Cyprus
+01/20 Army Day in Mali
+01/20 National Heroes Day in Guinea-Bissau
+01/21 Our Lady of Altagracia in Dominican Republic
+01/23 Feast of St. Ildefonsus
+01/23 US National Handwriting Day
+01/24 Economic Liberation Day in Togo
+01/26 Republic Day in India
+01/MonSecond Adults Day in Japan
+01/MonThird Lee-Jackson Day in Virginia (3rd Monday)
+01/MonThird Robert E. Lee's Birthday in Alabama & Mississippi (3rd Monday)
+01/MonThird Martin Luther King Day in New York (3rd Monday)
+02/01 Chinese New Year Holiday (3 days) in Taiwan
+02/02 Candlemas
+02/04 Independence Commemoration Day in Sri Lanka
+02/05 Constitution Day in Mexico
+02/06 New Zealand Day
+02/07 Independence Day in Grenada
+02/09 St. Maron's Day in Lebanon
+02/10 Feast of St. Paul's Shipwreck, AD 60
+02/11 National Foundation Day in Japan
+02/12 Pyidaungsa Day in Burma
+02/16 Makha Bucha Day in Thailand
+02/18 Democracy Day in Nepal
+02/18 Independence Day in The Gambia
+02/23 Republic Day in Guyana
+02/24 Gregorian Calendar Day
+02/25 National Day in Kuwait
+02/27 Independence Day in Dominican Republic
+03/01 Samil Independence Movement Day in South Korea
+03/01 St. David's Day - Patron Saint of Wales
+03/02 Peasants Day in Burma
+03/02 Texas Independence day
+03/02 Victory of Adowa in Ethiopia
+03/03 Throne Day in Morocco
+03/03 Independence day (Treaty of San Stefano) in Bulgaria
+03/04 Vermont Admission Day (admitted as 14th US state in 1791)
+03/05 Independence Day in Equatorial Guinea
+03/06 Lantern Day, Bejing
+03/08 First Annual International Women's Day, 1909
+03/08 International Women's Day in former USSR
+03/08 Syrian National Day in Libyan Arab Republic
+03/08 Women's Day in Guinea-Bissau, Taiwan and Yemen Democratic Republic
+03/08 Youth Day in Zambia
+03/09 Decoration Day in Liberia
+03/09 Falgun Purnima Day in Nepal
+03/10 Labor Day in South Korea
+03/11 Johnny Appleseed Day; anniversary of the death of John Chapman
+03/12 Commonwealth Day in Swaziland
+03/12 Independence Day in Mauritius
+03/12 Moshoeshoe's Birthday in Lesotho
+03/12 Renovation Day in Gabon
+03/13 National Day in Grenada
+03/16 Black Press Day; first US Black newspaper founded in 1827
+03/17 Evacuation Day in Suffolk County, Massachusetts
+03/17 St. Patrick's Day - one of the Patron Saints of Ireland
+03/19 St. Joseph's Day, observed in Colombia, Costa Rica, Holy See,
+ Liechtenstein, San Marino, Spain, Venezuela
+03/19 Tree Planting Day in Lestho
+03/20 Independence Day in Tunisia
+03/20 Youth Day in Oklahoma
+03/20* Vernal Equinox in Japan
+03/21 Afghan New Year in Afghanistan
+03/21 Juarez' Birthday in Mexico
+03/21* Vernal Equinox in Japan
+03/22 Abolition Day in Puerto Rico
+03/23 Pakistan Day in Pakistan
+03/25 Greek Independence Day in Cyprus
+03/25 Lady Day (a.k.a. the Feast of the Annunciation)
+03/25 Maryland Day in Maryland
+03/25 National Holiday in Greece
+03/26 Independence Day in Bangladesh
+03/26 Prince Jonah Kuhio Kalanianaole Day in Hawaii
+03/27 Armed Forces Day in Burma
+03/29 Death of President Barthelemy Boganda in Central African Republic
+03/29 Memorial Day in Madagascar
+03/31 National Day in Malta
+03/MonLast Seward's Day in Alaska (last Monday)
+04/01 Youth Day in Benin
+04/02 Malvinas Day in Argentina
+04/02 Pascua Florida Day in Florida
+04/04 Ching Ming Festival in Hong Kong
+04/04 Liberation Day in Hungary
+04/04 National Day in Senegal
+04/05 Arbor Day in South Korea
+04/05 Tomb Sweeping Day in Taiwan
+04/06 Chakri Memorial Day in Thailand
+04/06 Victory Day in Ethiopia
+04/08 Fast and Prayer Day in Liberia
+04/09 Martyrs Day in Tunisia
+04/11 National Heroes Day in Costa Rica
+04/13 National Day in Chad
+04/13 Songkron Day in Thailand
+04/14 Day of the Americas in Honduras
+04/15 Bengali New Year in Bangladesh
+04/16 De Diego's Birthday celebrated in Puerto Rico
+04/16 Holy Week (5 days) in Venezuela
+04/16 Tourist Week (5 days) in Uruguay
+04/17 Burmese New Year in Burma
+04/18 Independence Day in Chile and Zimbabwe
+04/19 Declaration of Independence in Venezuela
+04/19 Republic Day in Sierra Leone
+04/21 San Jacinto Day in Texas
+04/21 Tiradentes in Brazil
+04/22 Arbor Day in Nebraska & Delaware
+04/22 Oklahoma Day in Oklahoma
+04/23 St. George's Day - Patron Saint of England
+04/24 Victory Day in Togo
+04/25 Anniversary of the Revolution in Portugal
+04/25 Anzac Day, observed in Australia, New Zealand, Tonga and Western Samoa
+04/25 Liberation Day in Italy
+04/25 National Flag Day in Swaziland
+04/26 Confederate Memorial Day in Florida & Georgia
+04/26 Union Day in Tanzania
+04/27 Independence Day in Togo
+04/29 Showa Day in Japan
+04/30 Queen's Birthday in the Netherlands, the Netherlands Antilles
+04/30 The Workers Day in Uruguay
+04/MonLast Arbor Day in Wyoming (last Monday)
+04/MonLast Confederate Memorial Day in Alabama & Mississippi (last Monday)
+04/MonThird Patriot's Day in Maine & Massachusetts (3rd Monday)
+05/01 Labor Day in many places in the USA
+05/01 May Day in many places
+05/01 US Law Day (decl. by Eisenhower)
+05/02 King's Birthday in Lesotho
+05/03 Constitution Memorial Day in Japan
+05/04 Greenery Day in Japan
+05/04 Rhode Island Independence Day
+05/05 Battle of Puebla in Mexico
+05/05 Children's Day in Japan and South Korea
+05/05 Coronation Day in Thailand
+05/05 Liberation Day in the Netherlands
+05/06 Bataan Day in Philippines
+05/06* Bank Holiday in UK
+05/07 May Day in United Kingdom
+05/08 Buddha's Birthday in South Korea
+05/08 Elections for the National Assembly in Philippines
+05/08 Truman Day in Missouri
+05/09 VE day, end of Second World War, celebrated in many countries
+05/10 Confederate Memorial Day in South Carolina
+05/10 Mothers Day in Guatemala
+05/11 Minnesota Day in Minnesota
+05/14 Anniversary of the Founding of Guinean Democratic Party in Guinea
+05/14 Buddhist Holiday (Waisak 2528) in Indonesia
+05/14 Independence Day (2 days) in Paraguay
+05/14 Unification Day in Liberia
+05/15 Kamuzu Day in Malawi
+05/15 Vesak Day, observed in Singapore and Malaysia
+05/15 Visakha Bucha Day in Thailand
+05/16 Discovery Day in Cayman Islands
+05/17 Constitution Day in Nauru and Norway
+05/18 Flag Day in Haiti
+05/18 Prayer Day in Denmark
+05/19 Youth and Sports Day in Turkey
+05/20 Mecklenburg Independence Day in North Carolina
+05/20 National Day in Cameroon
+05/20 Victoria Day in Canada
+05/22 National Heroes Day in Sri Lanka
+05/23 Commonwealth Day in Jamaica and Belize
+05/23 National Labor Day in Jamaica
+05/24 Bermuda Day in Bermuda
+05/24 Day of Slav Letters in Bulgaria
+05/25 African Freedom Day in Zimbabwe
+05/25 African Liberation Day in Chad, Mauritania and Zambia
+05/25 Anniversary of the Revolution of 1810 in Argentina
+05/25 Independence Day in Jordan
+05/25 Memorial Day in New Mexico & Puerto Rico
+05/25 Revolution in the Sudan in Libyan Arab Republic
+05/27 Afghanistan attains sovereignty, 1921
+05/27* Bank Holiday in UK
+05/28 Mothers Day in Central African Republic
+05/31 Pya Martyrs Day in Togo
+05/MonThird Memorial Day in Michigan (3rd Monday)
+06/01 Independence Days (3 days) in Western Samoa
+06/01 Madaraka Day in Kenya
+06/01 Victory Day in Tunisia
+06/02 Corpus Christi in Paraguay
+06/03 Confederate Memorial Day in Kentucky & Louisiana
+06/03 Labor Day in Bahamas
+06/03* Bank Holiday in Rep. of Ireland
+06/04 Emancipation Day in Tonga
+06/04 Queen's Birthday in New Zealand
+06/05 Constitution Day in Denmark
+06/05 Liberation Day in Seychelles
+06/06 His Majesty, Yang Di-Pertuan Agong's Birthday in Malaysia
+06/06 Memorial Day in South Korea
+06/09 Senior Citizen's Day in Oklahoma
+06/10 Camoes Day in Portugal
+06/11 King Kamehameha I Day in Hawaii
+06/11 Queen's Birthday
+06/12 Independence Day in Philippines
+06/12 Peace with Bolivia in Paraguay
+06/13 Corrective Movement in Yemen Arab Republic
+06/14 Flag Day, USA
+06/16 Bloomsday - Anniversary of Dublin events, 1904, in "Ulysses"
+06/17 Bunker Hill Day in Suffolk County, Massachusetts
+06/17 Independence Day in Iceland
+06/18 Evacuation Day in Egypt
+06/18 Queen's Birthday in Fiji
+06/19 Artigas Birthday in Uruguay
+06/19 Emancipation Day in Texas
+06/19 Labor Day in Trinidad and Tobago
+06/19 Revolution Day in Algeria
+06/20 Flag Day in Argentina
+06/20 West Virginia Day in West Virginia
+06/22 Corrective Movement in Yemen Democratic Republic
+06/22 Midsummer Eve in Finland, Sweden
+06/22 National Sovereignty Day in Haiti
+06/23 National Holiday in Luxembourg
+06/24 Battle of Carabobob in Venezuela
+06/24 Fisherman's Day in Madagascar, Mozambique and Somalia
+06/24 Kings Day in Spain
+06/24 Peasants Day in Peru
+06/24 St. Jean-Baptiste Day in Quebec
+06/28 Mothers Day in Central African Republic
+06/29 Independence Day in Seychelles
+06/30 Day of the Army in Guatemala
+06/MonFirst Jefferson Davis's Birthday in Alabama & Mississippi (1st Monday)
+06/MonFirst Jefferson Davis's Birthday in Florida, Georgia, & S. Carolina
+07/01 Dominion Day in Canada
+07/01 Freedom Day in Suriname
+07/01 Independence Day in Burundi
+07/01 National Day in Rwanda
+07/01 Republic Day in Ghana
+07/01 Union of the Somalia Republic in Somalia
+07/02 National Day in Kiribati
+07/04 Caribbean Day in Guyana
+07/04 Constitution Day in Cayman Islands
+07/04 Family Day in Lesotho
+07/04 Heroes Day in Zambia
+07/04 Kadooment Day in Barbados
+07/04 Philippine-American Friendship Day in the Philippines
+07/04 Warriors Day (2 days) in Yugoslavia
+07/05 Day of Peace and Unity in Rwanda
+07/05 Independence Day in Algeria and Venezuela
+07/07 Anniversary of the P.U.N. in Equatorial Guinea
+07/07 National Day in Malawi
+07/07 Saba Saba Day in Tanzania
+07/09 Independence Day in Argentina
+07/10 Independence Day in Bahamas
+07/11 National Holiday in the Mongolian People's Republic
+07/12 Battle of Boyne celebrated in Northern Ireland
+07/13 Buddhist Lent in Thailand
+07/14 Anniversary of the Revolution in Iraq
+07/14 French National Festival
+07/14 National Holiday in Monaco
+07/15 St. Swithin's Day
+07/16 Presidents Day in Botswana
+07/17 Constitution Day in South Korea
+07/17 July Revolution in Iraq
+07/17 Munoz Rivera's Birthday (celebrated in Puerto Rico)
+07/17 Public Holiday in Botswana
+07/18 Constitution Day in Uruguay
+07/18 Liberation Day in Nicaragua
+07/19 Martyrs Day in Burma
+07/20 Independence Day in Colombia
+07/21 National Holiday in Belgium
+07/22 King's Birthday in Swaziland
+07/22 National Day in Poland
+07/23 Anniversary of the Revolution in Egypt
+07/23 Egyptian National Day in Syrian Arab Republic
+07/23 Remembrance Day in Papua New Guinea
+07/24 Pioneer Day in Utah
+07/24 Simon Bolivar's Day in Ecuador and Venezuela
+07/25 Constitution Day in Puerto Rico
+07/25 National Rebellion Day (3 days) in Cuba
+07/25 Republic Day in Tunisia
+07/25 St. James, Patron Saint in Spain
+07/26 Independence Day in Liberia
+07/26 National Day in Maldives
+07/27 Barbosa's Birthday (celebrated in Puerto Rico)
+07/28 Independence Days (2 days) in Peru
+07/29 Olsok Eve in Norway to commemorate Norway's Viking King St. Olav
+07/29 Rain Day in Waynesburg, PA
+07/31 Revolution Day in Congo
+07/MonThird Day of Sea in Japan
+08/01 Discovery Day in Trinidad and Tobago
+08/01 Emancipation Day in Granada
+08/01 Founding of Asuncion in Paraguay
+08/01 Freedom Day in Guyana
+08/01 National Day in Switzerland
+08/01 National Holidays (5 days) in El Salvador
+08/01 Parent's Day in Zaire
+08/02 Our Lady of Los Angeles in Costa Rica
+08/03 Independence Day in Jamaica and Niger
+08/03 Massacre of the Pidjiguiti in Buinea-bissau
+08/03 Memorial Day of Archbishop Makarios in Cyprus
+08/04 Freedom Day in Guyana
+08/05* Bank Holiday in Scotland and Northern Ireland
+08/06 Bank Holiday in British Columbia, Fiji, Iceland, Ireland, Ontario
+08/06 Emancipation Day in Bahamas
+08/06 Independence Day in Bolivia
+08/07 Battle of Boyaca in Colombia
+08/09 National Day in Singapore
+08/10 Independence Day in Ecuador
+08/11 Heroes Day (2 days) in Zimbabwe
+08/11 Independence Day in Chad
+08/11 King Hussein's Accession to the Throne in Jordan
+08/12 Queen's Birthday in Thailand
+08/13 Proclamation of Independence in Central African Republic
+08/13 Women's Day in Tunisia
+08/14 Independence Day in Pakistan
+08/14 VJ Day, 1945
+08/14 Waddi Dhahab in Morocco
+08/15 Founding of Ascuncion in Paraguay
+08/15 Independence Day in India
+08/15 Liberation Day in South Korea
+08/15 National Day in Congo
+08/15 Santa Maria in Malta
+08/16 Bennington Battle Day in Vermont
+08/16 Independence Days (3 days) in Gabon
+08/16 Restoration Day in Dominican Republic
+08/17 Anniversary of the Death of General San Martin in Argentina
+08/17 Independence Day in Indonesia
+08/19 Independence Day in Afghanistan
+08/20 Constitution Day in Hungary
+08/24 National Flag Day in Liberia
+08/25 Constitution Day in Paraguay
+08/25 Independence Day in Uruguay
+08/26 Susan B. Anthony Day in Massachusetts
+08/26* Bank Holiday in England and Wales
+08/27 Liberation Day in Hong Kong
+08/28 Heroes Day in Philippines
+08/30 Huey P. Long Day in Louisiana
+08/30 Victory Day in Turkey
+08/31 Independence Day (Merdeka) in Malaysia
+08/31 Independence Day in Trinidad and Tobago
+08/31 Pashtoonian Day in Afghanistan
+08/FriThird Admission Day in Hawaii, 1984 (3rd Friday)
+09/01 Army Day in Chile
+09/03 Independence Day in Qatar
+09/03 Memorial Day in Tunisia
+09/06 Defense of Pakistan Day in Pakistan
+09/06 Unification of Bulgaria
+09/07 Independence Day in Brazil
+09/09 Admission Day in California
+09/09 National Day in North Korea
+09/10 Korean Thanksgiving Day (Chusuk) in South Korea
+09/10 Moon Festival in Taiwan
+09/10 National Day in Belize
+09/11 Anniversary of military coup in Chile
+09/11 Ethiopian New Year in Ethiopia
+09/11 National Holiday in Chile
+09/12 Amilcar Cabral's Birthday in Guinea-Bissau
+09/12 Defender's Day in Maryland
+09/12 Revolution Day in Ethiopia
+09/13 Barry Day commemorates the death of Commodore John Barry, USA
+09/14 Battle of San Jacinto in Nicaragua
+09/15 Foundation of Panama in Panama
+09/16 Cherokee Strip Day in Oklahoma
+09/16 Independence Days in Mexico and Papua New Guinea
+09/17 National Heroes Day in Angola
+09/18 Independence Day in Chile and Zimbabwe
+09/19 Army Day in Chile
+09/21 Independence Day in Belize
+09/22 Independence Day in Mali
+09/22 National Sovereignty Day in Haiti
+09/22* Autumnal Equinox in Japan
+09/23 Grito de Lares in Puerto Rico
+09/23* Autumnal Equinox in Japan
+09/24 Anniversary of the Third Republic in Ghana
+09/24 Independence Day in Guinea-Bissau
+09/24 National Day in Saudi Arabia
+09/24 Our Lady of Mercedes in Dominican Republic
+09/24 Republic Day in Trinidad and Tobago
+09/25 Army Day in Mozambique
+09/25 Referendum Day in Rwanda
+09/26 National Day in Maldives
+09/26 Revolution Anniversary Day in Yemen
+09/27 Feast of Finding the True Cross in Ethiopia
+09/28 Confucius' Day in Taiwan
+09/29 Michaelmas
+09/29 Battle of Boqueron in Paraguay
+09/30 Botswana Day in Botswana
+09/MonThird Respect for the Aged Day in Japan
+10/01 Armed Forces Day in South Korea
+10/01 Independence Day in Nigeria
+10/01 National Liberation Day (2 days) in China
+10/01 Public Holiday in Botswana
+10/02 Anniversary of Guinean Independence in Guinea
+10/03 Chung Yeung Festival in Hong Kong
+10/03 Francisco Morazan's Birthday in Honduras
+10/03 German Reunification Day
+10/03 National Foundation Day in South Korea
+10/03 U.N. Day in Barbados
+10/04 Independence Day in Lesotho
+10/05 Anniversary of Proclamation of the Republic in Portugal
+10/06 National Sports Day in Lesotho
+10/07 National Heroes Day in Jamaica
+10/08 Battle of Agamos in Peru
+10/08 Constitution Day in former USSR
+10/08 Thanksgiving Day in Canada
+10/08* Fiji Day
+10/09 Independence Day in Uganda
+10/09 Independence of Guayaquil in Ecuador
+10/09 Korean Alphabet Day in South Korea
+10/09 Leif Erikson Day commemorates the discovery of North America in AD 1000
+10/09 Republic Day in Khmer Republic
+10/10 National Day in Taiwan
+10/10 Oklahoma Historical Day in Oklahoma
+10/11 Day of the Revolution in Panama
+10/12 Day of the Race in Argentina
+10/12 Discovery Day in Bahamas
+10/12 National Day in Equatorial Guinea and Spain
+10/12 Our Lady Aparecida Day in Brazil
+10/12 Pan American Day in Belize
+10/14 National Day in Yemen Arab Republic
+10/14 Young People's Day in Zaire
+10/14* Thanksgiving Day in Canada
+10/15 Evacuation Day in Tunisia
+10/16 National Boss Day, USA
+10/17 Dessaline's Death Anniversary in Haiti
+10/17 Heroes Day in Jamaica
+10/17 Mother's Day in Malawi
+10/20 Anniversary of the 1944 Revolution in Guatemala
+10/20 Kenyatta Day in Kenya
+10/21 Armed Forces Day in Honduras
+10/21 Revolution Days (2 days) in Somalia
+10/23 Chulalongkron's Day in Thailand
+10/24 Independence Day in Zambia
+10/24 United Nations Day
+10/25 Taiwan Restoration Day in Taiwan
+10/25 St. Crispin's day, patron saint of shoemakers
+10/26 Agam Day in Nauru
+10/26 Armed Forces Day in Benin and Rwanda
+10/26 National Day in Austria
+10/28 National Holiday in Greece
+10/28 OHI Day in Cyprus
+10/28* Bank Holiday in Republic of Ireland
+10/29 Republic Day in Turkey
+10/31 All Hallows Eve ("Halloween")
+10/31 Nevada Day in Nevada
+10/MonFourth Labour Day in New Zealand
+10/MonSecond Health Sports Day in Japan
+11/01 All Saints Day
+11/01 Samhain; Beginning of the Celtic year and most important holiday.
+11/02 All Souls Day
+11/02 Memorial Day in Ecuador
+11/03 Culture Day in Japan
+11/03 Independence from Columbia in Panama
+11/03 Independence of Cuenca in Ecuador
+11/03 Thanksgiving Day in Liberia
+11/04 Flag Day in Panama
+11/04 Will Rogers Day, USA
+11/06 Green March Day in Morocco
+11/07 October Revolution Day in Hungary
+11/08 Her Majesty, the Queen's Birthday in Nepal
+11/10 King's Birthday in Bhutan
+11/11 Angola gains independence from Portugal, 1975
+11/11 Independence Day in Angola
+11/11 Independence of Cartagena in Colombia
+11/11 Remembrance Day in Canada
+11/11 Republic Day in Maldives
+11/14 King Hussein's Birthday in Jordan
+11/15 Dynasty Day in Belgium
+11/15 Proclamation of the Republic in Brazil
+11/15 Thatlouang Festival in Laos
+11/16 Oklahoma Heritage Week in Oklahoma
+11/17 Army Day in Zaire
+11/17 Corrective Movement in Syrian Arab Republic
+11/18 Battle of Viertieres in Haiti
+11/18 Independence Day in Morocco
+11/18 National Days (4 days) in Oman
+11/19 Anniversary of the 1968 Coup by the Army in Mali
+11/19 Discovery Day in Puerto Rico
+11/19 Feast Day of S.A.S. Prince Rainier in Monaco
+11/19 Garifuna Settlement in Belize
+11/20 Revolution Day in Mexico
+11/22 Anniversary of Portuguese Aggression in Guinea
+11/22 Independence Day in Lebanon
+11/23 Labor Thanksgiving Day in Japan
+11/24 Anniversary of the New Regime in Zaire
+11/25 Independence Day in Suriname
+11/28 Independence Day in Albania and Mauritania
+11/28 Independence from Spain in Panama
+11/28 Proclamation of the Republic in Chad
+11/29 Day of the Republic (2 days) in Yugoslavia
+11/29 Goodwill Day in Liberia
+11/29 Liberation Day in Albania
+11/29 National Day in Burma
+11/30 Independence Day in Barbados and Yemen Democratic Republic
+11/30 National Day in Benin
+11/30 National Heroes Day in Philippines
+11/30 St. Andrew's Day - Patron Saint of Scotland
+11/Wed+3 Day of Prayer and Repentance (Buss- und Bettag) in Federal Republic of Germany
+12/01 Anniversary of the Restoration of Independence in Portugal
+12/01 Union Day in Romania
+12/01 Independence Day in Central African Republic
+12/01 World AIDS Day
+12/02 National Holiday in United Arab Emirates
+12/03 National Holiday in Laos
+12/05 King's Birthday in Thailand
+12/06 Independence Day in Finland
+12/07 Delaware Day in Delaware
+12/07 Independence Day in Ivory Coast
+12/07 Independence Day in Panama
+12/08 Blessing of the Water in Uruguay
+12/08 Mother's Day in Panama
+12/08 Our Lady of the Cacupe in Paraguay
+12/09 Independence Day in Tanzania
+12/10 Foundation of Worker's Party in Angola
+12/10 Human Rights Day
+12/10 Thai Constitution Day in Thailand
+12/10 Wyoming Day in Wyoming
+12/11 Independence Day in Upper Volta
+12/12 Independence Day in Kenya
+12/13 Republic Day in Malta
+12/15 Statue Day in the Netherlands Antilles
+12/16 Constitution Day in Nepal
+12/16 National Day in Bahrain
+12/16 Victory Day in Bangladesh
+12/17 National Day in Bhutan
+12/18 Republic Day in Niger
+12/23 Emperor's Birthday in Japan
+12/23 Victory Day in Egypt
+12/25 Birthday of Quaid-i-Azam in Pakistan
+12/25 Children's Day in Congo
+12/26 Boxing Day
+12/26 Feast of Our Theotokos in Greece
+12/26 St. Stephen's Day
+12/26 Bank Holiday in Canada, Rep. of Ireland, and UK
+12/27 Bank Holiday in Cayman Islands
+12/27 Constitution Day in North Korea
+12/27 Public Holiday in Lesotho, Zimbabwe
+12/29 Civic Holidays (3 days) in Costa Rica
+12/29 His Majesty, the King's Birthday in Nepal
+12/30 Anniversary of the Democratic Republic of Madagascar in Madagascar
+12/31 Bank Holiday in El Salvador, Honduras, Pakistan
+12/31 Feed Yourself Day in Benin
+12/31 Proclamation of the Republic in Congo
+
+#endif /* !_calendar_holiday_ */
diff --git a/misc_cmds/calendar/calendars/calendar.hungarian b/misc_cmds/calendar/calendars/calendar.hungarian
new file mode 100644
index 0000000..0fd3dd4
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.hungarian
@@ -0,0 +1,12 @@
+/*
+ * Hungarian calendar file(s)
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.hungarian,v 1.1 2004/08/16 09:31:09 dwmalone Exp $
+ */
+
+#ifndef _calendar_hungarian_
+#define _calendar_hungarian_
+
+#include <hu_HU.ISO8859-2/calendar.all>
+
+#endif /* !_calendar_hungarian_ */
diff --git a/misc_cmds/calendar/calendars/calendar.judaic b/misc_cmds/calendar/calendars/calendar.judaic
new file mode 100644
index 0000000..8247093
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.judaic
@@ -0,0 +1,227 @@
+/*
+ * Judaic Calendar. Maintained by Josef Grosch <jgrosch@mooseriver.com>.
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.judaic,v 1.13 2007/01/14 09:58:39 dwmalone Exp $
+ *
+ */
+
+/*
+ * $Id: calendar.judaic,v 1.45 2007/01/01 22:24:53 jgrosch Exp $
+ */
+
+#ifndef _calendar_judaic_
+#define _calendar_judaic_
+
+/*
+ * Jewish calendar for the CE year 2007
+ * 11 Tevet 5767 - 22 tevet 5768
+ */
+
+
+01/06* Parshas Vayechi
+01/13* Parshas Shemos
+01/20* Parshas Vaera
+01/20* Rosh Chodesh Shevat (Beginning of the month of Shevat)
+01/27* Parshas Bo
+02/03* Parshas Beshalach
+02/03* Shabbos Shira
+02/03* Tu B'Shevat (Feast of Trees)
+02/10* Parshas Yisro
+02/17* Parshas Mishpatim
+02/17* Shabbos Shekalim
+02/18* Rosh Chodesh Adar (Beginning of the month of Adar)
+02/18* Be Happy! It's Adar
+02/19* Rosh Chodesh Adar (Beginning of the month of Adar)
+02/19* Be Happy! It's Adar
+02/24* Parshas Terumah
+03/01* Ta'anis Esther (Fast of Esther, Battle of Purim)
+03/03* Parshas Tetzaveh
+03/03* Shabbos Zachor
+03/04* Purim (Feast of Lots)
+03/05* Shushan Purim
+03/10* Parshas Ki Sisa
+03/10* Shabbos Parah
+03/17* Parshas Vayakhel-Pekudei
+03/17* Shabbos HaChodesh
+03/20* Rosh Chodesh Nissan (Beginning of the month of Nissan)
+03/24* Parshas Vayikra
+03/31* Parshas Tzav
+03/31* Shabbos Haggadol
+04/02* Erev Pesach
+04/02* Ta'anis Bechoros (Fast of the First Born)
+04/02* First Seder night
+04/03* Pesach (First Day of Passover; sabbatical)
+04/03* Second Sedar night
+04/04* Pesach (Second Day of Passover; sabbatical)
+04/04* Sefirat ha-Omer begins (Counting of the Omer)
+04/05* Omer 2nd day
+04/05* Pesach (Third Day of Passover; sabbatical)
+04/05* Hol Hamoed
+04/06* Omer 3rd day
+04/06* Pesach (Fourth Day of Passover)
+04/06* Hol Hamoed
+04/07* Omer 4th day
+04/07* Pesach (Fifth Day of Passover)
+04/07* Hol Hamoed
+04/08* Omer 5th day
+04/08* Pesach (Sixth Day of Passover)
+04/08* Hol Hamoed
+04/09* Omer 6th day
+04/09* Pesach (Seventh Day of Passover)
+04/10* Omer 7th day
+04/10* Pesach (Last Day of Passover; 8th day of Pesach; sabbatical)
+04/10* Yizkor
+04/11* Omer 8th day
+04/12* Omer 9th day
+04/13* Omer 10th day
+04/14* Omer 11th day
+04/14* Parshas Shmini
+04/15* Omer 12th day
+04/15* Yom HaShoah (Holocaust Memorial Day)
+04/16* Omer 13th day
+04/17* Omer 14th day
+04/18* Omer 15th day
+04/18* Rosh Chodesh Iyar (Beginning of the month of Iyar)
+04/19* Omer 16th day
+04/19* Rosh Chodesh Iyar (Beginning of the month of Iyar)
+04/20* Omer 17th day
+04/21* Omer 18th day
+04/21* Parshas Tazria-Metzora
+04/22* Omer 19th day
+04/23* Omer 20th day
+04/23* Yom HaZikaron
+04/24* Omer 21th day
+04/24* Yom HaAtzma'ut (Israel Independence Day)
+04/25* Omer 22th day
+04/26* Omer 23th day
+04/27* Omer 24th day
+04/28* Omer 25th day
+04/28* Parshas Achrei Kedoshim
+04/29* Omer 26th day
+04/30* Omer 27th day
+05/01* Omer 28th day
+05/02* Omer 29th day
+05/03* Omer 30th day
+05/04* Omer 31th day
+05/05* Omer 32th day
+05/05* Parshas Emor
+05/06* Lag B'Omer (Commemoration of the Great Rebellion)
+05/06* Omer 33th day
+05/07* Omer 34th day
+05/08* Omer 35th day
+05/09* Omer 36th day
+05/10* Omer 37th day
+05/11* Omer 38th day
+05/12* Omer 39th day
+05/12* Parshas Behar-Bechukosai
+05/13* Omer 40th day
+05/14* Omer 41th day
+05/15* Omer 42th day
+05/16* Omer 43th day
+05/16* Yom Yerushalayim (Reunification of Jerusalem)
+05/17* Omer 44th day
+05/18* Omer 45th day
+05/18* Rosh Chodesh Sivan (Beginning of the month of Sivan)
+05/19* Omer 46th day
+05/19* Parshas Bamidbar
+05/20* Omer 47th day
+05/21* Omer 48th day
+05/22* Erev Shavuos
+05/22* Omer 49th day
+05/23* Shavuos (Festival of Weeks; sabbatical)
+05/24* Shavuos (Festival of Weeks; sabbatical)
+05/24* Yizkor
+05/26* Parshas Nasso
+06/02* Parshas Beha'aloscha
+06/09* Parshas Shelach Lecha
+06/16* Parshas Korach
+06/16* Rosh Chodesh Tammuz (Beginning of the month of Tammuz)
+06/17* Rosh Chodesh Tammuz (Beginning of the month of Tammuz)
+06/23* Parshas Chukas
+06/30* Parshas Balak
+07/03* Fast of Shiv'a Asar B'Tammuz (Romans breach Wall of Jerusalem; fast day)
+07/03* Tzom Tammuz
+07/07* Parshas Pinchas
+07/14* Parshas Matos-Masei
+07/16* Rosh Chodesh Av (Beginning of the month of Av)
+07/21* Parshas Devarim
+07/21* Shabbos Hazon
+07/24* Fast of Tish'a B'Av (Babylon/Rome destroys Holy Temple; fast day)
+07/28* Parshas Vaeschanan
+07/28* Shabbos Nachamu
+07/30* Tu B'Av
+08/04* Parshas Eikev
+08/11* Parshas Re'eh
+08/14* Rosh Chodesh Elul (Beginning of the month of Elul)
+08/15* Rosh Chodesh Elul (Beginning of the month of Elul)
+08/18* Parshas Shoftim
+08/25* Parshas Ki Tetze
+09/01* Parshas Ki Savo
+09/08* Parshas Nitzavim-Vayeilech
+09/12* Erev Rosh Hashana
+09/13* First Day of Rosh Hashanah (Jewish New Year; 5768; sabbatical)
+09/13* Rosh Chodesh Tishrei (Beginning of the month of Tishrei)
+09/14* Rosh Hashanah (sabbatical)
+09/15* Parshas Ha'Azinu
+09/15* Shabbos Shuvah
+09/16* Fast of Gedalya (Murder of Gedalya and subsequent Exile; fast day)
+09/16* Tzom Gedaliah
+09/21* Erev Yom Kippur
+09/22* Yom Kippur (Day of Atonement; sabbatical, fast day)
+09/22* Yizkor
+09/26* Erev Sukkos
+09/27* Succos (Festival of Tabernacles; sabbatical)
+09/28* Succos (sabbatical)
+09/28* Sukkos (Second day of Sukkos)
+09/29* Sukkos (Third day of Sukkos)
+09/29* Hol Hamoed
+09/30* Sukkos (Fourth day of Sukkos)
+09/30* Hol Hamoed
+10/01* Sukkos (Fifth day of Sukkos)
+10/01* Hol Hamoed
+10/02* Sukkos (Sixth day of Sukkos)
+10/02* Hol Hamoed
+10/03* Hoshanah Rabba (Seventh day of Succos)
+10/03* Sukkos (Seventh day of Sukkos)
+10/04* Shmini Atzeres (8th Day of Gathering; sabbatical)
+10/04* Yizkor
+10/05* Simchas Torah (Rejoicing of the Law; sabbatical)
+10/06* Parshas Bereshis
+10/12* Rosh Chodesh Heshvan (Beginning of the month of Heshvan)
+10/13* Parshas Noach
+10/13* Rosh Chodesh Heshvan (Beginning of the month of Heshvan)
+10/20* Parshas Lech-Lecha
+10/27* Parshas Vayera
+11/03* Parshas Chayei Sara
+11/10* Parshas Toldos
+11/11* Rosh Chodesh Kislev (Beginning of the month of Kislev)
+11/17* Parshas Vayetzei
+11/24* Parshas Vayishlach
+12/01* Parshas Vayeshev
+12/04* Erev Chanukah
+12/04* Light 1st candle
+12/05* Chanukah (First Day)
+12/05* Light 2nd candle
+12/06* Chanukah (Second Day)
+12/06* Light 3rd candle
+12/07* Chanukah (Third Day)
+12/07* Light 4th candle
+12/08* Chanukah (Fourth Day)
+12/08* Parshas Miketz
+12/08* Light 5th candle
+12/09* Chanukah (Fifth Day)
+12/09* Light 6th candle
+12/10* Chanukah (Sixth Day)
+12/10* Rosh Chodesh Tevet (Beginning of the month of Tevet)
+12/10* Light 7th candle
+12/11* Chanukah (Seventh Day)
+12/11* Light 8th candle
+12/12* Chanukah (Eight Day)
+12/15* Parshas Vayigash
+12/19* Asara B'Tevet
+12/19* Fast of Asara B'Tevet (Babylonians put siege on Jerusalem; fast day)
+12/22* Parshas Vayechi
+12/29* Parshas Shemos
+
+
+#endif /* !_calendar_judaic_ */
diff --git a/misc_cmds/calendar/calendars/calendar.lotr b/misc_cmds/calendar/calendars/calendar.lotr
new file mode 100644
index 0000000..9adb342
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.lotr
@@ -0,0 +1,48 @@
+/*
+ * Lord Of The Rings
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.lotr,v 1.2 2003/10/09 00:31:48 grog Exp $
+ */
+
+#ifndef _calendar_lotr_
+#define _calendar_lotr_
+
+01/05 Fellowship enters Moria
+01/09 Fellowship reaches Lorien
+01/17 Passing of Gandalf
+02/07 Fellowship leaves Lorien
+02/17 Death of Boromir
+02/20 Meriadoc & Pippin meet Treebeard
+02/22 Passing of King Elessar
+02/24 Ents destroy Isengard
+02/26 Aragorn takes the Paths of the Dead
+03/05 Frodo & Samwise encounter Shelob
+03/08 Deaths of Denethor & Theoden
+03/18 Destruction of the Ring
+03/29 Flowering of the Mallorn
+04/04 Gandalf visits Bilbo
+04/17 An unexpected party
+04/23 Crowning of King Elessar
+05/19 Arwen leaves Lorien to wed King Elessar
+06/11 Sauron attacks Osgiliath
+06/13 Bilbo returns to Bag End
+06/23 Wedding of Elessar & Arwen
+07/04 Gandalf imprisoned by Saruman
+07/24 The ring comes to Bilbo
+07/26 Bilbo rescued from Wargs by Eagles
+08/03 Funeral of King Theoden
+08/29 Saruman enters the Shire
+09/10 Gandalf escapes from Orthanc
+09/14 Frodo & Bilbo's birthday
+09/15 Black riders enter the Shire
+09/18 Frodo and company rescued by Bombadil
+09/28 Frodo wounded at Weathertop
+10/05 Frodo crosses bridge of Mitheithel
+10/16 Boromir reaches Rivendell
+10/17 Council of Elrond
+10/25 End of War of the Ring
+11/16 Bilbo reaches the Lonely Mountain
+12/05 Death of Smaug
+12/16 Fellowship begins Quest
+
+#endif /* !_calendar_lotr_ */
diff --git a/misc_cmds/calendar/calendars/calendar.music b/misc_cmds/calendar/calendars/calendar.music
new file mode 100644
index 0000000..a2e4292
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.music
@@ -0,0 +1,240 @@
+/*
+ * Music
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.music,v 1.19 2007/01/24 21:21:38 dougb Exp $
+ */
+
+#ifndef _calendar_music_
+#define _calendar_music_
+
+01/01 Country Joe McDonald is born in El Monte, California, 1942
+01/03 Steven Stills is born in Dallas, 1945
+01/04 Jazz great Charlie Mingus dies at 57 in Cuernavaca, Mexico, 1979
+01/08 David Bowie (then David Robert Jones) is born in London, 1947
+01/08 Elvis Presley born, 1935
+01/09 James Patrick Page (Led Zeppelin) is born in Middlesex, England, 1945
+01/10 Blues guitarist Howlin' Wolf dies in Chicago, 1976
+01/10 Jim Croce is born in Philadelphia, 1943
+01/10 Pat Benatar is born in Long Island, 1952
+01/10 Rod Stewart is born in Glasgow, Scotland, 1945
+01/13 Eric Clapton plays the "Rainbow Concert" in London, 1973
+01/17 Led Zeppelin's first album is released, 1969
+01/19 Janis Joplin is born in Port Arthur, Texas, 1943
+01/22 Sam Cooke is born in Chicago, 1935
+01/24 Warren Zevon is born in Chicago, 1947
+01/25 Bob Dylan plays the second "Hurricane" benefit, in the Astrodome, 1978
+01/27 Bobby "Blue" Bland (Robert Calvin Bland) is born in Tennessee, 1930
+01/27 Wolfgang Amadeus Mozart is born in Salzburg, Austria, 1756
+01/28 Jimi Hendrix headlines Madison Square Garden, 1970
+01/30 Lightnin' Hopkins, the most-recorded blues artist ever, dies, 1982
+01/31 Franz Schubert is born in Lichtenthal, Vienna, Austria, 1797
+01/31 The Grateful Dead are busted in New Orleans, 1970
+02/01 RCA Victor unveils the 45 rpm record playing system, 1949
+02/02 Graham Nash is born in Lancashire, England, 1942
+02/03 Felix Mendelssohn Bartholdy is born in Hamburg, Germany, 1809
+02/03 The Day The Music Died; Buddy Holly, Richie Valens, and the Big
+ Bopper are killed in a plane crash outside Mason City, Iowa, 1959
+02/07 Beatles land at JFK airport to begin first U.S. tour, 1964
+02/07 Steven Stills makes the first digitally recorded rock album, 1979
+02/09 Carole King (Carole Klein) is born in Brooklyn, 1941
+02/12 The Beatles play Carnegie Hall in New York City, 1964
+02/13 Richard Wagner dies in Venice, Italy, 1883
+02/17 Jazz great Thelonius Monk dies in Englewood, New Jersey, 1982
+02/18 Yoko Ono Lennon is born in Tokyo, 1933
+02/19 Paul McCartney's "Give Ireland Back to the Irish" is banned in
+ Britain, 1972
+02/19 William "Smokey" Robinson is born in Detroit, 1940
+02/20 J. Geils (J. Geils Band) is born, 1946
+02/20 Yes sells out Madison Square Garden...without advertising, 1974
+02/23 George Friedrich Handel is born in Halle on the Saale, Germany, 1685
+02/23 Johnny Winter is born in Leland, Mississippi, 1944
+02/25 George Harrison born in Liverpool, England, 1943
+02/29 Jimmy Dorsey born, 1904
+03/01 Frederic Chopin is born in Zelazowa Wola, Warsaw, Poland, 1810
+03/01 Jim Morrison is busted for obscenity in Miami, 1969
+03/02 Blues guitarist Rory Gallagher is born in Ballyshannon, Ireland, 1949
+03/03 Buffalo Springfield is formed in Los Angeles, 1966
+03/04 Antonio Vivaldi born in Venice, Italy, 1678
+03/07 Last Gilbert & Sullivan opera produced, 1896
+03/08 Ron "Pigpen" McKernan (Grateful Dead) dies in California, 1973
+03/08 (Louis) Hector Berlioz dies in Paris, 1869
+03/09 Robin Trower is born in London, 1945
+03/13 The Allman Brothers record their live album at the Fillmore East, 1971
+03/15 Sly Stone born, 1944
+03/17 Paul Kantner (Jefferson Airplane) is born in San Francisco, 1942
+03/21 Johann Sebastian Bach is born in Eisenach, Germany, 1685
+03/22 Ten Years After plays their last concert, 1974
+03/25 Aretha Franklin is born in Detroit, 1943
+03/25 Bela Bartok is born in Nagyszentmiklos, Hungary, 1881
+03/26 Emerson, Lake, and Palmer record "Pictures at an Exhibition" live, 1971
+03/26 Ludwig van Beethoven dies in Vienna, Austria, 1827
+03/28 Sergej Rachmaninow dies in Beverley Hills, 1943
+03/29 Carl Orff dies in Munich, Germany, 1982
+03/29 Dr. Hook gets a group picture on the cover of "Rolling Stone", 1973
+03/30 Eric Clapton is born in Surrey, England, 1945
+03/31 Joseph Haydn is born in Rohrau, Austria, 1732
+04/01 Sergej Rachmaninow is born in Oneg, Russia, 1873
+04/02 Marvin Gaye is born in Washington, D.C., 1939
+04/04 Muddy Waters (McKinley Morganfield) is born in Rolling Fork,
+ Mississippi, 1915
+04/09 Paul Robeson born, 1898
+04/10 Paul McCartney announces that he's quitting the Beatles, 1970
+04/14 George Friedrich Handel dies in London, England, 1759
+04/14 Ritchie Blackmore (Deep Purple, Rainbow) is born, 1945
+04/18 Yes breaks up after 13 years, 1981
+04/25 Blues guitarist Albert King is born, 1925
+04/25 Ella Fitzgerald born, 1918
+04/26 Carol Burnett born in San Antonio, Texas, 1933
+04/29 "Hair" premiers on Broadway, 1968
+05/01 Kate Smith born, 1909
+05/01 Antonin Dvorak dies in Prague, 1904
+05/03 Bob Seger is born in Ann Arbor, Michigan, 1945
+05/07 Johannes Brahms is born in Hamburg, Germany, 1833
+05/07 Tchaikowsky born, 1840
+05/10 Dave Mason is born in Worcester, England, 1945
+05/11 Bob Marley dies in his sleep in Miami, 1981
+05/12 Pink Floyd performs the first quadrophonic concert, 1977
+05/18 Gustav Mahler dies in Vienna, Austria, 1911
+05/18 Rick Wakeman is born in West London, England, 1949
+05/19 Pete Townshend is born in London, 1945
+05/20 The Jimi Hendrix Experience is signed by Reprise Records, 1967
+05/22 Richard Wagner is born in Leipzig, Germany, 1813
+05/23 Blues great Elmore James dies, 1963
+05/24 Bob Dylan (Robert Zimmerman) is born in Duluth, 1941
+05/26 Al Jolson born, 1886
+05/31 Joseph Haydn dies in Vienna, Austria, 1809
+05/31 The Who perform the loudest concert ever -- 76,000 watts of PA, 1976
+06/01 The Beatles release "Sgt. Pepper", 1967
+06/03 Georges Bizet dies in Bougival, Paris, France, 1875
+06/05 Carl Maria von Weber dies in London, England, 1826
+06/06 "Rock Around The Clock" makes Billboard's #1 slot, 1955
+06/06 Dee Dee Ramone dies, 2002
+06/07 Blind Faith debuts in concert at London's Hyde Park, 1969
+06/08 Robert Schumann is born in Zwickau, Germany, 1810
+06/09 Les Paul (Lester Polfus) is born in Waukesha, Wisconsin, 1923
+06/10 Howlin' Wolf (Chester Burnett) is born in West Point, Mississippi, 1910
+06/10 Judy Garland born, 1922
+06/11 Richard Strauss is born in Munich, Germany, 1864
+06/15 Edvard Grieg is born in Bergen, Norway, 1843
+06/15 Harry Nilsson is born in Brooklyn, 1941
+06/16 The Monterey Pop festival opens, 1967
+06/18 Paul McCartney born in Liverpool, England, 1942
+06/21 Columbia records announces the first mass production of LP's, 1948
+06/22 Todd Rundgren is born in Upper Darby, Pennsylvania, 1948
+06/24 Jeff Beck is born in Surrey, England, 1944
+06/27 John Entwistle dies in Las Vegas, 2002
+07/02 Felix Pappalardi and Leslie West form Mountain, 1969
+07/03 Jim Morrison dies in Paris, 1971
+07/06 The Jefferson Airplane is formed in San Francisco, 1965
+07/07 Gustav Mahler is born in Kalischt, Bohemia, 1860
+07/07 Ringo Starr (Richard Starkey) born in Liverpool, England, 1940
+07/10 Carl Orff is born in Munich, Germany, 1895
+07/12 Chicago DJ Steve Dahl holds "Disco Demolition" at Kamisky Park, 1979
+07/14 Woodie Guthrie born, 1912
+07/16 Cream forms in the U.K., 1966
+07/16 Harry Chapin dies on Long Island Expressway, 1981
+07/17 "Yellow Submarine" premieres at the London Pavilion, 1968
+07/20 Carlos Santana is born in Autlan, Mexico, 1947
+07/25 Bob Dylan goes electric at the Newport Folk Festival, 1965
+07/25 Crosby, Stills, Nash & Young debut at the Fillmore East, 1969
+07/26 Mick Jagger is born in Kent, England, 1943
+07/28 Antonio Vivaldi dies in Vienna, 1741
+07/28 Johann Sebastian Bach dies in Leipzig, 1750
+07/28 The Watkins Glen "Summer Jam" opens, 1973
+07/29 Robert Schumann dies in Endenich, Bonn, Germany, 1856
+08/01 The Concert for Bangla Desh takes place at Madison Square Garden, 1971
+08/04 John Lennon points out that "the Beatles are more popular than Jesus", 1966
+08/10 Ian Anderson (Jethro Tull) is born in Edinburgh, Scotland, 1947
+08/13 Dan Fogelberg is born in Peoria, Illinois, 1951
+08/15 Beatles replace drummer Pete Best with Richard Starkey, 1962
+08/15 The Beatles play Shea Stadium in New York, 1965
+08/15 Woodstock Festival, Max Yasgur's farm, 1969
+08/16 Elvis Presley dies, 1977
+08/16 Madonna Louise Ciccone born in Bay City, Michigan, 1958
+08/21 Joe Strummer (The Clash), born John Mellor in Ankara, Turkey, 1952
+08/23 Keith Moon is born in London, England, 1946
+08/26 Jimi Hendrix gives his last performance at the Isle of Wight, 1970
+08/26 Jimi Hendrix's Electric Ladyland Studios opens in New York, 1970
+09/04 Edvard Grieg dies in Bergen, Norway, 1907
+09/07 Keith Moon (The Who) dies in London of a drug overdose, 1978
+09/07 Warren Zevon dies in Los Angeles of lung cancer (mesothelioma), 2003
+09/08 Antonin Dvorak born in Nelahozeves, Bohemia, 1841
+09/08 Richard Strauss dies in Garmisch-Partenkirchen, Germany, 1949
+09/08 Ron "Pigpen" McKernan (Grateful Dead) is born in San Bruno, California, 1945
+09/14 Francis Scott Key writes words to "Star Spangled Banner", 1814
+09/16 B.B. King is born in Itta Bena, Mississippi, 1925
+09/18 Dee Dee Ramone (Douglas Colvin) born in Fort Lee, Virginia, 1952
+09/19 Simon & Garfunkel reunite to play New York's Central Park, 1981
+09/20 Jim Croce dies in a plane crash, 1973
+09/23 "Paul is dead" rumors sweep the country, 1969
+09/23 Bruce "The Boss" Springsteen is born in Freehold, New Jersey, 1949
+09/25 John Bonham (Led Zeppelin) dies of alcohol poisoning, 1980
+09/26 Bela Bartok dies in New York, 1945
+09/26 George Gershwin is born in Brooklyn, NY, 1898
+10/04 Janis Joplin dies of a heroin overdose in Hollywood, 1970
+10/05 Steve Miller is born in Dallas, 1943
+10/07 First Bandstand (later, American Bandstand) broadcast, 1957
+10/09 John Entwistle is born in London, England, 1944
+10/09 John Lennon born in Liverpool, England, 1940
+10/10 John Prine is born in Maywood, Illinois, 1946
+10/12 Ray Conniff dies after falling down and hitting his head, 2002
+10/12 The Jimi Hendrix Experience is formed in London, 1966
+10/16 Bob Weir (Grateful Dead) is born in San Francisco, 1947
+10/17 "Hair" opens at New York's Public Theater, 1967
+10/17 Frederic Chopin dies in Paris, France, 1849
+10/18 Chuck Berry is born in San Jose, California, 1926
+10/20 Three members of Lynyrd Skynyrd die in a plane crash, 1977
+10/21 Jesus Christ Super Star debuted on Broadway, 1971
+10/22 Franz Liszt born, 1811
+10/22 Pablo Casals dies in Puerto Rico, 1973
+10/25 Georges Bizet is born in Paris, France, 1838
+10/25 Jon Anderson (Yes) is born in Lancashire, England, 1944
+10/25 The Rolling Stones appear on The Ed Sullivan Show, 1964
+10/29 Duane Allman dies in motorcycle crash near Macon, Georgia, 1971
+10/30 Grace Slick is born in Chicago, 1939
+11/02 Jimi Hendrix's "Electric Ladyland" enters US charts at #1, 1968
+11/02 Keith Emerson is born, 1944
+11/03 James Taylor and Carly Simon are married in Manhattan, 1972
+11/04 Felix Mendelssohn Bartholdy dies in Leipzig, Germany, 1847
+11/06 Ray Conniff born in Attleboro, Massachusetts, 1916
+11/07 Joni Mitchell (Roberta Joan Anderson) is born in Alberta, Canada, 1943
+11/08 Patti Page born, 1927
+11/09 The first issue of "Rolling Stone" is published, 1967
+11/10 Greg Lake is born in Bournemouth, England, 1948
+11/12 Neil Young is born in Toronto, 1945
+11/13 Paul Simon born, 1942
+11/16 Bill Ham first demonstrates his psychedelic "Light Show", 1965
+11/18 Carl Maria von Weber is born in Eutin, Germany, 1786
+11/19 Franz Schubert dies in Vienna, Austria, 1828
+11/20 Duane Allman is born in Nashville, Tennessee, 1946
+11/20 Joe Walsh is born in Cleveland, 1947
+11/22 Saint Cecilia's day (patron saint of music)
+11/24 Scott Joplin born, 1868
+11/25 "The Last Waltz" concert is played by The Band at Winterland, 1976
+11/25 Johann Strauss, Jr., writes `On the Beautiful Blue Danube', 1867
+11/26 Cream performs their farewell concert at Royal Albert Hall, 1968
+11/26 Paul Hindemith is born in Hanau, Germany, 1895
+11/27 Jimi Hendrix (Johnny Allen Hendrix) is born in Seattle, 1942
+11/29 Pau Casals born in Vendrell, 1876
+11/30 George Harrison dies at 13:30 in L.A., 2001
+12/04 Frank Zappa dies in his Laurel Canyon home shortly before 18:00, 1993
+12/05 Wolfgang Amadeus Mozart dies in Vienna, Austria, 1791
+12/06 First sound recording made by Thomas Edison, 1877
+12/06 The Rolling Stones play Altamont Speedway near San Francisco, 1969
+12/07 Harry Chapin is born in New York City, 1942
+12/08 Jim Morrison is born in Melbourne, Florida, 1943
+12/08 John Lennon is shot and killed in New York City, 1980
+12/09 The Who's "Tommy" premieres in London, 1973
+12/11 (Louis) Hector Berlioz born in La-Côte-Saint-André, 1803
+12/13 Ted Nugent, the motor city madman, born in Detroit, 1949
+12/15 Thomas Edison receives patent on the phonograph, 1877
+12/16 Don McLean's "American Pie" is released, 1971
+12/17 Ludwig van Beethoven is christened in Bonn, 1770
+12/21 Frank Zappa is born in Baltimore, 1940
+12/23 First G&S collaboration, Thespis, 1871
+12/23 Joe Strummer (born John Mellor) dies in Broomfield, England, 2002
+12/28 Edgar Winter is born in Beaumont, Texas, 1946
+12/28 Paul Hindemith dies in Frankfurt/Main, Germany, 1963
+12/31 Jimi Hendrix introduces the Band of Gypsies at the Fillmore East, 1969
+
+#endif /* !_calendar_music_ */
diff --git a/misc_cmds/calendar/calendars/calendar.newzealand b/misc_cmds/calendar/calendars/calendar.newzealand
new file mode 100644
index 0000000..3437c83
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.newzealand
@@ -0,0 +1,25 @@
+/*
+ * New Zealand holidays
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.newzealand,v 1.2 2005/01/01 18:58:28 ceri Exp $
+ */
+
+#ifndef _calendar_newzealand_
+#define _calendar_newzealand_
+
+Jan 02 New Year Holiday (NZ)
+Jan 14 Anniversary Day (Southland)
+Jan 21 Anniversary Day (Wellington)
+Jan 28 Anniversary Day (Auckland)
+Feb 06 Waitangi Day (NZ)
+Mar 11 Anniversary Day (Taranaki)
+Mar 25 Anniversary Day (Otago)
+Jun 03 Queen's Birthday (NZ)
+Sep 23 Anniversary Day (South Canterbury)
+Oct 25 Anniversary Day (Hawke's Bay)
+Oct 28 Labour Day (NZ)
+Nov 04 Anniversary Day (Marlborough)
+Nov 15 Anniversary Day (Canterbury)
+Dec 02 Anniversary Day (Chatham Islands)
+
+#endif
diff --git a/misc_cmds/calendar/calendars/calendar.russian b/misc_cmds/calendar/calendars/calendar.russian
new file mode 100644
index 0000000..489d21f
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.russian
@@ -0,0 +1,12 @@
+/*
+ * Russian calendar files
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.russian,v 1.5 2000/05/04 11:35:27 phantom Exp $
+ */
+
+#ifndef _calendar_russian_
+#define _calendar_russian_
+
+#include <ru_RU.KOI8-R/calendar.all>
+
+#endif /* !_calendar_russian_ */
diff --git a/misc_cmds/calendar/calendars/calendar.southafrica b/misc_cmds/calendar/calendars/calendar.southafrica
new file mode 100644
index 0000000..5ff5013
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.southafrica
@@ -0,0 +1,23 @@
+/*
+ * South African holidays
+ * Note: The Public Holidays Act (Act No 36 of 1994) determines whenever
+ * any public holiday falls on a Sunday, the Monday following on it shall
+ * be an unnamed public holiday in addition to the named holiday the day
+ * before. This file format is not complex enough to reflect this, but
+ * if it ever is, the change should be made.
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.southafrica,v 1.1 2002/11/19 00:29:36 grog Exp $
+ */
+
+#ifndef _calendar_southafrica_
+#define _calendar_southafrica_
+
+03/01 Human Rights Day in South Africa
+04/27 Freedom Day in South Africa
+05/01 Workers Day in South Africa
+06/16 Youth Day in South Africa
+08/09 National Women's Day in South Africa
+09/24 Heritage Day in South Africa
+12/16 Day of Reconciliation in South Africa
+12/26 Day of Goodwill in South Africa
+
+#endif
diff --git a/misc_cmds/calendar/calendars/calendar.ukrainian b/misc_cmds/calendar/calendars/calendar.ukrainian
new file mode 100644
index 0000000..0a25db1
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.ukrainian
@@ -0,0 +1,12 @@
+/*
+ * Ukrainian calendar files
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.ukrainian,v 1.1 2005/10/28 21:25:28 ru Exp $
+ */
+
+#ifndef _calendar_ukrainian_
+#define _calendar_ukrainian_
+
+#include <uk_UA.KOI8-U/calendar.all>
+
+#endif /* !_calendar_ukrainian_ */
diff --git a/misc_cmds/calendar/calendars/calendar.usholiday b/misc_cmds/calendar/calendars/calendar.usholiday
new file mode 100644
index 0000000..f64c10b
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.usholiday
@@ -0,0 +1,42 @@
+/*
+ * USA holiday
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.usholiday,v 1.9 2007/04/29 20:03:06 dwmalone Exp $
+ */
+
+#ifndef _calendar_usholiday_
+#define _calendar_usholiday_
+
+01/01 New Year's Day
+01/14 Julian Calendar New Year's Day
+02/02 Groundhog Day
+02/14 St. Valentine's Day
+02/MonThird President's Day (3rd Monday of February)
+03/05 Mother-in-Law Day, USA
+03/SunSecond Daylight Savings Time begins in USA; clocks move forward (2nd Sunday of March)
+03/17 St. Patrick's Day
+03/20* Vernal Equinox
+04/01 April Fool's Day
+04/15 Income Tax Day, USA.
+04/28* Arbor Day, USA (varies from state to state)
+05/SunSecond Mother's Day (2nd Sunday of May)
+05/SatThird Armed Forces in USA Day (3rd Saturday of May)
+05/MonLast Memorial Day in USA (Last Monday of May)
+06/SunThird Father's Day (3rd Sunday of June)
+06/21* Summer Solstice
+07/04 US Independence Day
+09/MonFirst Labor Day in USA (1st Monday of September)
+09/SunSecond Grandparent's Day in USA (2nd Sunday of September; varies from state to state)
+09/22* Autumnal Equinox
+10/MonSecond Columbus Day in USA (2nd Monday of October)
+10/31 All Hallows Eve (Halloween)
+11/05* Election Day in USA (1st Tuesday after 1st Monday for even years)
+11/SunFirst Daylight Savings Time ends in USA; clocks move back (1st Sunday of November)
+11/11 Veterans' Day
+11/ThuFourth Thanksgiving Day (4th Thursday in November)
+12/21* Winter Solstice
+12/24 Christmas Eve
+12/25 Christmas
+12/31 New Year's Eve
+
+#endif /* !_calendar_usholiday_ */
diff --git a/misc_cmds/calendar/calendars/calendar.world b/misc_cmds/calendar/calendars/calendar.world
new file mode 100644
index 0000000..7f6b873
--- /dev/null
+++ b/misc_cmds/calendar/calendars/calendar.world
@@ -0,0 +1,19 @@
+/*
+ * World wide calendar files, except national calendars
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/calendar.world,v 1.5 2003/02/15 10:57:20 seanc Exp $
+ */
+
+#ifndef _calendar_world_
+#define _calendar_world_
+
+#include <calendar.birthday>
+#include <calendar.christian>
+#include <calendar.computer>
+#include <calendar.history>
+#include <calendar.lotr>
+#include <calendar.holiday>
+#include <calendar.judaic>
+#include <calendar.music>
+
+#endif /* !_calendar_world_ */
diff --git a/misc_cmds/calendar/calendars/de_AT.ISO_8859-15/calendar.feiertag b/misc_cmds/calendar/calendars/de_AT.ISO_8859-15/calendar.feiertag
new file mode 100644
index 0000000..ddac0f6
--- /dev/null
+++ b/misc_cmds/calendar/calendars/de_AT.ISO_8859-15/calendar.feiertag
@@ -0,0 +1,62 @@
+/*
+ * Feiertage
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/de_AT.ISO_8859-15/calendar.feiertag,v 1.1 2004/05/23 13:22:01 josef Exp $
+ */
+
+#ifndef _de_AT_ISO8859_15_feiertag_
+#define _de_AT_ISO8859_15_feiertag_
+
+LANG=de_AT.ISO8859-15
+
+/* arbeitsfreie staatliche Feiertage */
+01/01 Neujahr
+05/01 Staatsfeiertag
+10/26 Nationalfeiertag
+
+/* christliche Feiertage, meist irgendwo arbeitsfrei */
+01/06 Heilige 3 Könige
+Easter-2 Karfreitag
+Easter Ostersonntag
+Easter+1 Ostermontag
+Easter+49 Pfingstsonntag
+Easter+50 Pfingstmontag
+Easter+39 Christi Himmelfahrt
+Easter+60 Fronleichnam
+
+08/15 Mariä Himmelfahrt
+
+11/01 Allerheiligen
+11/02 Allerseelen
+
+12/08 Mariä Empfängnis
+12/24 Heiligabend
+12/25 Weihnachten
+12/26 Stephanstag
+12/31 Silvester
+
+/* Gedenktage - nicht arbeitsfreie Feiertage */
+02/14 Valentinstag
+02/WednesdayLast Aschermittwoch
+Easter-7 Palmsonntag
+Nov Sun+3 Totensonntag
+Nov Sun+4 1. Advent
+Dec Sun+1 2. Advent
+12/06 Nikolaus
+Dec Sun+2 3. Advent
+Dec Sun+3 4. Advent
+
+/* Jahreszeiten */
+03/20* Frühlingsanfang
+06/21* Sommeranfang
+09/23* Herbstanfang
+12/21* Winteranfang
+
+/* Sommer- und Winterzeit */
+03/SundayLast Anfang der Sommerzeit
+10/SundayLast Ende der Sommerzeit
+
+/* Blumenverkäufer */
+May Sun+2 Muttertag
+
+#endif /*! _de_AT_ISO8859_15_feiertag_ */
diff --git a/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.all b/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.all
new file mode 100644
index 0000000..1274934
--- /dev/null
+++ b/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.all
@@ -0,0 +1,17 @@
+/*
+ * deutscher Kalender
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/de_DE.ISO8859-1/calendar.all,v 1.6 2001/06/11 03:06:13 ache Exp $
+ */
+
+#ifndef _de_DE_ISO8859_1_all_
+#define _de_DE_ISO8859_1_all_
+
+#include <de_DE.ISO8859-1/calendar.feiertag>
+#include <de_DE.ISO8859-1/calendar.geschichte>
+#include <de_DE.ISO8859-1/calendar.kirche>
+#include <de_DE.ISO8859-1/calendar.literatur>
+#include <de_DE.ISO8859-1/calendar.musik>
+#include <de_DE.ISO8859-1/calendar.wissenschaft>
+
+#endif /* !_de_DE.ISO8859-1_all_ */
diff --git a/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.feiertag b/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.feiertag
new file mode 100644
index 0000000..48cfd31
--- /dev/null
+++ b/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.feiertag
@@ -0,0 +1,56 @@
+/*
+ * Feiertage
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/de_DE.ISO8859-1/calendar.feiertag,v 1.14 2006/10/01 09:22:05 maxim Exp $
+ */
+
+#ifndef _de_DE_ISO8859_1_feiertag_
+#define _de_DE_ISO8859_1_feiertag_
+
+LANG=de_DE.ISO8859-1
+
+/* arbeitsfreie staatliche Feiertage */
+01/01 Neujahr
+05/01 Maifeiertag
+10/03 Tag der deutschen Einheit
+
+/* christliche Feiertage, meist irgendwo arbeitsfrei */
+Easter-2 Karfreitag
+Easter Ostersonntag
+Easter+1 Ostermontag
+Easter+49 Pfingstsonntag
+Easter+50 Pfingstmontag
+Easter+39 Christi Himmelfahrt
+Easter+60 Fronleichnam
+
+08/08 Friedensfest (Augsburg)
+08/15 Mariä Himmelfahrt
+
+10/31 Reformationstag
+11/01 Allerheiligen
+11/02 Allerseelen
+11/Wed+4 Buß- und Bettag
+
+12/24 Heiligabend
+12/25 Erster Weihnachtstag
+12/26 Zweiter Weihnachtstag
+12/31 Silvester
+
+/* Gedenktage - nicht arbeitsfreie Feiertage :-( */
+06/17 Arbeiteraufstand am 17. Juni 1953
+01/27 Gedenktag für die Opfer des Nationalsozialismus
+
+/* Jahreszeiten */
+03/20* Frühlingsanfang
+06/21* Sommeranfang
+09/23* Herbstanfang
+12/21* Winteranfang
+
+/* Sommer- und Winterzeit */
+03/SundayLast Anfang der Sommerzeit
+10/SundayLast Ende der Sommerzeit
+
+/* Blumenverkäufer */
+May Sun+2 Muttertag
+
+#endif /*! _de_DE_ISO8859_1_feiertag_ */
diff --git a/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.geschichte b/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.geschichte
new file mode 100644
index 0000000..64ccc31
--- /dev/null
+++ b/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.geschichte
@@ -0,0 +1,198 @@
+/*
+ * deutsche Geschichte
+ *
+ *
+ * Die Angaben wurden überwiegend entnommen aus dem Buch:
+ *
+ * Fragen an die deutsche Geschichte, Ideen, Kräfte, Entscheidungen von
+ * 1800 bis zur Gegenwart; historische Ausstellung im Reichstagsgebäude
+ * in Berlin; Katalog, 16. Auflage, Sonderausgabe - Bonn: Deutscher
+ * Bundestag, Referat Öffentlichkeitsarbeit, 1990
+ *
+ * English Title: Questions on German history
+ *
+ * ISBN 3-924521-59-X
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/de_DE.ISO8859-1/calendar.geschichte,v 1.13 2005/09/23 11:58:16 krion Exp $
+ */
+
+#ifndef _de_DE_ISO8859_1_geschichte_
+#define _de_DE_ISO8859_1_geschichte_
+
+LANG=de_DE.ISO8859-1
+
+/* 1800-1933 */
+07/11 Gründung des Rheinbundes, 1806
+10/14 Doppelschlacht bei Jena und Auerstedt, 1806
+10/16 Völkerschlacht bei Leipzig, 1813
+06/18 Niederlage Napoleons bei Waterloo, 1815
+10/18 Wartburgfest der Deutschen Burschenschaften, 1817
+01/01 Inkrafttreten des Vertrages über den deutschen Zollverein, 1834
+12/07 Erste deutsche Eisenbahn zwischen Nürnberg und Fürth, 1835
+06 Aufstand der schlesischen Weber, 1844
+12/21 Verabschiedung des Gesetzes über die Grundrechte des deutschen
+ Volkes durch die Frankfurter Nationalversammlung, 1848
+03/27 Annahme der deutschen Reichsverfassung in der Frankfurter
+ Paulskirche, Wahl von Friedrich Wilhelm IV von Preußen zum
+ deutschen Kaiser, 1849
+04/28 Ablehnung der deutschen Kaiserkrone durch den preußischen König, 1849
+07/03 Schlacht von Königgrätz
+07/13 Emser Depesche, 1870
+07/18 Verkündung des Dogmas von der päpstlichen Unfehlbarkeit
+ durch das I. Vatikanische Konzil
+01/18 Proklamation des deutschen Kaiserreiches in Versailles, 1871
+10/18 Verabschiedung des Sozialistengesetzes durch den Reichstag, 1878
+03/20 Entlassung von Bismarck als Reichskanzler und
+ preußischer Ministerpräsident, 1890
+06/21 Eröffnung des Nord-Ostsee-Kanals, 1895
+01/07 Billigung des Bürgerlichen Gesetzbuches (BGB) durch den Reichstag, 1896
+01/01 Bürgerliches Gesetzbuch tritt in Kraft, 1900
+06/28 Ermordung des österreichischen Thronfolgers Erzherzog Franz
+ Ferdinand durch serbische Nationalisten in Sarajewo, 1914
+07/28 Kriegserklärung Österreich-Ungarns an Serbien, 1914
+08/01 Deutsche Mobilmachung und Kriegserklärung an Rußland, 1914
+08/03 Deutsche Kriegserklärung an Frankreich, 1914
+08/04 Kriegserklärung Großbritanniens an Deutschland, 1914
+08/04 Bewilligung der Kriegskredite im Reichstag, 1914
+08/26 Schlacht bei Tannenberg, 1914
+02/21 Schlacht um Verdun, 1916
+03/08 Ausbruch der Revolution in Rußland, Abdankung von Zar Nikolaus II, 1917
+04/06 Kriegserklärung der USA an Deutschland, 1917
+12/15 Waffenstillstand zwisch Rußland und Deutschland, 1917
+03/03 Frieden von Brest-Litowsk, 1918
+11/03 Matrosenaufstand in Kiel, 1918
+11/09 Ausrufung der Republik durch Scheidemann (SPD), 1918
+02/11 Friedrich Ebert wird Reichspräsident, Weimar 1919
+06/28 Unterzeichnung des Versailler Vertrages, 1919
+03/21 Volksabstimmung in Oberschlesien, 1921
+04/16 Vertrag von Rapallo, 1922
+06/24 Ermordung von Reichsaußenminister Rathenau, 1922
+01/11 Besetzung des Ruhrgebietes durch Frankreich und Belgien, 1923
+09/10 Eintritt Deutschlands in den Völkerbund, 1926
+10/25 Schwarzer Freitag in New York, Beginn der Weltwirtschaftskrise, 1929
+
+
+/* II. Weltkrieg */
+10/14 Austritt Deutschlands aus dem Völkerbund, 1933
+03/16 Wiedereinführung der allgemeinen Wehrpflicht in Deutschland, 1935
+10/25 Deutsch-italienischer Vertrag, Achse Berlin-Rom, 1936
+11/25 Antikominternpakt zwischen Deutschland und Japan, 1936
+01/13 Volksabstimmung im Saargebiet über die Rückführung
+ ins deutsche Reich, 1935
+03/12 Einmarsch deutscher Truppen in Österreich, 1938
+09/29 Münchner Abkommen, 1938
+03/15 Einmarsch deutscher Truppen in die Tschechoslowakei, 1939
+03/23 Rückgabe des Memelgebietes an Deutschland, 1939
+08/23 Abschluß des Hitler-Stalin-Paktes, 1939
+09/03 Kriegserklärung Großbritaniens und Frankreichs an Deutschland, 1939
+04/09 Deutsche Besetzung Dänemarks, Invasion in Norwegen, 1940
+05/10 Deutscher Angriff auf Belgien, die Niederlande, Luxemburg
+ und Frankreich, 1940
+06/22 Deutscher Angriff gegen die Sowjetunion, 1941
+12/11 Kriegserklärung Deutschlands an die USA, 1941
+01/14 Konferenz von Casablanca, 1943
+01/31 Kapitulation der 6. deutschen Armee in Stalingrad, 1943
+06/06 Alliierte Landung in Nordwestfrankreich, 1944
+02/04 Konferenz von Jalta, 4.-11.2. 1945
+04/25 Zusammentreffen von amerikanischen und sowjetischen Truppen
+ bei Torgau an der Elbe, 1945
+05/08 Bedingungslose Kapitulation von Deutschland, 1945
+07/01 Rückzug britischer und amerikanischer Truppen aus Sachsen, Thüringen und
+ Mecklenburg, Einmarsch westlicher Truppen in Berlin, 1945
+07/17 Potsdamer Konferenz, 1945
+09/01 Deutscher Überfall auf Polen, Beginn des 2. Weltkrieges, 1939
+10/01 Verkündigung der Urteile im Nürnberger Hauptkriegsverbrecherprozeß, 1946
+02/25 Auflösung der Landes Preußen durch den Kontrollrat, 1947
+08/06 Erster Atombombenabwurf auf Hiroshima, 1945
+08/08 Atombombenabwurf auf Nagasaki, 1945
+04/19 Aufstand im Warschauer Ghetto, 1943
+12/07 Japan bombardiert Pearl Harbor, 1941
+
+/* Deutschland nach dem 2. Weltkrieg */
+04/11 Attentat auf Dutschke, Studentenunruhen, 1968
+04/26 GAU in Tschernobyl, 1986
+05/05 Natobeitritt, Wiederbewaffnung, Souveränität der Bundesrepublik, 1955
+05/06 Rücktritt von Brandt, 1974
+05/16 Wahl von Schmidt (SPD) zum Bundeskanzler, 1974
+05/23 Verkündung des Grundgesetzes, 1949
+05/23 Wahl von Richard von Weizsäcker zum Bundespräsidenten, 1984
+06/05 Marshallplan, 1947
+06/20 Währungsreform in den Westzonen, 1948
+06/24 Beginn der Berliner Blockade, 1948
+07/01 Wahl von Heinrich Lübke zum Bundespräsidenten, 1959
+07/01 Wirtschafts- und Währungsunion, 1990
+08/12 Deutsch-sowjetischer Gewaltverzichtsvertrag, Moskau 1970
+08/14 Wahl zum ersten deutschen Bundestag, 1949
+09/03 Vier-Mächte-Abkommen über Berlin, 1971
+09/05 Entführung und Ermordung von Arbeitgeberpräsident Schleyer,
+ Entführung einer Lufthansa-Maschine nach Mogadischu, 1977
+09/07 DDR-Staatsratsvorsitzender Honecker in der Bundesrepublik, 1987
+09/12 Wahl von Theodor Heuss (FDP) zum Bundespräsidenten, 1949
+09/15 Wahl von Konrad Adenauer (CDU) zum Bundeskanzler, 1949
+09/17 Bruch der Sozialliberalen Koalition, 1982
+09/18 Aufnahme von Bundesrepublik und DDR in die UNO, 1973
+10/01 Ablösung von Bundeskanzler Schmidt durch Kohl, 1982
+10/23 Volksabstimmung im Saargebiet, 1955
+12/02 Washingtoner Abkommen über Bi-Zone, 1946
+12/07 Deutsch-polnischer Vertrag, Warschau 1970
+12/10 Friedensnobelpreis für Brandt, 1971
+12/12 Nachrüstungsbeschluß des NATO-Ministerates, 1979
+12/21 Grundlagenvertrag zwischen DDR und Bundesrepublik, 1972
+
+
+/* Nationalsozialismus */
+11/09 Hitler-Putsch in München/Marsch auf die Feldherrenhalle, 1923
+11/09 Reichskristallnacht, 1938
+09/14 Reichstagswahl: Erdrutsch zugunsten der NSDAP, 1930
+07/31 Reichstagswahl: NSDAP wird stärkste Fraktion, 1932
+11/06 Reichstagswahl: Rückgang der NSDAP, 1932
+01/30 Ernennung von Hitler zum Reichskanzler, 1933
+02/27 Reichstagsbrand, 1933
+03/05 Reichstagswahl: Mehrheit für NSDAP+DNVP, 1933
+03/23 Annahme des Ermächtigungsgesetzes, 1933
+03/31 Erstes Gesetz zur Gleichschaltung der Länder, 1933
+04/01 Organisierter Boykott jüdischer Geschäfte, 1933
+04/07 Zweites Gesetz zur Gleichschaltung der Länder, 1933
+05/02 Auflösung der Gewerkschaften, 1933
+06 Auflösung aller Parteien außer NSDAP, 1933
+07/20 Konkordat zwischen Deutschland und dem Vatikan, 1933
+06/30 Röhm-Putsch, Ausschaltung der SA-Führung, 1934
+09/15 Nürnberger Gesetze, 1935
+01/08 Eröffnung der olympischen Spiele in Berlin, 1936
+01/20 Wannseekonferenz, 1942
+04/30 Selbstmord Hitlers, 1945
+07/29 Mussolini geboren, 1883
+
+/* Sozialismus */
+01/21 Lenin gestorben, 1924
+06 Gründung des Bundes der Kommunisten in London
+ durch Marx und Engels, 1847
+05/23 Gründung des Allgemeinen Deutschen Arbeitervereins in Leipzig
+ unter Führung von Ferdinand Lassalles, 1863
+08/07 Gründung der Sozialdemokratischen Arbeiterpartei in Eisenach
+ unter der Führung von August Bebel und Wilhelm Liebknecht, 1869
+04/06 Gründung der Unabhängigen Sozialdemokratischen Partei, Gotha 1917
+11/07 Oktoberrevolution in Rußland, Putsch der Bolschewisten, 1917
+12/31 Gründung der KPD, 1918
+01/15 Ermordung von Rosa Luxemburg und Karl Liebknecht, 1919
+03/05 Tod Stalins, 1953
+03/18 Erste demokratische Volkskammerwahl, 1990
+04/21 Zwangsvereinigung von KPD und SPD zur SED, 1946
+05/14 Gründung der Warschauer Paktes, 1955
+06/17 Arbeiteraufstand am 17. Juni 1953
+06/25 Begin der Korea-Krieges, 1950
+08/13 Bau der Berliner Mauer, 1961
+08/21 Einmarsch des Warschauer Pakts in die Tschechoslowakei, 1968
+10/03 Offizielles Ende der DDR :-), 1990
+10/07 Gründung der DDR, 1949
+10/09 Massendemonstration in Leipzig, 1989
+10/14 Kuba-Krise, 1962
+10/18 Ablösung von Erich Honecker als SED-Generalsekretär, 1989
+11/09 Fall der Berliner Mauer, 1989
+09/09 Mao Tse-Tung gestorben im Alter von 82 Jahren, 1976
+11/10 Sowjetischer Präsident Leonid Breschnew gestorben, Alter 75, 1982
+03/27 Chruschtschow wird sowjetischer Präsident, 1958
+10/12 Chruschtschow schlägt während einer Rede in der UNO mit den
+ Schuhen auf den Tisch, 1960
+
+#endif /* _de_DE_ISO8859_1_geschichte_ */
diff --git a/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.kirche b/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.kirche
new file mode 100644
index 0000000..eba0fe3
--- /dev/null
+++ b/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.kirche
@@ -0,0 +1,32 @@
+/*
+ * Kirche in Deutschland
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/de_DE.ISO8859-1/calendar.kirche,v 1.7 2001/06/11 03:06:13 ache Exp $
+ */
+
+#ifndef _de_DE_ISO8859_1_kirche_
+#define _de_DE_ISO8859_1_kirche_
+
+LANG=de_DE.ISO8859-1
+
+Easter-46 Aschermittwoch
+Easter-48 Rosenmontag
+Easter-7 Palmsonntag
+
+11/Sun-3 Volkstrauertag (maybe)
+11/Sun-2 Volkstrauertag oder Totensonntag
+11/Sun-1 1. Advent oder Totensonntag
+12/Sun+1 1. oder 2. Advent
+12/Sun+2 2. oder 3. Advent
+12/Sun+3 3. oder 4. Advent
+12/Sun+4 4. Advent (maybe)
+
+12/06 Nikolaus
+12/25 1. Weihnachtstag
+12/26 2. Weihnachtstag
+
+/* Evangelische Kirche */
+11/10 Martin Luther geboren in Eisleben, 1483
+10/31 95 Thesen von Luther, Wittenberg, 1517
+
+#endif /* !_de_DE_ISO8859_1_kirche_ */
diff --git a/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.literatur b/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.literatur
new file mode 100644
index 0000000..db1f6bd
--- /dev/null
+++ b/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.literatur
@@ -0,0 +1,54 @@
+/*
+ * Literatur
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/de_DE.ISO8859-1/calendar.literatur,v 1.8 2003/10/06 01:17:42 grog Exp $
+ */
+
+#ifndef _de_DE_ISO8859_1_literatur_
+#define _de_DE_ISO8859_1_literatur_
+
+LANG=de_DE.ISO8859-1
+
+/* Schriftsteller
+
+ Fontane
+ Goethe
+ Grass
+ Hegel
+ Heine
+ Schiller
+ */
+
+01/04 Jakob Grimm geboren, 1785
+01/18 Arno Schmidt in Hamburg geboren, 1914
+02/09 Thomas Bernhard in Heerlen geboren, 1931
+02/12 Immanuel Kant in Königsberg gestorben, 1804
+02/12 Thomas Bernhard in Gmunden gestorben, 1989
+02/17 Heinrich Heine in Paris gestorben, 1856
+03/22 Johann Wolfgang von Goethe in Weimar gestorben, 1832
+04/22 Kant geboren, 1724
+05/09 Friedrich von Schiller in Weimar gestorben, 1805
+06/03 Arno Schmidt in Celle gestorben, 1979
+06/03 Franz Kafka in Prag gestorben, 1924
+06/06 Thomas Mann in Lübeck geboren, 1875
+07/03 Franz Kafka geboren, 1883
+08/12 Thomas Mann gestorben, 1955
+08/27 Georg Wilhelm Friedrich Hegel in Stuttgart geboren, 1770
+08/28 Johann Wolfgang von Goethe in Frankfurt am Main geboren, 1749
+09/20 Theodor Fontane in Berlin gestorben, 1898
+10/16 Günter Grass in Danzig geboren, 1927
+11/10 Friedrich von Schiller in Marbach geboren, 1759
+11/14 Georg Wilhelm Friedrich Hegel in Berlin gestorben, 1831
+12/13 Heinrich Heine in Düsseldorf geboren, 1797
+12/30 Theodor Fontane in Neuruppin geboren, 1819
+
+
+/* Verlage */
+03/09 "die tageszeitung" als erste täglich aktualisierte deutsche
+ Tageszeitung im WWW, 1995, Betatest, vollständige Ausgabe
+05/05 Schweriner Volkszeitung als erste deutsche Tageszeitung im WWW, 1995
+05/12 "die tageszeitung" offiziell im WWW, 1995
+08/31 Hitler stellt Frankfurter Zeitung ein, 1943
+11/01 Frankfurter Allgemeine Zeitung in Leben gerufen, 1949
+
+#endif /* !_de_DE_ISO8859_1_literatur_ */
diff --git a/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.musik b/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.musik
new file mode 100644
index 0000000..7dd5175
--- /dev/null
+++ b/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.musik
@@ -0,0 +1,66 @@
+/*
+ * Musik
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/de_DE.ISO8859-1/calendar.musik,v 1.13 2006/10/24 23:18:07 grog Exp $
+ */
+
+#ifndef _de_DE_ISO8859_1_musik_
+#define _de_DE_ISO8859_1_musik_
+
+LANG=de_DE.ISO8859-1
+
+/* Barock */
+02/23 Georg Friedrich Händel in Halle an der Saale geboren, 1685
+03/14 Georg Philipp Telemann in Magdeburg geboren, 1681
+03/21 Johann Sebastian Bach in Eisenach geboren, 1685
+04/14 Georg Friedrich Händel in London gestorben, 1759
+06/25 Georg Philipp Telemann in Hamburg gestorben, 1767
+07/17 Diderich Buxtehude in Lübeck gestorben, 1707
+07/28 Johann Sebastian Bach in Leipzig gestorben, 1750
+
+/* Klassik */
+01/27 Wolfgang Amadeus Mozart in Salzburg geboren, 1756
+01/31 Franz Schubert in Lichtenthal bei Wien geboren, 1797
+02/03 Felix Mendelssohn Bartholdy in Hamburg geboren, 1809
+02/13 Richard Wagner in Venedig gestorben, 1883
+03/01 Frederic Chopin in Zelazowa-Wola bei Warschau geboren, 1810
+03/08 (Louis) Hector Berlioz in Paris gestorben, 1869
+03/25 Bela Bartok in Nagyszentmiklos geboren, 1881
+03/26 Ludwig van Beethoven in Wien gestorben, 1827
+03/28 Sergej Rachmaninow in Beverley Hills gestorben, 1943
+03/29 Carl Orff in München gestorben, 1982
+03/31 Joseph Haydn in Rohrau geboren, 1732
+04/01 Sergej Rachmaninow in Oneg geboren, 1873
+04/03 Johannes Brahms in Wien gestorben, 1897
+05/07 Johannes Brahms in Hamburg geboren, 1833
+05/18 Gustav Mahler in Wien gestorben, 1911
+05/22 Richard Wagner in Leipzig geboren, 1813
+05/31 Joseph Haydn in Wien gestorben, 1809
+06/03 Georges Bizet in Bougival bei Paris gestorben, 1875
+06/05 Carl Maria von Weber in London gestorben, 1826
+06/08 Robert Schumann in Zwickau geboren, 1810
+06/11 Richard Strauss in München geboren, 1864
+06/15 Edvard Grieg in Bergen geboren, 1843
+07/07 Gustav Mahler in Kalischt geboren, 1860
+07/10 Carl Orff in München geboren, 1895
+07/29 Robert Schumann in Endenich bei Bonn gestorben, 1856
+07/31 Franz Liszt in Bayreuth gestorben, 1886
+09/04 Edvard Grieg in Bergen gestorben, 1907
+09/08 Richard Strauss in Garmisch-Partenkirchen gestorben, 1949
+09/26 Bela Bartok in New York gestorben, 1945
+10/17 Frederic Chopin in Paris gestorben, 1849
+10/22 Franz Liszt in Raiding (Ungarn) geboren, 1811
+10/25 Georges Bizet in Paris geboren, 1838
+11/04 Felix Mendelssohn Bartholdy in Leipzig gestorben, 1847
+11/18 Carl Maria von Weber in Eutin geboren, 1786
+11/19 Franz Schubert in Wien gestorben, 1828
+11/26 Paul Hindemith in Hanau geboren, 1895
+12/05 Wolfgang Amadeus Mozart in Wien gestorben, 1791
+12/11 (Louis) Hector Berlioz in La-Côte-Saint-André geboren, 1803
+12/17 Ludwig van Beethoven in Bonn getauft, 1770
+12/28 Paul Hindemith in Frankfurt am Main gestorben, 1963
+
+/* Pop */
+09/18 Jimi Hendrix in Paris gestorben, 1970
+
+#endif /* !_de_DE_ISO8859_1_musik_ */
diff --git a/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.wissenschaft b/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.wissenschaft
new file mode 100644
index 0000000..444d05b
--- /dev/null
+++ b/misc_cmds/calendar/calendars/de_DE.ISO8859-1/calendar.wissenschaft
@@ -0,0 +1,19 @@
+/*
+ * Wissenschaft
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/de_DE.ISO8859-1/calendar.wissenschaft,v 1.9 2003/10/15 08:18:59 tg Exp $
+ */
+
+#ifndef _de_DE_ISO8859_1_wissenschaft_
+#define _de_DE_ISO8859_1_wissenschaft_
+
+LANG=de_DE.ISO8859-1
+
+04/12 Erster Mann im All, Juri Gagarin, 1961
+04/18 Einstein gestorben, 1955
+06/22 Konrad Zuse geboren in Berlin, 1919
+10/04 Sputnik 1, erster Satellit im Weltraum, 1957
+12/18 Konrad Zuse gestorben in Hünfeld, 1995
+
+
+#endif /* ! _de_DE_ISO8859_1_wissenschaft_ */
diff --git a/misc_cmds/calendar/calendars/fr_FR.ISO8859-1/calendar.all b/misc_cmds/calendar/calendars/fr_FR.ISO8859-1/calendar.all
new file mode 100644
index 0000000..9a706c0
--- /dev/null
+++ b/misc_cmds/calendar/calendars/fr_FR.ISO8859-1/calendar.all
@@ -0,0 +1,14 @@
+/*
+ * Calendrier français
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/fr_FR.ISO8859-1/calendar.all,v 1.1 2002/04/29 20:57:36 dwmalone Exp $
+ */
+
+#ifndef _fr_FR_ISO8859_1_all_
+#define _fr_FR_ISO8859_1_all_
+
+#include <fr_FR.ISO8859-1/calendar.jferies>
+#include <fr_FR.ISO8859-1/calendar.fetes>
+#include <fr_FR.ISO8859-1/calendar.proverbes>
+
+#endif /* !_fr_FR.ISO8859-1_all_ */
diff --git a/misc_cmds/calendar/calendars/fr_FR.ISO8859-1/calendar.fetes b/misc_cmds/calendar/calendars/fr_FR.ISO8859-1/calendar.fetes
new file mode 100644
index 0000000..7eb0183
--- /dev/null
+++ b/misc_cmds/calendar/calendars/fr_FR.ISO8859-1/calendar.fetes
@@ -0,0 +1,630 @@
+/*
+ * Fêtes à souhaiter
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/fr_FR.ISO8859-1/calendar.fetes,v 1.2 2006/04/13 12:14:44 flz Exp $
+ */
+
+#ifndef _fr_FR_ISO8859_1_fetes_
+#define _fr_FR_ISO8859_1_fetes_
+
+LANG=fr_FR.ISO8859-1
+
+/*
+ * N.B.: ceci n'est pas un calendrier liturgique !
+ * Il a seulement été réalisé pour me faire payer à boire
+ * par mes collègues de travail ; on n'y trouve donc que
+ * des prénoms seuls.
+ *
+ * Par ex. « St Antoine de Padoue » se retrouve abrégé en
+ * Antoine, et si Antoine est fêté plusieurs jours par an,
+ * tant mieux pour lui, c'est voulu.
+ */
+
+01/01 Aujourd'hui, c'est la St(e) Almaque.
+01/01 N'oubliez pas les Télémaque !
+01/02 Bonne fête aux Basile !
+01/02 Aujourd'hui, c'est la St(e) Vassili.
+01/02 N'oubliez pas les Grégoire !
+01/03 Bonne fête aux Geneviève !
+01/03 Aujourd'hui, c'est la St(e) Ginette.
+01/04 N'oubliez pas les Odilon !
+01/04 Bonne fête aux Angèle !
+01/04 Aujourd'hui, c'est la St(e) Robert.
+01/05 N'oubliez pas les Édouard !
+01/05 Bonne fête aux Gerlac !
+01/06 Aujourd'hui, c'est la St(e) Mélaine.
+01/06 N'oubliez pas les André !
+01/07 Galette des rois
+01/07 Aujourd'hui, c'est la St(e) Raymond.
+01/07 N'oubliez pas les Raymonde !
+01/07 Bonne fête aux Virginie !
+01/08 Aujourd'hui, c'est la St(e) Lucien.
+01/08 N'oubliez pas les Lucienne !
+01/08 Bonne fête aux Peggy !
+01/08 Aujourd'hui, c'est la St(e) Gudule.
+01/09 N'oubliez pas les Adrien !
+01/09 Bonne fête aux Alix !
+01/10 Aujourd'hui, c'est la St(e) Guillaume.
+01/10 N'oubliez pas les Guillemette !
+01/11 Bonne fête aux Paulin !
+01/11 Aujourd'hui, c'est la St(e) Pauline.
+01/12 N'oubliez pas les Tatiana !
+01/12 Bonne fête aux Alfred !
+01/12 Aujourd'hui, c'est la St(e) Ailred (Aelred, Eilred, Elred).
+01/13 N'oubliez pas les Vivant !
+01/13 Bonne fête aux Vivence !
+01/13 Aujourd'hui, c'est la St(e) Hilaire.
+01/13 N'oubliez pas les Yvette !
+01/14 Bonne fête aux Nina !
+01/14 Aujourd'hui, c'est la St(e) Séraphin.
+01/15 N'oubliez pas les Rémi !
+01/16 Bonne fête aux Marcel !
+01/16 Aujourd'hui, c'est la St(e) Marcelle.
+01/16 N'oubliez pas les Marceau !
+01/16 Bonne fête aux Honorat !
+01/17 Aujourd'hui, c'est la St(e) Roseline.
+01/17 N'oubliez pas les Antoine !
+01/17 Bonne fête aux Anthony !
+01/18 Aujourd'hui, c'est la St(e) Prisca.
+01/18 N'oubliez pas les Libert !
+01/19 Bonne fête aux Marius !
+01/19 Aujourd'hui, c'est la St(e) Canut.
+01/20 N'oubliez pas les Fabienne !
+01/20 Bonne fête aux Sébastien !
+01/20 Aujourd'hui, c'est la St(e) Bastien.
+01/21 N'oubliez pas les Agnès !
+01/21 Bonne fête aux Fructueux !
+01/21 Aujourd'hui, c'est la St(e) Augure.
+01/21 N'oubliez pas les Euloge !
+01/21 Bonne fête aux Avit !
+01/22 Aujourd'hui, c'est la St(e) Vincent.
+01/22 N'oubliez pas les Blésille !
+01/23 Bonne fête aux Barnard !
+01/24 Aujourd'hui, c'est la St(e) François.
+01/25 N'oubliez pas les Morgane !
+01/26 Bonne fête aux Paule !
+01/26 Aujourd'hui, c'est la St(e) Timothée.
+01/26 N'oubliez pas les Tite !
+01/27 Bonne fête aux Angèle !
+01/28 Aujourd'hui, c'est la St(e) Thomas.
+01/29 N'oubliez pas les Gildas !
+01/29 Bonne fête aux Sulpice !
+01/30 Aujourd'hui, c'est la St(e) Martine.
+01/31 N'oubliez pas les Marcelle !
+01/31 Bonne fête aux Jean !
+02/01 Aujourd'hui, c'est la St(e) Ella.
+02/01 N'oubliez pas les Viridiane !
+02/02 Bonne fête aux Théophane !
+02/03 Aujourd'hui, c'est la St(e) Blaise.
+02/03 N'oubliez pas les Anschaire !
+02/04 Bonne fête aux Véronique !
+02/04 Aujourd'hui, c'est la St(e) Jeanne.
+02/04 N'oubliez pas les Gilbert !
+02/05 Bonne fête aux Agathe !
+02/06 Aujourd'hui, c'est la St(e) Gaston.
+02/06 N'oubliez pas les Armand !
+02/07 Bonne fête aux Eugénie !
+02/07 Aujourd'hui, c'est la St(e) Partène.
+02/08 N'oubliez pas les Jacqueline !
+02/08 Bonne fête aux Jérôme !
+02/09 Aujourd'hui, c'est la St(e) Apolline.
+02/09 N'oubliez pas les Appollonie !
+02/10 Bonne fête aux Arnaud !
+02/10 Aujourd'hui, c'est la St(e) Scholastique.
+02/11 N'oubliez pas les Séverin !
+02/11 Bonne fête aux Séverine !
+02/12 Aujourd'hui, c'est la St(e) Félix.
+02/12 N'oubliez pas les Eulalie !
+02/13 Bonne fête aux Béatrice !
+02/13 Aujourd'hui, c'est la St(e) Polyeucte.
+02/14 N'oubliez pas les Valentin !
+02/14 Bonne fête aux Méthode !
+02/14 Aujourd'hui, c'est la St(e) Cyrille.
+02/15 N'oubliez pas les Claude !
+02/15 Bonne fête aux Georgette !
+02/16 Aujourd'hui, c'est la St(e) Julienne.
+02/17 N'oubliez pas les Alexis !
+02/18 Bonne fête aux Bernadette et aux Nadine !
+02/19 Aujourd'hui, c'est la St(e) Gabin.
+02/20 N'oubliez pas les Aimée !
+02/20 Bonne fête aux Aimé !
+02/20 Aujourd'hui, c'est la St(e) Amata.
+02/21 N'oubliez pas les Pierre-Damien !
+02/22 Bonne fête aux Isabelle !
+02/23 Aujourd'hui, c'est la St(e) Lazare.
+02/23 N'oubliez pas les Polycarpe !
+02/24 Bonne fête aux Modeste !
+02/25 Aujourd'hui, c'est la St(e) Roméo.
+02/25 N'oubliez pas les Avertan !
+02/26 Bonne fête aux Nestor !
+02/27 Aujourd'hui, c'est la St(e) Honorine.
+02/27 N'oubliez pas les Gabriel !
+02/28 Bonne fête aux Romain !
+02/28 Aujourd'hui, c'est la St(e) Lupicin.
+02/29 N'oubliez pas les Auguste !
+03/01 Bonne fête aux Aubin !
+03/01 Aujourd'hui, c'est la St(e) Albin.
+03/02 N'oubliez pas les Charles !
+03/03 Bonne fête aux Guénolé (Gwénolé) !
+03/04 Aujourd'hui, c'est la St(e) Casimir.
+03/05 N'oubliez pas les Olive !
+03/05 Bonne fête aux Olivia !
+03/06 Aujourd'hui, c'est la St(e) Colette.
+03/06 N'oubliez pas les Nicole !
+03/07 Bonne fête aux Félicité !
+03/07 Aujourd'hui, c'est la St(e) Félicie.
+03/07 N'oubliez pas les Perpétue !
+03/08 Bonne fête aux Jean !
+03/09 Aujourd'hui, c'est la St(e) Françoise.
+03/10 N'oubliez pas les Vivien !
+03/10 Bonne fête aux Dominique !
+03/11 Aujourd'hui, c'est la St(e) Rosine.
+03/12 N'oubliez pas les Justine !
+03/12 Bonne fête aux Maximilien !
+03/13 Aujourd'hui, c'est la St(e) Rodrigue.
+03/13 N'oubliez pas les Salomon !
+03/13 Bonne fête aux Euphrasie !
+03/14 Aujourd'hui, c'est la St(e) Mathilde.
+03/15 N'oubliez pas les Louise !
+03/16 Bonne fête aux Bénédicte !
+03/16 Aujourd'hui, c'est la St(e) Benoîte.
+03/16 N'oubliez pas les Julien !
+03/17 C'est la St Patrick !
+03/17 Aujourd'hui, c'est la St(e) Patrice.
+03/18 N'oubliez pas les Cyrille !
+03/19 Bonne fête aux Joseph !
+03/20 Aujourd'hui, c'est la St(e) Herbert.
+03/20 N'oubliez pas les Wulfran !
+03/21 Bonne fête aux Clémence !
+03/22 Aujourd'hui, c'est la St(e) Léa.
+03/23 N'oubliez pas les Victorien !
+03/23 Bonne fête aux Turibio !
+03/24 Aujourd'hui, c'est la St(e) Catherine.
+03/24 N'oubliez pas les Karine !
+03/26 Bonne fête aux Lara !
+03/26 Aujourd'hui, c'est la St(e) Ludger.
+03/26 N'oubliez pas les Larissa !
+03/27 Bonne fête aux Habib !
+03/28 Aujourd'hui, c'est la St(e) Gontran.
+03/29 N'oubliez pas les Gwladys !
+03/29 Bonne fête aux Eustase !
+03/30 Aujourd'hui, c'est la St(e) Amédée.
+03/31 N'oubliez pas les Benjamin !
+03/31 Bonne fête aux Benjamine !
+04/01 Votre fichier calendar est corrompu.
+04/01 N'oubliez pas les Hugues !
+04/02 Bonne fête aux Sandrine !
+04/03 Aujourd'hui, c'est la St(e) Richard.
+04/04 N'oubliez pas les Isidore !
+04/04 Bonne fête aux Benoît !
+04/05 Aujourd'hui, c'est la St(e) Irène.
+04/05 N'oubliez pas les Vincent !
+04/06 Bonne fête aux Marcellin !
+04/06 Aujourd'hui, c'est la St(e) Célestin.
+04/06 N'oubliez pas les Guillaume !
+04/07 Bonne fête aux Jean-Baptiste !
+04/07 Aujourd'hui, c'est la St(e) Julienne.
+04/08 N'oubliez pas les Perpet !
+04/08 Bonne fête aux Perpetuus !
+04/09 Aujourd'hui, c'est la St(e) Gautier.
+04/09 N'oubliez pas les Jean !
+04/10 Bonne fête aux Fulbert !
+04/10 Aujourd'hui, c'est la St(e) Michel.
+04/11 N'oubliez pas les Stanislas !
+04/11 Bonne fête aux Gemma !
+04/11 Aujourd'hui, c'est la St(e) Léon.
+04/12 N'oubliez pas les Jules !
+04/12 Bonne fête aux Sabas !
+04/13 Aujourd'hui, c'est la St(e) Ida.
+04/13 N'oubliez pas les Herménégilde !
+04/14 Bonne fête aux Maxime !
+04/14 Aujourd'hui, c'est la St(e) Lydwine.
+04/14 N'oubliez pas les Bénézet !
+04/15 Bonne fête aux Pierre !
+04/16 Aujourd'hui, c'est la St(e) Benoît.
+04/17 N'oubliez pas les Anicet !
+04/17 Bonne fête aux Kateri !
+04/18 Aujourd'hui, c'est la St(e) Parfait.
+04/19 N'oubliez pas les Emma !
+04/19 Bonne fête aux Elphège !
+04/20 Aujourd'hui, c'est la St(e) Odette.
+04/20 N'oubliez pas les Agnès !
+04/21 Bonne fête aux Anselme !
+04/22 Aujourd'hui, c'est la St(e) Alexandre.
+04/22 N'oubliez pas les Soter !
+04/22 Bonne fête aux Caïus !
+04/22 Aujourd'hui, c'est la St(e) Léonide.
+04/23 N'oubliez pas les Georges !
+04/23 Bonne fête aux Pierre !
+04/24 Aujourd'hui, c'est la St(e) Fidèle.
+04/24 N'oubliez pas les Marie-Euphrasie !
+04/25 Bonne fête aux Marc !
+04/26 Aujourd'hui, c'est la St(e) Alida.
+04/27 N'oubliez pas les Zita !
+04/27 Bonne fête aux Pierre !
+04/28 Aujourd'hui, c'est la St(e) Valérie.
+04/28 N'oubliez pas les Louis-Marie !
+04/28 Bonne fête aux Paul !
+04/29 Aujourd'hui, c'est la St(e) Joseph-Benoît.
+04/29 N'oubliez pas les Hugues !
+04/30 Bonne fête aux Robert !
+04/30 Aujourd'hui, c'est la St(e) Catherine.
+05/02 N'oubliez pas les Boris !
+05/03 Bonne fête aux Jacques !
+05/03 Aujourd'hui, c'est la St(e) Philippe.
+05/04 N'oubliez pas les Sylvain !
+05/05 Bonne fête aux Judith !
+05/06 Aujourd'hui, c'est la St(e) Prudence.
+05/07 N'oubliez pas les Gisèle !
+05/09 Bonne fête aux Pacôme !
+05/10 Aujourd'hui, c'est la St(e) Solange.
+05/11 N'oubliez pas les Estelle !
+05/12 Bonne fête aux Achille !
+05/14 Aujourd'hui, c'est la St(e) Matthias.
+05/15 N'oubliez pas les Denise !
+05/16 Bonne fête aux Honoré !
+05/17 Aujourd'hui, c'est la St(e) Pascal.
+05/18 N'oubliez pas les Éric !
+05/19 Bonne fête aux Yves !
+05/19 Aujourd'hui, c'est la St(e) Yvonne.
+05/20 N'oubliez pas les Bernardin !
+05/21 Bonne fête aux Constantin !
+05/22 Aujourd'hui, c'est la St(e) Émile.
+05/23 N'oubliez pas les Didier !
+05/24 Bonne fête aux Donatien !
+05/25 Aujourd'hui, c'est la St(e) Sophie.
+05/26 N'oubliez pas les Bérenger !
+05/28 Bonne fête aux Germain !
+05/29 Aujourd'hui, c'est la St(e) Aymard.
+05/30 N'oubliez pas les Ferdinand !
+06/01 Bonne fête aux Justin !
+06/02 Aujourd'hui, c'est la St(e) Blandine.
+06/03 N'oubliez pas les Kévin !
+06/04 Bonne fête aux Clotilde !
+06/05 Aujourd'hui, c'est la St(e) Igor.
+06/06 N'oubliez pas les Norbert !
+06/07 Bonne fête aux Gilbert !
+06/08 Aujourd'hui, c'est la St(e) Médard.
+06/09 N'oubliez pas les Diane !
+06/11 Bonne fête aux Barnabé !
+06/11 Aujourd'hui, c'est la St(e) Yolande.
+06/12 N'oubliez pas les Guy !
+06/13 Bonne fête aux Antoine !
+06/14 Aujourd'hui, c'est la St(e) Élisée.
+06/15 N'oubliez pas les Germaine !
+06/16 Bonne fête aux Jean-François !
+06/17 Aujourd'hui, c'est la St(e) Hervé.
+06/18 N'oubliez pas les Léonce !
+06/19 Bonne fête aux Romuald !
+06/20 Aujourd'hui, c'est la St(e) Silvère.
+06/21 N'oubliez pas les Rodolphe !
+06/22 Bonne fête aux Alban !
+06/23 Aujourd'hui, c'est la St(e) Audrey.
+06/24 N'oubliez pas les Jean-Baptiste !
+06/25 Bonne fête aux Prosper !
+06/26 Aujourd'hui, c'est la St(e) Anthelme.
+06/27 N'oubliez pas les Fernand !
+06/28 Bonne fête aux Irénée !
+06/29 Aujourd'hui, c'est la St(e) Paul.
+06/29 N'oubliez pas les Pierre !
+06/30 Bonne fête aux Martial !
+07/01 Aujourd'hui, c'est la St(e) Thierry.
+07/02 N'oubliez pas les Martinien !
+07/03 Bonne fête aux Thomas !
+07/04 Aujourd'hui, c'est la St(e) Florent.
+07/05 N'oubliez pas les Antoine !
+07/06 Bonne fête aux Mariette !
+07/07 Aujourd'hui, c'est la St(e) Raoul.
+07/08 N'oubliez pas les Thibaut !
+07/09 Bonne fête aux Amandine !
+07/10 Aujourd'hui, c'est la St(e) Ulrich.
+07/11 N'oubliez pas les Benoît !
+07/12 Bonne fête aux Olivier !
+07/13 Aujourd'hui, c'est la St(e) Henri.
+07/13 N'oubliez pas les Joël !
+07/14 Bonne fête aux Camille !
+07/15 Aujourd'hui, c'est la St(e) Donald.
+07/17 N'oubliez pas les Caroline !
+07/17 Bonne fête aux Charlotte !
+07/18 Aujourd'hui, c'est la St(e) Frédéric.
+07/19 N'oubliez pas les Arsène !
+07/20 Bonne fête aux Marina !
+07/21 Aujourd'hui, c'est la St(e) Victor.
+07/22 N'oubliez pas les Marie-Madeleine !
+07/23 Bonne fête aux Brigitte !
+07/24 Aujourd'hui, c'est la St(e) Christine.
+07/25 N'oubliez pas les Jacques !
+07/26 Bonne fête aux Anne !
+07/26 Aujourd'hui, c'est la St(e) Joachim.
+07/27 N'oubliez pas les Nathalie !
+07/28 Bonne fête aux Samson !
+07/29 Aujourd'hui, c'est la St(e) Marthe.
+07/30 N'oubliez pas les Juliette !
+07/31 Bonne fête aux Ignace !
+08/01 Aujourd'hui, c'est la St(e) Alphonse.
+08/01 N'oubliez pas les Pierre !
+08/02 Bonne fête aux Julien !
+08/03 Aujourd'hui, c'est la St(e) Lydie.
+08/03 N'oubliez pas les Pierre-Julien !
+08/04 Bonne fête aux Jean-Marie !
+08/04 Aujourd'hui, c'est la St(e) Dominique.
+08/05 N'oubliez pas les Abel !
+08/05 Bonne fête aux Oswald !
+08/07 Aujourd'hui, c'est la St(e) Gaëtan.
+08/08 N'oubliez pas les Dominique !
+08/08 Bonne fête aux Cyriaque !
+08/09 Aujourd'hui, c'est la St(e) Amour.
+08/10 N'oubliez pas les Laurent !
+08/11 Bonne fête aux Claire !
+08/11 Aujourd'hui, c'est la St(e) Philomène.
+08/12 N'oubliez pas les Clarisse !
+08/13 Bonne fête aux Hyppolite !
+08/13 Aujourd'hui, c'est la St(e) Radegonde.
+08/14 N'oubliez pas les Évrard !
+08/14 Bonne fête aux Maximilien !
+08/15 Aujourd'hui, c'est la St(e) Marie.
+08/16 N'oubliez pas les Armel !
+08/16 Bonne fête aux Roch !
+08/17 Aujourd'hui, c'est la St(e) Hyacinthe.
+08/18 N'oubliez pas les Hélène !
+08/19 Bonne fête aux Jean-Eudes !
+08/19 Aujourd'hui, c'est la St(e) Louis.
+08/20 N'oubliez pas les Bernard !
+08/21 Bonne fête aux Christophe !
+08/21 Aujourd'hui, c'est la St(e) Jeanne.
+08/22 N'oubliez pas les Fabrice !
+08/22 Bonne fête aux Symphorien !
+08/23 Aujourd'hui, c'est la St(e) Rose.
+08/23 N'oubliez pas les Philippe !
+08/24 Bonne fête aux Barthélémy !
+08/25 Aujourd'hui, c'est la St(e) Louis.
+08/26 N'oubliez pas les Natacha !
+08/26 Bonne fête aux Zéphirin !
+08/26 Aujourd'hui, c'est la St(e) Eulade.
+08/27 N'oubliez pas les Edwige !
+08/27 Bonne fête aux Joseph !
+08/28 Aujourd'hui, c'est la St(e) Augustin.
+08/29 N'oubliez pas les Sabine !
+08/30 Bonne fête aux Fiacre !
+08/30 Aujourd'hui, c'est la St(e) Rose.
+08/31 N'oubliez pas les Aristide !
+08/31 Bonne fête aux Raymond !
+09/01 Aujourd'hui, c'est la St(e) Gilles.
+09/02 N'oubliez pas les Ingrid !
+09/03 Bonne fête aux Grégoire !
+09/04 Aujourd'hui, c'est la St(e) Rosalie.
+09/05 N'oubliez pas les Raïssa !
+09/06 Bonne fête aux Bertrand !
+09/07 Aujourd'hui, c'est la St(e) Reine.
+09/09 N'oubliez pas les Alain !
+09/10 Bonne fête aux Inès !
+09/11 Aujourd'hui, c'est la St(e) Adelphe.
+09/12 N'oubliez pas les Apollinaire !
+09/13 Bonne fête aux Aimé !
+09/15 Aujourd'hui, c'est la St(e) Roland.
+09/16 N'oubliez pas les Édith !
+09/17 Bonne fête aux Renaud !
+09/18 Aujourd'hui, c'est la St(e) Nadège.
+09/19 N'oubliez pas les Émilie !
+09/20 Bonne fête aux Davy !
+09/21 Aujourd'hui, c'est la St(e) Matthieu.
+09/22 N'oubliez pas les Maurice !
+09/23 Bonne fête aux Constant !
+09/24 Aujourd'hui, c'est la St(e) Thècle.
+09/25 N'oubliez pas les Hermann !
+09/26 Bonne fête aux Côme !
+09/26 Aujourd'hui, c'est la St(e) Damien.
+09/27 N'oubliez pas les Vincent !
+09/28 Bonne fête aux Venceslas !
+09/29 Aujourd'hui, c'est la St(e) Michel.
+09/29 N'oubliez pas les Raphaël !
+09/30 Bonne fête aux Jérôme !
+10/01 Aujourd'hui, c'est la St(e) Thérèse.
+10/02 N'oubliez pas les Léger !
+10/03 Bonne fête aux Gérard !
+10/04 Aujourd'hui, c'est la St(e) François.
+10/05 N'oubliez pas les Placide !
+10/05 Bonne fête aux Fleur !
+10/05 Aujourd'hui, c'est la St(e) Flore.
+10/05 N'oubliez pas les Pâquerette !
+10/05 Bonne fête aux Violette !
+10/05 Aujourd'hui, c'est la St(e) Pervenche.
+10/05 N'oubliez pas les Anémone !
+10/05 Bonne fête aux Bluette !
+10/05 Aujourd'hui, c'est la St(e) Capucine.
+10/05 N'oubliez pas les Dahlia !
+10/05 Bonne fête aux Myrtille !
+10/05 Aujourd'hui, c'est la St(e) Hortense.
+10/05 N'oubliez pas les Violaine !
+10/05 Bonne fête aux Anne-Aymone !
+10/05 Aujourd'hui, c'est la St(e) Dalie.
+10/06 N'oubliez pas les Bruno !
+10/06 Bonne fête aux Foy !
+10/07 Aujourd'hui, c'est la St(e) Serge.
+10/08 N'oubliez pas les Pélagie !
+10/26 Bonne fête aux Démétrius !
+10/09 Aujourd'hui, c'est la St(e) Denis.
+10/09 N'oubliez pas les Denys !
+10/10 Bonne fête aux Ghislain !
+10/10 Aujourd'hui, c'est la St(e) Ghislaine.
+10/10 N'oubliez pas les Guislain !
+10/10 Bonne fête aux Guislaine !
+10/11 Aujourd'hui, c'est la St(e) Firmin.
+10/11 N'oubliez pas les Gausbert !
+10/12 Bonne fête aux Wilfried !
+10/12 Aujourd'hui, c'est la St(e) Séraphin.
+10/13 N'oubliez pas les Géraud !
+10/14 Bonne fête aux Juste !
+10/14 Aujourd'hui, c'est la St(e) Calliste.
+10/15 N'oubliez pas les Thérèse !
+10/16 Bonne fête aux Edwige !
+10/16 Aujourd'hui, c'est la St(e) Marie-Marguerite.
+10/17 N'oubliez pas les Baudoin !
+10/17 Bonne fête aux Ignace !
+10/18 Aujourd'hui, c'est la St(e) Luc.
+10/19 N'oubliez pas les René !
+10/20 Bonne fête aux Adeline !
+10/20 Aujourd'hui, c'est la St(e) Aline.
+10/20 N'oubliez pas les Line !
+10/21 Bonne fête aux Céline !
+10/21 Aujourd'hui, c'est la St(e) Hilarion.
+10/22 N'oubliez pas les Élodie !
+10/22 Bonne fête aux Nunillon !
+10/22 Aujourd'hui, c'est la St(e) Salomé.
+10/23 N'oubliez pas les Jean !
+10/24 Bonne fête aux Florentin !
+10/25 Aujourd'hui, c'est la St(e) Crépin.
+10/25 N'oubliez pas les Crépinien !
+10/25 Bonne fête aux Chrysanthe !
+10/25 Aujourd'hui, c'est la St(e) Darie.
+10/25 N'oubliez pas les Enguerran !
+10/26 Bonne fête aux Dimitri !
+10/26 Aujourd'hui, c'est la St(e) Évariste.
+10/27 N'oubliez pas les Émeline !
+10/27 Bonne fête aux Didier !
+10/27 Aujourd'hui, c'est la St(e) Frumence.
+10/28 N'oubliez pas les Jude !
+10/28 Bonne fête aux Judas !
+10/28 Aujourd'hui, c'est la St(e) Thaddée.
+10/28 N'oubliez pas les Simon !
+10/28 Bonne fête aux Simone (Simonne) !
+10/29 Aujourd'hui, c'est la St(e) Narcisse.
+10/30 N'oubliez pas les Bienvenue !
+10/30 Bonne fête aux Dorothée !
+10/31 Aujourd'hui, c'est la St(e) Quentin.
+10/31 N'oubliez pas les Alphonse !
+10/31 Bonne fête aux Wolfgang !
+11/03 Aujourd'hui, c'est la St(e) Hubert.
+11/04 N'oubliez pas les Charles !
+11/04 Bonne fête aux Amans !
+11/05 Aujourd'hui, c'est la St(e) Sylvie.
+11/05 N'oubliez pas les Sylvette !
+11/05 Bonne fête aux Sylviane !
+11/05 Aujourd'hui, c'est la St(e) Zacharie.
+11/05 N'oubliez pas les Élisabeth !
+11/06 Bonne fête aux Bertille !
+11/06 Aujourd'hui, c'est la St(e) Léonard.
+11/06 N'oubliez pas les Winnoc !
+11/07 Bonne fête aux Carine !
+11/07 Aujourd'hui, c'est la St(e) Karine.
+11/07 N'oubliez pas les Ernest !
+11/07 Bonne fête aux Ernst !
+11/07 Aujourd'hui, c'est la St(e) Willibrord.
+11/08 N'oubliez pas les Geoffroy !
+11/09 Bonne fête aux Théodore !
+11/10 Aujourd'hui, c'est la St(e) Léon.
+11/10 N'oubliez pas les Léontine !
+11/10 Bonne fête aux Lionel !
+11/11 Aujourd'hui, c'est la St(e) Martin.
+11/12 N'oubliez pas les Christian !
+11/12 Bonne fête aux Josaphat !
+11/13 Aujourd'hui, c'est la St(e) Brice.
+11/13 N'oubliez pas les Diégo !
+11/13 Bonne fête aux Didace !
+11/14 Aujourd'hui, c'est la St(e) Sidoine.
+11/14 N'oubliez pas les Sidonie !
+11/14 Bonne fête aux Sérapion !
+11/15 Aujourd'hui, c'est la St(e) Albert.
+11/16 N'oubliez pas les Marguerite !
+11/16 Bonne fête aux Gertrude !
+11/17 Aujourd'hui, c'est la St(e) Élisabeth.
+11/17 N'oubliez pas les Élise !
+11/17 Bonne fête aux Lise !
+11/18 Aujourd'hui, c'est la St(e) Aude.
+11/19 N'oubliez pas les Tanguy !
+11/19 Bonne fête aux Tanneguy !
+11/19 Aujourd'hui, c'est la St(e) Mechtilde.
+11/19 N'oubliez pas les Mathilde !
+11/19 Bonne fête aux Patrocle !
+11/20 Aujourd'hui, c'est la St(e) Edmond.
+11/20 N'oubliez pas les Octave !
+11/20 Bonne fête aux Adventor !
+11/20 Aujourd'hui, c'est la St(e) Solutor.
+11/20 N'oubliez pas les Ambroise !
+11/20 Bonne fête aux Rutus !
+11/22 Aujourd'hui, c'est la St(e) Cécile.
+11/22 N'oubliez pas les Célia !
+11/23 Bonne fête aux Clément !
+11/23 Aujourd'hui, c'est la St(e) Clémentine.
+11/23 N'oubliez pas les Colomban !
+11/24 Bonne fête aux Augusta !
+11/24 Aujourd'hui, c'est la St(e) Flora.
+11/25 N'oubliez pas les Catherine !
+11/24 Bonne fête aux Maria !
+11/26 Aujourd'hui, c'est la St(e) Delphine.
+11/26 N'oubliez pas les Elzéar !
+11/27 Bonne fête aux Séverin !
+11/27 Aujourd'hui, c'est la St(e) Séverine.
+11/27 N'oubliez pas les Maxime !
+11/28 Bonne fête aux Jacques !
+11/29 Aujourd'hui, c'est la St(e) Saturnin.
+11/29 N'oubliez pas les Sernin (Cernin) !
+11/29 Bonne fête aux Savourin !
+11/29 Aujourd'hui, c'est la St(e) Sornin.
+11/30 N'oubliez pas les André !
+11/30 Bonne fête aux Andréa !
+12/01 Aujourd'hui, c'est la St(e) Florence.
+12/01 N'oubliez pas les Éloi !
+12/01 Bonne fête aux Airy !
+12/02 Aujourd'hui, c'est la St(e) Viviane.
+12/03 N'oubliez pas les François-Xavier !
+12/03 Bonne fête aux Xavier !
+12/03 Aujourd'hui, c'est la St(e) Eugène.
+12/04 N'oubliez pas les Barbara !
+12/04 Bonne fête aux Barbe !
+12/05 Aujourd'hui, c'est la St(e) Gérald.
+12/05 N'oubliez pas les Géraldine !
+12/05 Bonne fête aux Géraud !
+12/05 Aujourd'hui, c'est la St(e) Sabas.
+12/06 N'oubliez pas les Nicolas !
+12/07 Bonne fête aux Ambroise !
+12/09 Aujourd'hui, c'est la St(e) Pierre.
+12/10 N'oubliez pas les Romaric !
+12/10 Bonne fête aux Eulalie !
+12/10 Aujourd'hui, c'est la St(e) Melchaide.
+12/10 N'oubliez pas les Miltiade !
+12/11 Bonne fête aux Daniel !
+12/11 Aujourd'hui, c'est la St(e) Damase.
+12/12 N'oubliez pas les Chantal !
+12/13 Bonne fête aux Lucie !
+12/13 Aujourd'hui, c'est la St(e) Rolande.
+12/13 N'oubliez pas les Aurore !
+12/14 Bonne fête aux Odile !
+12/15 Aujourd'hui, c'est la St(e) Ninon.
+12/15 N'oubliez pas les Nina !
+12/15 Bonne fête aux Christiane !
+12/15 Aujourd'hui, c'est la St(e) Christina.
+12/16 N'oubliez pas les Alice !
+12/16 Bonne fête aux Adélaïde !
+12/16 Aujourd'hui, c'est la St(e) Évrard.
+12/16 N'oubliez pas les Éberhard !
+12/17 Bonne fête aux Gaël !
+12/17 Aujourd'hui, c'est la St(e) Lazare.
+12/17 N'oubliez pas les Olympe !
+12/17 Bonne fête aux Olympias !
+12/17 Aujourd'hui, c'est la St(e) Judicaël.
+12/18 N'oubliez pas les Gatien !
+12/18 Bonne fête aux Winebald !
+12/19 Aujourd'hui, c'est la St(e) Urbain.
+12/20 N'oubliez pas les Abraham !
+12/20 Bonne fête aux Théophile !
+12/21 Aujourd'hui, c'est la St(e) Pierre.
+12/22 N'oubliez pas les Françoise-Xavière !
+12/22 Bonne fête aux Flavien !
+12/23 Aujourd'hui, c'est la St(e) Armand.
+12/24 N'oubliez pas les Adèle !
+12/24 Bonne fête aux Charbel !
+12/25 Aujourd'hui, c'est la St(e) Emmanuel.
+12/25 N'oubliez pas les Emmanuelle !
+12/25 Bonne fête aux Noël !
+12/26 Aujourd'hui, c'est la St(e) Étienne.
+12/26 N'oubliez pas les Stéphane !
+12/26 Bonne fête aux Stéphanie !
+12/27 Aujourd'hui, c'est la St(e) Jean.
+12/27 N'oubliez pas les Yann !
+12/28 Bonne fête aux Innocents !
+12/29 Aujourd'hui, c'est la St(e) David.
+12/30 N'oubliez pas les Roger !
+12/31 Bonne fête aux Sylvestre !
+
+#endif /*! _fr_FR_ISO8859_1_fetes */
diff --git a/misc_cmds/calendar/calendars/fr_FR.ISO8859-1/calendar.french b/misc_cmds/calendar/calendars/fr_FR.ISO8859-1/calendar.french
new file mode 100644
index 0000000..823aef4
--- /dev/null
+++ b/misc_cmds/calendar/calendars/fr_FR.ISO8859-1/calendar.french
@@ -0,0 +1,12 @@
+/*
+ * French calendar file(s)
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/fr_FR.ISO8859-1/calendar.french,v 1.1 2002/04/29 20:57:36 dwmalone Exp $
+ */
+
+#ifndef _calendar_french_
+#define _calendar_french_
+
+#include <fr_FR.ISO8859-1/calendar.all>
+
+#endif /* !_calendar_french_ */
diff --git a/misc_cmds/calendar/calendars/fr_FR.ISO8859-1/calendar.jferies b/misc_cmds/calendar/calendars/fr_FR.ISO8859-1/calendar.jferies
new file mode 100644
index 0000000..21d1f0c
--- /dev/null
+++ b/misc_cmds/calendar/calendars/fr_FR.ISO8859-1/calendar.jferies
@@ -0,0 +1,46 @@
+/*
+ * Jours fériés
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/fr_FR.ISO8859-1/calendar.jferies,v 1.2 2006/04/13 12:14:44 flz Exp $
+ */
+
+#ifndef _fr_FR_ISO8859_1_jferies_
+#define _fr_FR_ISO8859_1_jferies_
+
+LANG=fr_FR.ISO8859-1
+
+/* Jours chômés */
+01/01 Nouvel an
+05/01 Fête du travail
+05/08 Armistice 1945
+07/14 Fête nationale française
+11/11 Armistice 1918
+
+/* Jours fériés religieux */
+Easter Pâques
+Easter+1 Lundi de Pâques
+Easter+39 Ascension
+Easter+49 Pentecôte
+Easter+50 Lundi de Pentecôte
+08/15 Assomption
+11/01 Toussaint
+12/25 Noël
+
+/* Les dates suivantes ne sont malheureusement pas fériées... */
+
+/* Saisons */
+03/21* Printemps
+06/21* Été
+09/21* Automne
+12/21* Hiver
+
+/* Changements d'heure */
+03/SundayLast Passage à l'heure d'été
+10/SundayLast Passage à l'heure d'hiver
+
+/* Divers */
+/* BUG : si Penteco^te = 05/SunLast, fe^te des me`res repousse'e d'une semaine */
+05/SundayLast Fêtes des mères
+June Sun+3 Fêtes des pères
+
+#endif /*! _fr_FR_ISO8859_1_jferies_ */
diff --git a/misc_cmds/calendar/calendars/fr_FR.ISO8859-1/calendar.proverbes b/misc_cmds/calendar/calendars/fr_FR.ISO8859-1/calendar.proverbes
new file mode 100644
index 0000000..40c6414
--- /dev/null
+++ b/misc_cmds/calendar/calendars/fr_FR.ISO8859-1/calendar.proverbes
@@ -0,0 +1,354 @@
+/*
+ * Proverbes liés au calendrier
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/fr_FR.ISO8859-1/calendar.proverbes,v 1.1 2002/04/29 20:57:36 dwmalone Exp $
+ */
+
+#ifndef _fr_FR_ISO8859_1_proverbes_
+#define _fr_FR_ISO8859_1_proverbes_
+
+LANG=fr_FR.ISO8859-1
+
+/* Janvier */
+01/01 Calme et claire nuit de l'an
+ À bonne année donne l'élan.
+01/02 Janvier d'eau chiche
+ Fait le paysan riche.
+01/04 Un mois de janvier sans gelée
+ N'amène jamais une bonne année.
+01/06 Pluie aux Rois,
+ Blé jusqu'au toit.
+01/08 Janvier sec et sage
+ Est un bon présage.
+01/09 Saint Julien brise la glace ;
+ S'il ne la brise, c'est qu'il l'embrasse.
+01/10 Beau temps à la saint Guillaume
+ Donne plus de blé que de chaume.
+01/13 Soleil au jour de saint Hilaire,
+ Fends du bois pour ton hiver.
+01/14 Pingouin dans les champs,
+ Hiver méchant.
+01/15 S'il gèle à la saint Maur,
+ La moitié de l'hiver est dehors.
+01/18 À la saint Pierre,
+ L'hiver s'en va ou se resserre.
+01/20 S'il gèle à la saint Sébastien,
+ L'hiver s'en va ou revient.
+01/22 Pour saint Vincent,
+ L'hiver perd ses dents
+ Ou les retrouve pour longtemps.
+01/24 S'il tonne en janvier,
+ Monte les barriques au grenier.
+01/25 Le jour de saint Paul,
+ L'hiver se rompt le col.
+01/31 Janvier fait le péché,
+ Mars en est accusé.
+
+/* Février */
+02/01 À la saint Ignace,
+ L'eau est de glace.
+02/02 Chandeleur claire, hiver derrière ;
+ Chandeleur trouble, hiver redouble.
+02/03 À la saint Blaise,
+ L'hiver s'apaise,
+ Mais s'il redouble et s'il reprend,
+ Longtemps après on s'en ressent.
+02/05 Pour la sainte Agathe, sème ton oignon,
+ Fût-il dans la glace, il deviendra bon.
+02/09 À la sainte Apolline
+ Bien souvent l'hiver nous quitte.
+02/12 Si le soleil rit à la sainte Eulalie,
+ Pommes et cidre à la folie.
+02/14 À la saint Valentin,
+ Tous les vents sont marins.
+02/16 Pluie de février
+ À la terre vaut du fumier.
+02/18 Février trop doux,
+ Printemps en courroux.
+02/20 La neige de février
+ Brûle le blé.
+02/22 Neige à la sainte Isabelle
+ Fait la fleur plus belle.
+02/24 Saint Mathias
+ Casse la glace ;
+ S'il n'y en a pas,
+ Il en fera.
+02/27 Gelée de la sainte Honorine
+ Rend toute la vallée chagrine.
+02/28 Fleur de février
+ Va mal au pommier.
+
+/* Mars */
+03/01 Taille à la saint Aubin
+ Donnera de gros raisins.
+03/02 Quand mars mouillera,
+ Bien du vin tu auras.
+03/03 Soit au début, soit à la fin,
+ Mars nous montre son venin.
+03/06 À la sainte Colette
+ Commence à chanter l'alouette.
+03/08 Quand en mars il tonne,
+ L'année sera bonne.
+03/10 Mars venteux,
+ Vergers pommeux.
+03/12 À la saint Grégoire,
+ Il faut tailler la vigne pour boire.
+03/13 Poussière de mars
+ Est poussière d'or...
+03/15 Pluie de mars grandit l'herbette
+ Et souvent annonce disette.
+03/17 S'il fait doux à la saint Patrice,
+ De leurs trous sortent les écrevisses.
+03/19 Pour saint Joseph,
+ L'hirondelle va et vient.
+03/21 S'il pleut à la saint Benoît,
+ Il pleut trente-sept jours plus trois.
+03/23 Quand à glace il gèle à la saint Victorien,
+ En pêches et en abricots il n'y a rien.
+03/25 Quand fleurs en mars il y aura,
+ Guère de fruits ne mangeras.
+03/28 À la saint Gontran, si la température est belle,
+ Arrivent les premières hirondelles.
+03/30 Quand mars se déguise en été,
+ Avril prend ses habits fourrés.
+03/31 À la saint Benjamin,
+ Le mauvais temps prend fin.
+
+/* Mobiles */
+Easter-7 Le propre jour des Rameaux
+ Sème oignons et poireaux.
+Easter-3 La gelée du jeudi saint
+ Gèle le sarrasin.
+Easter-2 Gelée du vendredi saint
+ Gèle le pain et le vin.
+Easter S'il pleut à Pâques,
+ Il pleut pendant quarante jours.
+Easter Pâques en mars,
+ Pestes, guerres ou famines.
+Easter+36 Haricots de rogations
+ Rendent à foison.
+Easter+37 Belles rogations,
+ Belles moissons.
+Easter+39 S'il pleut à l'Ascension,
+ Tout va en perdition.
+Easter+49 La Pentecôte
+ Donne les fruits, ou les ôte.
+Easter+56 S'il pleut à la Trinité,
+ Il pleut tous les jours de l'année.
+
+/* Avril */
+04/01 Avril entrant,
+ Coucou chantant,
+ Sonnailles tintant.
+04/05 Avril fait la fleur,
+ Mai en a l'honneur.
+04/10 Il n'est point d'avril si beau
+ Qu'il n'ait de neige à son chapeau.
+04/15 En avril, ne te découvre pas d'un fil ;
+ En mai, fais ce qu'il te plaît ;
+ En juin, de trois habits n'en garde qu'un.
+04/17 Orage en avril,
+ Prépare tes barrils.
+04/19 À la sainte Léonide
+ Chaque blé pousse rapide.
+04/22 Pluie à la sainte Opportune,
+ Ni cerises ni prunes.
+04/23 À la saint Georges,
+ Sème ton orge,
+ À la saint Marc,
+ Il est trop tard.
+04/25 À la saint Marc, s'il tombe de l'eau,
+ Il n'y aura pas de fruits à couteau.
+04/28 Avril pluvieux et mai venteux
+ Ne rendent pas le paysan disetteux.
+04/30 La pluie à la saint Robert
+ De bon vin emplira ton verre.
+
+/* Mai */
+05/03 Les trois saints au sang de navet,
+ Pancrace, Mamert et Servais,
+ Sont bien nommés les saints de glace,
+ Mamert, Servais et Pancrace.
+05/15 À la sainte Denise,
+ Le froid n'en fait plus à sa guise.
+05/16 À la saint Honoré,
+ S'il fait gelée,
+ Le vin diminue de moitié.
+05/18 Bon fermier à sainte Juliette
+ Doit vendre ses poulettes.
+05/22 Beau temps à la sainte Émilie
+ Donne du fruit à la folie.
+05/23 Qui sème haricots à la saint Didier
+ Les arrachera à poignées.
+
+/* Juin */
+06/08 S'il pleut à la saint Médard,
+ Il pleut quarante jours plus tard,
+ À moins que saint Barnabé
+ Ne vienne l'arrêter.
+06/11 À la saint Barnabé,
+ Fauche ton pré.
+06/16 Si le jour de saint Fargeau
+ La lune se fait dans l'eau,
+ Le reste du mois est beau.
+06/19 S'il pleut à la saint Gervais,
+ Il pleut quarante jours après.
+06/20 Pluie d'orage à la saint Sylvère,
+ C'est beaucoup de vin dans le verre.
+06/24 S'il pleut à la saint Jean,
+ Guère de vin ni de pain.
+06/25 Après la saint Jean, si le coucou chante,
+ L'année sera rude et méchante.
+06/29 S'il pleut la veille de la saint Pierre,
+ La vigne est réduite du tiers.
+
+/* Juillet */
+07/02 S'il pleut à la Visitation,
+ Pluie à discrétion.
+07/03 À la saint Anatole,
+ Confiture dans la casserole.
+07/06 Juillet sans orage,
+ Famine au village.
+07/10 Petite pluie de juillet ensoleillé
+ Emplit caves et greniers.
+07/13 Quand reviendra la saint Henri,
+ Tu planteras ton céleri.
+07/16 Qui veut des beaux navets
+ Les sème en juillet.
+07/20 À la sainte Marguerite, pluie
+ Jamais au paysan ne souris ;
+ Mais pluie à la sainte Anne,
+ Pour lui c'est de la manne.
+07/21 S'il pleut à la saint Victor,
+ La récolte n'est pas d'or.
+07/22 S'il pleut à la sainte Madeleine,
+ Il pleuvra durant six semaines.
+07/25 Si saint jacques est serein,
+ L'hiver sera dû et serein.
+07/26 Pour la sainte Anne, s'il pleut,
+ Trente jours seront pluvieux.
+
+/* Août */
+August Sun+2 En août et vendanges, il n'y a ni fêtes ni dimanches.
+08/02 S'il pleut au mois d'août,
+ Les truffes sont au bout.
+08/04 Août donne goût.
+08/06 Soleil rouge en août,
+ C'est de la pluie partout.
+08/10 Qui sème à la saint Laurent
+ Y perd la graine et puis le temps.
+08/13 S'il pleut à la sainte Radegonde,
+ Misère abonde sur le monde.
+08/15 Pluie de l'Assomption,
+ Huit jours de mouillon.
+08/16 De saint Roch la grande chaleur
+ Prépare du vin la couleur.
+08/18 Temps trop beau en août
+ Annonce hiver en courroux.
+08/20 Brumes d'août font passer les châtaignes.
+08/22 Jamais d'août la sécheresse
+ N'amènera la richesse.
+08/24 À la saint Barthélémy,
+ Paie to dû.
+08/28 Fine pluie à la saint Augustin,
+ C'est comme s'il pleuvait du vin.
+08/29 Quand les hirondelles voient la saint Michel,
+ L'hiver ne vient qu'à Noël.
+
+/* Septembre */
+09/01 Pluie de la saint Gilles ruine les glands.
+09/05 Septembre humide,
+ Pas de tonneau vide.
+09/11 Tu peux semer sans crainte
+ Quand arrive la saint Hyacinthe.
+09/15 La rosée de saint Albin
+ est, dit-on, rosée de vin.
+09/19 Qui sème à la saint Janvier
+ De l'an récolte le premier.
+09/21 Si Matthieu pleure au lieu de rire,
+ Le vin en vinaigre vire.
+09/22 Semis de saint Maurice,
+ Récolte à ton caprice.
+09/23 Septembre se nomme
+ Le mai de l'automne.
+09/25 À la saint Firmin
+ L'hiver est en chemin.
+09/29 Pluie de saint Michel sans orage
+ D'un hiver doux est le présage.
+09/30 À la saint Jérôme,
+ Hoche tes pommes.
+
+/* Octobre */
+10/02 À la saint Léger,
+ Faut s'purger !
+10/04 Sème à la saint François,
+ Ton blé aura plus de poids.
+10/09 Beau temps à la saint Denis,
+ Hiver pourri.
+10/13 En octobre, qui ne fume rien
+ Ne récolte rien.
+10/16 Coupe ton chou à la saint Gall,
+ En hiver c'est un régal.
+10/18 À la saint Luc, sème dru,
+ Ou ne sème plus.
+10/23 Gelée d'octobre
+ Rend le vigneron sobre.
+10/25 Pour saint Crépin, mort aux mouches.
+10/28 À la sainte Simone,
+ Il faut avoir rentré ses pommes.
+10/31 Quand octobre prend sa fin,
+ Dans la cave est le vin.
+
+/* Novembre */
+11/01 À la Toussaint commence l'été de la saint Martin.
+11/02 Telle Toussaint, tel Noël,
+ Et Pâques pareil.
+11/04 À la saint Charles,
+ La gelée parle.
+11/08 En novembre, s'il tonne,
+ L'année sera bonne.
+11/11 Si l'hiver va droit son chemin,
+ Vous l'aurez à la saint Martin,
+ Mais s'il trouve quelque encombrée,
+ Vous l'aurez à la saint André.
+11/11 Tue ton cochon à la saint Martin
+ Et invite ton voisin.
+11/19 Sainte Élisabeth nous montre quel bonhomme sera l'hiver.
+11/22 Pour sainte Cécile,
+ Chaque haricot en fait mille.
+11/23 Quand l'hiver vient doucement,
+ Il est là à la saint Clément.
+11/25 Sainte Catherine, toute fille veut la fêter,
+ Mais aucune ne veut la coiffer.
+11/25 Quand sainte Catherine au ciel fait la moue,
+ Il faut patauger longtemps dans la boue.
+11/30 Quand l'hiver n'est pas pressé,
+ Il arrive à la saint André.
+
+/* Décembre */
+12/SundayFirst Tel avent,
+ Tel printemps.
+12/06 Neige de saint Nicolas
+ Donne froid pour trois mois.
+12/07 À la saint Ambroise,
+ Du froid pour huit jours.
+12/10 À la sainte Julie,
+ Le soleil ne quitte pas son lit.
+12/13 À la sainte Luce,
+ Le jour croît du saut d'une puce.
+12/16 Décembre de froid trop chiche
+ Ne fait pas le paysan riche.
+12/21 S'il gèle à la saint Thomas,
+ Il gèlera encore trois mois.
+12/23 Le tonnerre en décembre
+ Annonce pour l'an qui vient
+ Aux bêtes et aux gens
+ Abondance de biens.
+12/25 Noël au balcon,
+ Pâques au tison.
+12/26 À la saint Étienne,
+ Chacun trouve la sienne.
+12/28 Les jours entre Noël et les Rois
+ Indiquent le temps des douze mois.
+
+#endif /*! _fr_FR_ISO8859_1_proverbes_ */
diff --git a/misc_cmds/calendar/calendars/hr_HR.ISO8859-2/calendar.all b/misc_cmds/calendar/calendars/hr_HR.ISO8859-2/calendar.all
new file mode 100644
index 0000000..835ed47
--- /dev/null
+++ b/misc_cmds/calendar/calendars/hr_HR.ISO8859-2/calendar.all
@@ -0,0 +1,12 @@
+/*
+ * hrvatski calendar
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/hr_HR.ISO8859-2/calendar.all,v 1.5 2001/06/11 03:08:46 ache Exp $
+ */
+
+#ifndef _hr_HR_ISO8859_2_all
+#define _hr_HR_ISO8859_2_all
+
+#include <hr_HR.ISO8859-2/calendar.praznici>
+
+#endif /* !_hr_HR_ISO8859_2_all */
diff --git a/misc_cmds/calendar/calendars/hr_HR.ISO8859-2/calendar.praznici b/misc_cmds/calendar/calendars/hr_HR.ISO8859-2/calendar.praznici
new file mode 100644
index 0000000..8b9a56c
--- /dev/null
+++ b/misc_cmds/calendar/calendars/hr_HR.ISO8859-2/calendar.praznici
@@ -0,0 +1,44 @@
+/*
+ * hrvatski praznici
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/hr_HR.ISO8859-2/calendar.praznici,v 1.8 2007/09/21 23:43:03 edwin Exp $
+ */
+
+#ifndef _hr_HR_ISO8859_2_praznici
+#define _hr_HR_ISO8859_2_praznici
+
+LANG=hr_HR.ISO8859-2
+
+/* dr¾avni praznici */
+01/01 Nova godina
+05/01 Praznik rada
+05/30 Tjelovo
+06/22 Dan antifa¹istièke borbe
+06/25 Dan dr¾avnosti
+08/05 Dan domovinske zahvalnosti
+10/08 Dan neovisnosti
+
+/* katolièki blagdani */
+01/06 Sveta tri kralja
+Easter-2 Veliki petak
+Easter Uskrs
+Easter+1 Uskrsni ponedjeljak
+Easter+49 Duhovi
+Easter+50 Duhovni ponedjeljak
+Easter+39 Uza¹a¹æe
+08/15 Velika Gospa
+11/01 Svi sveti
+12/25 Bo¾iæ
+12/26 Stjepandan
+
+/* godi¹nja doba */
+03/21* Poèetak proljeæa
+06/21* Poèetak ljeta
+09/21* Poèetak jesena
+12/21* Poèetak zime
+
+/* ljetno vrijeme */
+03/NedjeljaLast Poèetak ljetnog vremena
+10/NedjeljaLast Kraj ljetnog vremena
+
+#endif /* !_hr_HR_ISO8859_2_praznici */
diff --git a/misc_cmds/calendar/calendars/hu_HU.ISO8859-2/calendar.all b/misc_cmds/calendar/calendars/hu_HU.ISO8859-2/calendar.all
new file mode 100644
index 0000000..5165ab3
--- /dev/null
+++ b/misc_cmds/calendar/calendars/hu_HU.ISO8859-2/calendar.all
@@ -0,0 +1,13 @@
+/*
+ * Magyar kalendárium
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/hu_HU.ISO8859-2/calendar.all,v 1.1 2004/08/16 09:31:09 dwmalone Exp $
+ */
+
+#ifndef _hu_HU_ISO8859_2_all_
+#define _hu_HU_ISO8859_2_all_
+
+#include <hu_HU.ISO8859-2/calendar.unnepek>
+#include <hu_HU.ISO8859-2/calendar.nevnapok>
+
+#endif /* !_hu_HU.ISO8859-2_all_ */
diff --git a/misc_cmds/calendar/calendars/hu_HU.ISO8859-2/calendar.nevnapok b/misc_cmds/calendar/calendars/hu_HU.ISO8859-2/calendar.nevnapok
new file mode 100644
index 0000000..14f7c57
--- /dev/null
+++ b/misc_cmds/calendar/calendars/hu_HU.ISO8859-2/calendar.nevnapok
@@ -0,0 +1,386 @@
+/*
+ * Névnapok
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/hu_HU.ISO8859-2/calendar.nevnapok,v 1.1 2004/08/16 09:31:09 dwmalone Exp $
+ */
+
+#ifndef _hu_HU_ISO8859_2_nevnapok_
+#define _hu_HU_ISO8859_2_nevnapok_
+
+LANG=hu_HU.ISO8859-2
+
+/*
+ * N.B.: A névnapok Magyarországon a szentek napjai alapján szerepelnek
+ * a naptárban. Néhány név többször is szerepel, de mindenki
+ * csak egyszer tart névnapot egy évben. A választott nap
+ * ebben az esetben a hagyományokon és az illetõn múlik.
+ *
+ */
+
+01/01 Fruzsina
+01/02 Ábel, Gergely
+01/03 Genovéva, Benjámin
+01/04 Titusz, Leona
+01/05 Simon
+01/06 Boldizsár, Menyhárt
+01/07 Attila, Ramóna
+01/08 Gyöngyvér
+01/09 Marcell
+01/10 Melánia
+01/11 Ágota, Baltazár
+01/12 Ernõ, Cézár
+01/13 Veronika
+01/14 Bódog, Félix
+01/15 Lóránt, Loránd
+01/16 Gusztáv
+01/17 Antal, Antónia
+01/18 Piroska
+01/19 Sára, Márió
+01/20 Fábián, Sebestyén
+01/21 Ágnes
+01/22 Vince, Artúr
+01/23 Zelma, Rajmund
+01/24 Timót, Xénia
+01/25 Pál
+01/26 Vanda, Paula
+01/27 Angelika, Angéla
+01/28 Károly, Karola
+01/29 Adél
+01/30 Gerda, Martina
+01/31 Marcella
+02/01 Ignác
+02/02 Karolina, Aida
+02/03 Balázs
+02/04 Ráhel, Csenge
+02/05 Ágota, Ingrid
+02/06 Dóra, Dorottya
+02/07 Rómeó, Tódor
+02/08 Aranka
+02/09 Abigél, Alex
+02/10 Elvira
+02/11 Bertold, Marietta
+02/12 Lívia, Lídia
+02/13 Ella, Linda
+02/14 Bálint, Valentin
+02/15 Kolos
+02/16 Julianna, Lilla
+02/17 Donát
+02/18 Bernadett
+02/19 Zsuzsanna
+02/20 Aladár, Álmos
+02/21 Eleonóra
+02/22 Gerzson
+02/23 Alfréd
+02/24 Mátyás
+02/25 Géza
+02/26 Edina
+02/27 Ákos, Bátor
+02/28 Elemér
+03/01 Albin
+03/02 Lujza
+03/03 Kornélia
+03/04 Kázmér
+03/05 Adorján, Adrián
+03/06 Leonóra, Inez
+03/07 Tamás
+03/08 Zoltán
+03/09 Franciska, Fanni
+03/10 Ildikó
+03/11 Szilárd
+03/12 Gergely
+03/13 Krisztián, Ajtony
+03/14 Matild
+03/15 Kristóf
+03/16 Henrietta
+03/17 Gertrúd, Patrik
+03/18 Sándor, Ede
+03/19 József, Bánk
+03/20 Klaudia
+03/21 Benedek
+03/22 Beáta, Izolda
+03/23 Emõke
+03/24 Gábor, Karina
+03/25 Irén, Irisz
+03/26 Emánuel
+03/27 Hajnalka
+03/28 Gedeon, Johanna
+03/29 Aguszta
+03/30 Zalán
+03/31 Árpád
+04/01 Hugó
+04/02 Áron
+04/03 Buda, Richárd
+04/04 Izidor
+04/05 Vince
+04/06 Vilmos, Bíborka
+04/07 Herman
+04/08 Dénes
+04/09 Erhard
+04/10 Zsolt
+04/11 Leó, Szaniszló
+04/12 Gyula
+04/13 Ida
+04/14 Tibor
+04/15 Anasztázia, Tas
+04/16 Csongor
+04/17 Rudolf
+04/18 Andrea, Ilma
+04/19 Emma
+04/20 Tivadar
+04/21 Konrád
+04/22 Csilla, Noémi
+04/23 Béla
+04/24 György
+04/25 Márk
+04/26 Ervin
+04/27 Zita
+04/28 Valéria
+04/29 Péter
+04/30 Katalin, Kitti
+05/01 Fülöp, Jakab
+05/02 Zsigmond
+05/03 Tímea, Irma
+05/04 Mónika, Flórián
+05/05 Györgyi
+05/06 Ivett, Frida
+05/07 Gizella
+05/08 Mihály
+05/09 Gergely
+05/10 Ármin, Pálma
+05/11 Ferenc
+05/12 Pongrác
+05/13 Szervác, Imola
+05/14 Bonifác
+05/15 Zsófia, Szonja
+05/16 Mózes, Botond
+05/17 Paszkál
+05/18 Erik, Alexandra
+05/19 Ivó, Milán
+05/20 Bernát, Felícia
+05/21 Konstantin
+05/22 Júlia, Rita
+05/23 Dezsõ
+05/24 Eszter, Eliza
+05/25 Orbán
+05/26 Fülöp, Evelin
+05/27 Hella
+05/28 Emil, Csanád
+05/29 Magdolna
+05/30 Janka, Zsanett
+05/31 Angéla, Petronella
+06/01 Tünde
+06/02 Kármen, Anita
+06/03 Klotild
+06/04 Bulcsú
+06/05 Fatime
+06/06 Norbert, Cintia
+06/07 Róbert
+06/08 Medárd
+06/09 Félix
+06/10 Margit, Gitta, Gréta
+06/11 Barnabás
+06/12 Villõ
+06/13 Antal, Anett
+06/14 Vazul
+06/15 Jolán, Vid
+06/16 Jusztin
+06/17 Laura, Alida
+06/18 Arnold, Levente
+06/19 Gyárfás
+06/20 Rafael
+06/21 Alajos, Leila
+06/22 Paulina
+06/23 Zoltán, Szidonia
+06/24 Iván
+06/25 Vilmos, Viola
+06/26 János, Pál
+06/27 László
+06/28 Levente, Irén
+06/29 Péter, Pál
+06/30 Pál
+07/01 Annamária, Tihamér
+07/02 Ottó
+07/03 Kornél, Soma
+07/04 Ulrik
+07/05 Emese, Sarolta
+07/06 Csaba
+07/07 Apollónia
+07/08 Ellák
+07/09 Lukrécia
+07/10 Amália
+07/11 Nóra, Lili
+07/12 Izabella, Dalma
+07/13 Jenõ
+07/14 Örs, Stella
+07/15 Henrik, Roland
+07/16 Valter
+07/17 Endre, Elek
+07/18 Frigyes
+07/19 Emília
+07/20 Illés
+07/21 Daniella, Dániel
+07/22 Magdolna
+07/23 Lenke
+07/24 Kinga, Kincsõ
+07/25 Kristóf, Jakab
+07/26 Anna, Anikó
+07/27 Olga, Liliána
+07/28 Szabolcs
+07/29 Márta, Flóra
+07/30 Judit, Xénia
+07/31 Oszkár
+08/01 Boglárka
+08/02 Lehel
+08/03 Hermina
+08/04 Domonkos, Dominika
+08/05 Krisztina
+08/06 Berta, Bettina
+08/07 Ibolya
+08/08 László
+08/09 Emõd
+08/10 Lõrinc
+08/11 Zsuzsanna, Tiborc
+08/12 Klára
+08/13 Ipoly
+08/14 Marcell
+08/15 Mária
+08/16 Ábrahám
+08/17 Jácint
+08/18 Ilona
+08/19 Huba
+08/20 István
+08/21 Sámuel, Hajna
+08/22 Menyhért, Mirjam
+08/23 Bence
+08/24 Bertalan
+08/25 Lajos, Patrícia
+08/26 Izsó
+08/27 Gáspár
+08/28 Ágoston
+08/29 Beatrix, Erna
+08/30 Rózsa
+08/31 Erika, Bella
+09/01 Egyed, Egon
+09/02 Rebeka, Dorina
+09/03 Hilda
+09/04 Rozália
+09/05 Viktor, Lõrinc
+09/06 Zakariás
+09/07 Regina
+09/08 Mária, Adrienn
+09/09 Ádám
+09/10 Nikolett, Hunor
+09/11 Teodóra
+09/12 Mária
+09/13 Kornél
+09/14 Szeréna, Roxána
+09/15 Enikõ, Melitta
+09/16 Edit
+09/17 Zsófia
+09/18 Diána
+09/19 Vilhelmina
+09/20 Friderika
+09/21 Máté, Mirella
+09/22 Móric
+09/23 Tekla
+09/24 Gellért, Mercédesz
+09/25 Eufrozina, Kende
+09/26 Jusztina
+09/27 Adalbert
+09/28 Vencel
+09/29 Mihály
+09/30 Jeromos
+10/01 Malvin
+10/02 Petra
+10/03 Helga
+10/04 Ferenc
+10/05 Aurél
+10/06 Brúnó, Renáta
+10/07 Amália
+10/08 Koppány
+10/09 Dénes
+10/10 Gedeon
+10/11 Brigitta
+10/12 Miksa
+10/13 Kálmán, Ede
+10/14 Helén
+10/15 Teréz
+10/16 Gál
+10/17 Hedvig
+10/18 Lukács
+10/19 Nándor
+10/20 Vendel
+10/21 Orsolya
+10/22 Elõd
+10/23 Gyöngyi
+10/24 Salamon
+10/25 Blanka, Bianka
+10/26 Dömötör
+10/27 Szabina
+10/28 Simon, Szimonetta
+10/29 Nárcisz
+10/30 Alfonz
+10/31 Farkas
+11/01 Marianna
+11/02 Achilles
+11/03 Gyõzõ
+11/04 Károly
+11/05 Imre
+11/06 Lénárd
+11/07 Rezsõ
+11/08 Zsombor
+11/09 Tivadar
+11/10 Réka
+11/11 Márton
+11/12 Jónás, Renátó
+11/13 Szilvia
+11/14 Aliz
+11/15 Albert, Lipót
+11/16 Ödön
+11/17 Hortenzia, Gergõ
+11/18 Jenõ
+11/19 Erzsébet
+11/20 Jolán
+11/21 Olivér
+11/22 Cecília
+11/23 Kelemen, Klementina
+11/24 Emma
+11/25 Katalin
+11/26 Virág
+11/27 Virgil
+11/28 Stefánia
+11/29 Taksony
+11/30 András, Andor
+12/01 Elza
+12/02 Melinda, Vivien
+12/03 Ferenc, Olívia
+12/04 Borbála, Barbara
+12/05 Vilma
+12/06 Miklós
+12/07 Ambrus
+12/08 Mária
+12/09 Natália
+12/10 Judit
+12/11 Árpád
+12/12 Gabriella
+12/13 Luca, Otília
+12/14 Szilárda
+12/15 Valér
+12/16 Etelka, Aletta
+12/17 Lázár, Olimpia
+12/18 Auguszta
+12/19 Viola
+12/20 Teofil
+12/21 Tamás
+12/22 Zénó
+12/23 Viktória
+12/24 Ádám, Éva
+12/25 Eugénia
+12/26 István
+12/27 János
+12/28 Kamilla
+12/29 Tamás, Tamara
+12/30 Dávid
+12/31 Szilveszter
+
+#endif /*! _hu_HU_ISO8859_2_nevnapok_ */
diff --git a/misc_cmds/calendar/calendars/hu_HU.ISO8859-2/calendar.unnepek b/misc_cmds/calendar/calendars/hu_HU.ISO8859-2/calendar.unnepek
new file mode 100644
index 0000000..41e619f
--- /dev/null
+++ b/misc_cmds/calendar/calendars/hu_HU.ISO8859-2/calendar.unnepek
@@ -0,0 +1,53 @@
+/*
+ * Ünnepnapok
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/hu_HU.ISO8859-2/calendar.unnepek,v 1.1 2004/08/16 09:31:09 dwmalone Exp $
+ */
+
+#ifndef _hu_HU_ISO8859_2_unnepek_
+#define _hu_HU_ISO8859_2_unnepek_
+
+LANG=hu_HU.ISO8859-2
+
+/* Munkaszüneti napok */
+01/01 Újév
+03/15 1848-as szabadságharc és forradalom ünnepe
+05/01 Munka ünnepe
+10/23 1956-os forradalom ünnepe
+
+/* Vallási munkaszüneti napok */
+Easter Húsvét
+Easter+1 Húsvét hétfõ
+Easter+42 Virágvasárnap
+Easter+49 Pünkösd
+Easter+50 Pünkösd hétfõ
+08/20 Szent István nap, Államalapítás ünnepe
+11/01 Halottak napja
+12/25 Karácsony elsõ napja
+12/26 Karácsony második napja
+
+/* Az itt következõ dátumok nem munkaszüneti napok csak ünnepnapok */
+
+/* Csillagászati évszakok */
+03/21* Tavaszi napéjegyenlõség
+06/21* Nyári napforduló
+09/21* Õszi napéjegyenlõség
+12/21* Téli napforduló
+
+/* Téli és nyári idõszámítás közötti váltás */
+03/SundayLast Váltás a nyári idõszámításra
+10/SundayLast Váltás a téli idõszámításra
+
+/* Egyéb vallási ünnepek amelyek nem munkaszüneti napok */
+Easter-2 Nagy péntek ("a harangok Romába mennek")
+
+/* Egyéb ünnepnapok és emléknapok*/
+02/14 Valentin nap - a szerelmesek ünnepe
+03/08 Nõ nap - egy-egy szál virág a nõknek
+May Sun+2 Anyák napja
+10/06 Az 1848-as aradi vértanuk napja
+12/06 Mikulás napja - gyerekek csokit kapnak
+12/24 Karácsony elõestéje
+12/31 Szilveszter napja
+
+#endif /*! _hu_HU_ISO8859_2_unnepek_ */
diff --git a/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.all b/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.all
new file mode 100644
index 0000000..fe1ad0b
--- /dev/null
+++ b/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.all
@@ -0,0 +1,17 @@
+/*
+ * òÕÓÓËÉÊ ËÁÌÅÎÄÁÒØ
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/ru_RU.KOI8-R/calendar.all,v 1.6 2003/12/15 11:51:26 maxim Exp $
+ */
+
+#ifndef _ru_RU_KOI8_R_all
+#define _ru_RU_KOI8_R_all
+
+#include <ru_RU.KOI8-R/calendar.common>
+#include <ru_RU.KOI8-R/calendar.holiday>
+#include <ru_RU.KOI8-R/calendar.military>
+#include <ru_RU.KOI8-R/calendar.msk>
+#include <ru_RU.KOI8-R/calendar.orthodox>
+#include <ru_RU.KOI8-R/calendar.pagan>
+
+#endif /* !_ru_RU_KOI8_R_all */
diff --git a/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.common b/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.common
new file mode 100644
index 0000000..82e40a5
--- /dev/null
+++ b/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.common
@@ -0,0 +1,90 @@
+/*
+ * òÏÓÓÉÊÓËÉÅ ÐÒÁÚÄÎÉËÉ
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/ru_RU.KOI8-R/calendar.common,v 1.14 2007/12/17 07:36:39 maxim Exp $
+ */
+
+#ifndef _ru_RU_KOI8_R_common_
+#define _ru_RU_KOI8_R_common_
+
+LANG=ru_RU.KOI8-R
+
+12 ÑÎ× äÅÎØ ÒÁÂÏÔÎÉËÁ ÐÒÏËÕÒÁÔÕÒÙ
+13 ÑÎ× äÅÎØ ÒÏÓÓÉÊÓËÏÊ ÐÅÞÁÔÉ
+14 ÑÎ× óÔÁÒÙÊ îÏ×ÙÊ ÇÏÄ
+21 ÑÎ× äÅÎØ ÉÎÖÅÎÅÒÎÙÈ ×ÏÊÓË
+25 ÑÎ× ôÁÔØÑÎÉÎ ÄÅÎØ. óÔÕÄÅÎÞÅÓËÉÊ ÐÒÁÚÄÎÉË
+ 8 ÆÅ× äÅÎØ ÒÏÓÓÉÊÓËÏÊ ÎÁÕËÉ
+10 ÆÅ× äÅÎØ ÄÉÐÌÏÍÁÔÉÞÅÓËÏÇÏ ÒÁÂÏÔÎÉËÁ
+ 1 ÍÁÒ ÷ÓÅÍÉÒÎÙÊ ÄÅÎØ ÇÒÁÖÄÁÎÓËÏÊ ÏÂÏÒÏÎÙ
+03/SunSecond äÅÎØ ÒÁÂÏÔÎÉËÏ× ÇÅÏÄÅÚÉÉ É ËÁÒÔÏÇÒÁÆÉÉ
+18 ÍÁÒ äÅÎØ ÎÁÌÏÇÏ×ÏÊ ÐÏÌÉÃÉÉ
+03/SunThird äÅÎØ ÒÁÂÏÔÎÉËÏ× ÔÏÒÇÏ×ÌÉ, ÂÙÔÏ×ÏÇÏ ÏÂÓÌÕÖÉ×ÁÎÉÑ ÎÁÓÅÌÅÎÉÑ É ÖÉÌÉÝÎÏ-ËÏÍÍÕÎÁÌØÎÏÇÏ ÈÏÚÑÊÓÔ×Á
+27 ÍÁÒ íÅÖÄÕÎÁÒÏÄÎÙÊ ÄÅÎØ ÔÅÁÔÒÁ
+27 ÍÁÒ äÅÎØ ×ÎÕÔÒÅÎÎÉÈ ×ÏÊÓË
+ 1 ÁÐÒ äÅÎØ ÓÍÅÈÁ
+ 2 ÁÐÒ äÅÎØ ÅÄÉÎÅÎÉÑ ÎÁÒÏÄÏ×
+04/SunFirst äÅÎØ ÇÅÏÌÏÇÁ
+12 ÁÐÒ äÅÎØ ËÏÓÍÏÎÁ×ÔÉËÉ
+04/SunSecond äÅÎØ ×ÏÊÓË ÐÒÏÔÉ×Ï×ÏÚÄÕÛÎÏÊ ÏÂÏÒÏÎÙ
+26 ÁÐÒ äÅÎØ ÐÁÍÑÔÉ ÐÏÇÉÂÛÉÈ × ÒÁÄÉÁÃÉÏÎÎÙÈ Á×ÁÒÉÑÈ É ËÁÔÁÓÔÒÏÆÁÈ
+30 ÁÐÒ äÅÎØ ÐÏÖÁÒÎÏÊ ÏÈÒÁÎÙ
+ 7 ÍÁÊ äÅÎØ ÒÁÄÉÏ
+17 ÍÁÊ íÅÖÄÕÎÁÒÏÄÎÙÊ ÄÅÎØ ÔÅÌÅËÏÍÍÕÎÉËÁÃÉÊ
+18 ÍÁÊ íÅÖÄÕÎÁÒÏÄÎÙÊ ÄÅÎØ ÍÕÚÅÅ×
+24 ÍÁÊ äÅÎØ ÓÌÁ×ÑÎÓËÏÊ ÐÉÓØÍÅÎÎÏÓÔÉ É ËÕÌØÔÕÒÙ
+27 ÍÁÊ ïÂÝÅÒÏÓÓÉÊÓËÉÊ ÄÅÎØ ÂÉÂÌÉÏÔÅË
+28 ÍÁÊ äÅÎØ ÐÏÇÒÁÎÉÞÎÉËÁ
+05/SunLast äÅÎØ ÈÉÍÉËÁ
+ 1 ÉÀÎ äÅÎØ ÚÁÝÉÔÙ ÄÅÔÅÊ
+ 6 ÉÀÎ ðÕÛËÉÎÓËÉÊ ÄÅÎØ
+ 8 ÉÀÎ äÅÎØ ÓÏÃÉÁÌØÎÏÇÏ ÒÁÂÏÔÎÉËÁ
+06/SunSecond äÅÎØ ÒÁÂÏÔÎÉËÏ× ÌÅÇËÏÊ ÐÒÏÍÙÛÌÅÎÎÏÓÔÉ
+06/SunThird äÅÎØ ÍÅÄÉÃÉÎÓËÏÇÏ ÒÁÂÏÔÎÉËÁ
+22 ÉÀÎ äÅÎØ ÐÁÍÑÔÉ É ÓËÏÒÂÉ (îÁÞÁÌÏ ÷ÅÌÉËÏÊ ïÔÅÞÅÓÔ×ÅÎÎÏÊ ÷ÏÊÎÙ, 1941 ÇÏÄ)
+27 ÉÀÎ äÅÎØ ÍÏÌÏÄÅÖÉ
+06/SatLast äÅÎØ ÉÚÏÂÒÅÔÁÔÅÌÑ É ÒÁÃÉÏÎÁÌÉÚÁÔÏÒÁ
+07/SunFirst äÅÎØ ÒÁÂÏÔÎÉËÏ× ÍÏÒÓËÏÇÏ É ÒÅÞÎÏÇÏ ÆÌÏÔÁ
+07/SunSecond äÅÎØ ÒÙÂÁËÁ
+07/SunSecond äÅÎØ ÒÏÓÓÉÊÓËÏÊ ÐÏÞÔÙ
+07/SunThird äÅÎØ ÍÅÔÁÌÌÕÒÇÁ
+07/SunLast äÅÎØ ÷ÏÅÎÎÏ-íÏÒÓËÏÇÏ æÌÏÔÁ
+ 6 Á×Ç äÅÎØ ÖÅÌÅÚÎÏÄÏÒÏÖÎÙÈ ×ÏÊÓË
+08/SunFirst äÅÎØ ÖÅÌÅÚÎÏÄÏÒÏÖÎÉËÁ
+12 Á×Ç äÅÎØ ×ÏÅÎÎÏ-×ÏÚÄÕÛÎÙÈ ÓÉÌ
+08/SunSecond äÅÎØ ÓÔÒÏÉÔÅÌÑ
+08/SunThird äÅÎØ ÷ÏÚÄÕÛÎÏÇÏ æÌÏÔÁ
+22 Á×Ç äÅÎØ ÇÏÓÕÄÁÒÓÔ×ÅÎÎÏÇÏ ÆÌÁÇÁ
+27 Á×Ç äÅÎØ ËÉÎÏ
+08/SunLast äÅÎØ ÛÁÈÔÅÒÁ
+ 1 ÓÅÎ äÅÎØ ÚÎÁÎÉÊ
+ 2 ÓÅÎ äÅÎØ ÒÏÓÓÉÊÓËÏÊ Ç×ÁÒÄÉÉ
+09/SunFirst äÅÎØ ÒÁÂÏÔÎÉËÏ× ÎÅÆÔÑÎÏÊ É ÇÁÚÏ×ÏÊ ÐÒÏÍÙÛÌÅÎÎÏÓÔÉ
+09/SunSecond äÅÎØ ÔÁÎËÉÓÔÁ
+09/SunThird äÅÎØ ÒÁÂÏÔÎÉËÏ× ÌÅÓÁ
+09/SunLast äÅÎØ ÍÁÛÉÎÏÓÔÒÏÉÔÅÌÑ
+ 1 ÏËÔ äÅÎØ ÐÏÖÉÌÙÈ ÌÀÄÅÊ
+ 4 ÏËÔ äÅÎØ ×ÏÅÎÎÏ-ËÏÓÍÉÞÅÓËÉÈ ÓÉÌ
+ 5 ÏËÔ äÅÎØ ÕÞÉÔÅÌÑ
+14 ÏËÔ íÅÖÄÕÎÁÒÏÄÎÙÊ ÄÅÎØ ÓÔÁÎÄÁÒÔÉÚÁÃÉÉ
+10/SunSecond äÅÎØ ÒÁÂÏÔÎÉËÏ× ÓÅÌØÓËÏÇÏ ÈÏÚÑÊÓÔ×Á É ÐÅÒÅÒÁÂÁÔÙ×ÁÀÝÅÊ ÐÒÏÍÙÛÌÅÎÎÏÓÔÉ
+10/SunThird äÅÎØ ÒÁÂÏÔÎÉËÏ× ÄÏÒÏÖÎÏÇÏ ÈÏÚÑÊÓÔ×Á
+24 ÏËÔ íÅÖÄÕÎÁÒÏÄÎÙÊ ÄÅÎØ ïïî
+25 ÏËÔ äÅÎØ ÔÁÍÏÖÅÎÎÉËÁ
+30 ÏËÔ äÅÎØ ÐÁÍÑÔÉ ÖÅÒÔ× ÐÏÌÉÔÉÞÅÓËÉÈ ÒÅÐÒÅÓÓÉÊ
+10/SunLast äÅÎØ ÒÁÂÏÔÎÉËÏ× Á×ÔÏÍÏÂÉÌØÎÏÇÏ ÔÒÁÎÓÐÏÒÔÁ
+ 9 ÎÏÑ ÷ÓÅÍÉÒÎÙÊ ÄÅÎØ ËÁÞÅÓÔ×Á
+10 ÎÏÑ äÅÎØ ÍÉÌÉÃÉÉ
+16 ÎÏÑ äÅÎØ ÍÏÒÓËÏÊ ÐÅÈÏÔÙ
+17 ÎÏÑ íÅÖÄÕÎÁÒÏÄÎÙÊ ÄÅÎØ ÓÔÕÄÅÎÔÏ×
+11/SunThird äÅÎØ ÒÁËÅÔÎÙÈ ×ÏÊÓË É ÁÒÔÉÌÌÅÒÉÉ
+21 ÎÏÑ äÅÎØ ÒÁÂÏÔÎÉËÏ× ÎÁÌÏÇÏ×ÙÈ ÏÒÇÁÎÏ×
+26 ÎÏÑ ÷ÓÅÍÉÒÎÙÊ ÄÅÎØ ÉÎÆÏÒÍÁÃÉÉ
+11/SunLast äÅÎØ ÍÁÔÅÒÉ
+ 1 ÄÅË ÷ÓÅÍÉÒÎÙÊ ÄÅÎØ ÂÏÒØÂÙ ÓÏ óðéäÏÍ
+17 ÄÅË äÅÎØ ÒÁËÅÔÎÙÈ ×ÏÊÓË ÓÔÒÁÔÅÇÉÞÅÓËÏÇÏ ÎÁÚÎÁÞÅÎÉÑ
+20 ÄÅË äÅÎØ ÒÁÂÏÔÎÉËÁ ÏÒÇÁÎÏ× ÂÅÚÏÐÁÓÎÏÓÔÉ
+22 ÄÅË äÅÎØ ÜÎÅÒÇÅÔÉËÁ
+27 ÄÅË äÅÎØ ÓÐÁÓÁÔÅÌÑ
+
+#endif /* !_ru_RU_KOI8_R_common_ */
diff --git a/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.holiday b/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.holiday
new file mode 100644
index 0000000..bf2d6ba
--- /dev/null
+++ b/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.holiday
@@ -0,0 +1,25 @@
+/*
+ * òÏÓÓÉÊÓËÉÅ ÐÒÁÚÄÎÉËÉ (ÎÅÒÁÂÏÞÉÅ "ËÒÁÓÎÙÅ" ÄÎÉ)
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/ru_RU.KOI8-R/calendar.holiday,v 1.3 2005/11/02 09:22:28 maxim Exp $
+ */
+
+#ifndef _ru_RU_KOI8_R_holiday_
+#define _ru_RU_KOI8_R_holiday_
+
+LANG=ru_RU.KOI8-R
+
+ 1 ÑÎ× îÏ×ÙÊ ÇÏÄ
+ 2 ÑÎ× îÏ×ÏÇÏÄÎÉÅ ËÁÎÉËÕÌÙ
+ 3 ÑÎ× îÏ×ÏÇÏÄÎÉÅ ËÁÎÉËÕÌÙ
+ 4 ÑÎ× îÏ×ÏÇÏÄÎÉÅ ËÁÎÉËÕÌÙ
+ 5 ÑÎ× îÏ×ÏÇÏÄÎÉÅ ËÁÎÉËÕÌÙ
+ 7 ÑÎ× òÏÖÄÅÓÔ×Ï èÒÉÓÔÏ×Ï
+23 ÆÅ× äÅÎØ ÚÁÝÉÔÎÉËÁ ïÔÅÞÅÓÔ×Á
+ 8 ÍÁÒ íÅÖÄÕÎÁÒÏÄÎÙÊ ÖÅÎÓËÉÊ ÄÅÎØ
+ 1 ÍÁÊ ðÒÁÚÄÎÉË ÷ÅÓÎÙ É ôÒÕÄÁ
+ 9 ÍÁÊ äÅÎØ ðÏÂÅÄÙ
+12 ÉÀÎ äÅÎØ òÏÓÓÉÉ
+ 4 ÎÏÑ äÅÎØ ÎÁÒÏÄÎÏÇÏ ÅÄÉÎÓÔ×Á
+
+#endif /* !_ru_RU_KOI8_R_holiday_ */
diff --git a/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.military b/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.military
new file mode 100644
index 0000000..f3a6f33
--- /dev/null
+++ b/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.military
@@ -0,0 +1,27 @@
+/*
+ * äÎÉ ×ÏÉÎÓËÏÊ ÓÌÁ×Ù òÏÓÓÉÉ
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/ru_RU.KOI8-R/calendar.military,v 1.2 2003/12/26 13:04:13 maxim Exp $
+ */
+
+#ifndef _ru_RU_KOI8_R_military_
+#define _ru_RU_KOI8_R_military_
+
+LANG=ru_RU.KOI8-R
+
+27 ÑÎ× äÅÎØ ÓÎÑÔÉÑ ÂÌÏËÁÄÙ ÇÏÒÏÄÁ ìÅÎÉÎÇÒÁÄÁ (1944 ÇÏÄ)
+ 2 ÆÅ× äÅÎØ ÒÁÚÇÒÏÍÁ ÓÏ×ÅÔÓËÉÍÉ ×ÏÊÓËÁÍÉ ÎÅÍÅÃËÏ-ÆÁÛÉÓÔÓËÉÈ ×ÏÊÓË × óÔÁÌÉÎÇÒÁÄÓËÏÊ ÂÉÔ×Å (1943 ÇÏÄ)
+23 ÆÅ× äÅÎØ ÐÏÂÅÄÙ ëÒÁÓÎÏÊ áÒÍÉÉ ÎÁÄ ËÁÊÚÅÒÏ×ÓËÉÍÉ ×ÏÊÓËÁÍÉ çÅÒÍÁÎÉÉ (1918 ÇÏÄ)
+18 ÁÐÒ äÅÎØ ÐÏÂÅÄÙ ÒÕÓÓËÉÈ ×ÏÉÎÏ× ËÎÑÚÑ áÌÅËÓÁÎÄÒÁ îÅ×ÓËÏÇÏ ÎÁÄ ÎÅÍÅÃËÉÍÉ ÒÙÃÁÒÑÍÉ ÎÁ þÕÄÓËÏÍ ÏÚÅÒÅ (ìÅÄÏ×ÏÅ ÐÏÂÏÉÝÅ, 1242 ÇÏÄ)
+10 ÉÀÌ äÅÎØ ÐÏÂÅÄÙ ÒÕÓÓËÏÊ ÁÒÍÉÉ ÐÏÄ ËÏÍÁÎÄÏ×ÁÎÉÅÍ ðÅÔÒÁ ðÅÒ×ÏÇÏ ÎÁÄ Û×ÅÄÁÍÉ × ðÏÌÔÁ×ÓËÏÍ ÓÒÁÖÅÎÉÉ (1709 ÇÏÄ)
+ 9 Á×Ç äÅÎØ ÐÅÒ×ÏÊ × ÒÏÓÓÉÊÓËÏÊ ÉÓÔÏÒÉÉ ÍÏÒÓËÏÊ ÐÏÂÅÄÙ ÒÕÓÓËÏÇÏ ÆÌÏÔÁ ÐÏÄ ËÏÍÁÎÄÏ×ÁÎÉÅÍ ðÅÔÒÁ ðÅÒ×ÏÇÏ ÎÁÄ Û×ÅÄÁÍÉ Õ ÍÙÓÁ çÁÎÇÕÔ (1714 ÇÏÄ)
+23 Á×Ç äÅÎØ ÒÁÚÇÒÏÍÁ ÓÏ×ÅÔÓËÉÍÉ ×ÏÊÓËÁÍÉ ÎÅÍÅÃËÏ-ÆÁÛÉÓÔÓËÉÈ ×ÏÊÓË × ëÕÒÓËÏÊ ÂÉÔ×Å (1943 ÇÏÄ)
+ 8 ÓÅÎ äÅÎØ âÏÒÏÄÉÎÓËÏÇÏ ÓÒÁÖÅÎÉÑ ÒÕÓÓËÏÊ ÁÒÍÉÉ ÐÏÄ ËÏÍÁÎÄÏ×ÁÎÉÅÍ í.é. ëÕÔÕÚÏ×Á Ó ÆÒÁÎÃÕÚÓËÏÊ ÁÒÍÉÅÊ (1812 ÇÏÄ)
+11 ÓÅÎ äÅÎØ ÐÏÂÅÄÙ ÒÕÓÓËÏÊ ÜÓËÁÄÒÙ ÐÏÄ ËÏÍÁÎÄÏ×ÁÎÉÅÍ æ.æ. õÛÁËÏ×Á ÎÁÄ ÔÕÒÅÃËÏÊ ÜÓËÁÄÒÏÊ Õ ÍÙÓÁ ôÅÎÄÒÁ (1790 ÇÏÄ)
+21 ÓÅÎ äÅÎØ ÐÏÂÅÄÙ ÒÕÓÓËÉÈ ÐÏÌËÏ× ×Ï ÇÌÁ×Å Ó ×ÅÌÉËÉÍ ËÎÑÚÅÍ äÍÉÔÒÉÅÍ äÏÎÓËÉÍ ÎÁÄ ÍÏÎÇÏÌÏ-ÔÁÔÁÒÓËÉÍÉ ×ÏÊÓËÁÍÉ × ëÕÌÉËÏ×ÓËÏÊ ÂÉÔ×Å (1380 ÇÏÄ)
+ 7 ÎÏÑ äÅÎØ ÏÓ×ÏÂÏÖÄÅÎÉÑ íÏÓË×Ù ÓÉÌÁÍÉ ÎÁÒÏÄÎÏÇÏ ÏÐÏÌÞÅÎÉÑ ÐÏÄ ÒÕËÏ×ÏÄÓÔ×ÏÍ ëÕÚØÍÙ íÉÎÉÎÁ É äÍÉÔÒÉÑ ðÏÖÁÒÓËÏÇÏ ÏÔ ÐÏÌØÓËÉÈ ÉÎÔÅÒ×ÅÎÔÏ× (1612 ÇÏÄ)
+ 1 ÄÅË äÅÎØ ÐÏÂÅÄÙ ÒÕÓÓËÏÊ ÜÓËÁÄÒÙ ÐÏÄ ËÏÍÁÎÄÏ×ÁÎÉÅÍ ð.ó. îÁÈÉÍÏ×Á ÎÁÄ ÔÕÒÅÃËÏÊ ÜÓËÁÄÒÏÊ Õ ÍÙÓÁ óÉÎÏÐ (1853 ÇÏÄ)
+ 5 ÄÅË äÅÎØ ÎÁÞÁÌÁ ËÏÎÔÒÎÁÓÔÕÐÌÅÎÉÑ ÓÏ×ÅÔÓËÉÈ ×ÏÊÓË ÐÒÏÔÉ× ÎÅÍÅÃËÏ-ÆÁÛÉÓÔÓËÉÈ ×ÏÊÓË × ÂÉÔ×Å ÐÏÄ íÏÓË×ÏÊ (1941 ÇÏÄ)
+24 ÄÅË äÅÎØ ×ÚÑÔÉÑ ÔÕÒÅÃËÏÊ ËÒÅÐÏÓÔÉ éÚÍÁÉÌ ÒÕÓÓËÉÍÉ ×ÏÊÓËÁÍÉ ÐÏÄ ËÏÍÁÎÄÏ×ÁÎÉÅÍ á.÷. óÕ×ÏÒÏ×Á (1790 ÇÏÄ)
+
+#endif /* !_ru_RU_KOI8_R_military_ */
diff --git a/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.msk b/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.msk
new file mode 100644
index 0000000..c173b65
--- /dev/null
+++ b/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.msk
@@ -0,0 +1,16 @@
+/*
+ * ðÅÒÅ×ÏÄ ÞÁÓÏ× ÄÌÑ ÍÏÓËÏ×ÓËÏÊ ×ÒÅÍÅÎÎÏÊ ÚÏÎÙ
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/ru_RU.KOI8-R/calendar.msk,v 1.7 2006/12/29 06:44:24 ru Exp $
+ */
+
+#ifndef _ru_RU_KOI8_R_msk_
+#define _ru_RU_KOI8_R_msk_
+
+LANG=ru_RU.KOI8-R
+
+03/SunLast îÁÞÁÌÏ ÍÏÓËÏ×ÓËÏÇÏ ÌÅÔÎÅÇÏ ×ÒÅÍÅÎÉ; ÞÁÓÙ ÐÅÒÅ×ÏÄÑÔÓÑ ×ÐÅÒÅÄ
+10/SunLast ëÏÎÅà ÍÏÓËÏ×ÓËÏÇÏ ÌÅÔÎÅÇÏ ×ÒÅÍÅÎÉ; ÞÁÓÙ ÐÅÒÅ×ÏÄÑÔÓÑ ÎÁÚÁÄ
+
+#endif /* !_ru_RU_KOI8_R_msk_ */
+
diff --git a/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.orthodox b/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.orthodox
new file mode 100644
index 0000000..da2d0a7
--- /dev/null
+++ b/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.orthodox
@@ -0,0 +1,34 @@
+/*
+ * ðÒÁ×ÏÓÌÁ×ÎÙÅ ÐÒÁÚÄÎÉËÉ
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/ru_RU.KOI8-R/calendar.orthodox,v 1.5 2000/05/04 11:31:16 phantom Exp $
+ */
+
+#ifndef _ru_RU_KOI8_R_orthodox_
+#define _ru_RU_KOI8_R_orthodox_
+
+LANG=ru_RU.KOI8-R
+Paskha=ðÁÓÈÁ
+
+21 ÓÅÎ òÏÖÄÅÓÔ×Ï ðÒÅÓ×ÑÔÏÊ âÏÇÏÒÏÄÉÃÙ
+28 ÓÅÎ ÷ÏÚÄ×ÉÖÅÎÉÅ ëÒÅÓÔÁ çÏÓÐÏÄÎÑ
+14 ÏËÔ ðÏËÒÏ× ðÒÅÓ×ÑÔÏÊ âÏÇÏÒÏÄÉÃÙ
+ 4 ÄÅË ÷×ÅÄÅÎÉÅ ×Ï ÈÒÁÍ ðÒÅÓ×ÑÔÏÊ âÏÇÏÒÏÄÉÃÙ
+ 7 ÑÎ× òÏÖÄÅÓÔ×Ï èÒÉÓÔÏ×Ï
+19 ÑÎ× âÏÇÏÑ×ÌÅÎÉÅ ÉÌÉ ëÒÅÝÅÎÉÅ çÏÓÐÏÄÎÅ
+15 ÆÅ× óÒÅÔÅÎÉÅ çÏÓÐÏÄÎÅ
+ðÁÓÈÁ-46 ÷ÅÌÉËÉÊ ðÏÓÔ
+ðÁÓÈÁ-7 ÷ÅÒÂÎÏÅ ÷ÏÓËÒÅÓÅÎØÅ
+ðÁÓÈÁ-3 ÷ÅÌÉËÉÊ þÅÔ×ÅÒÇ
+ðÁÓÈÁ-2 óÔÒÁÓÔÎÁÑ ðÑÔÎÉÃÁ
+ðÁÓÈÁ ÷ÏÓËÒÅÓÅÎÉÅ èÒÉÓÔÏ×Ï
+ðÁÓÈÁ+39 ÷ÏÚÎÅÓÅÎÉÅ
+ðÁÓÈÁ+49 ðÑÔÉÄÅÓÑÔÎÉÃÁ
+ðÁÓÈÁ+56 ôÒÏÉÃÉÎ äÅÎØ
+ðÁÓÈÁ+60 ðÒÁÚÄÎÉË ôÅÌÁ èÒÉÓÔÏ×Á
+ 7 ÁÐÒ âÌÁÇÏ×ÅÝÅÎÉÅ ðÒÅÓ×ÑÔÏÊ âÏÇÏÒÏÄÉÃÙ
+19 Á×Ç ðÒÅÏÂÒÁÖÅÎÉÅ çÏÓÐÏÄÎÅ
+28 Á×Ç õÓÐÅÎÉÅ ðÒÅÓ×ÑÔÏÊ âÏÇÏÒÏÄÉÃÙ
+
+#endif /* !_ru_RU_KOI8_R_orthodox_ */
+
diff --git a/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.pagan b/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.pagan
new file mode 100644
index 0000000..7ac2bac
--- /dev/null
+++ b/misc_cmds/calendar/calendars/ru_RU.KOI8-R/calendar.pagan
@@ -0,0 +1,42 @@
+/*
+ * ñÚÙÞÅÓËÉÅ ÐÒÁÚÄÎÉËÉ
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/ru_RU.KOI8-R/calendar.pagan,v 1.7 2003/12/31 18:01:31 ache Exp $
+ */
+
+#ifndef _ru_RU_KOI8_R_pagan_
+#define _ru_RU_KOI8_R_pagan_
+
+LANG=ru_RU.KOI8-R
+Paskha=ðÁÓÈÁ
+
+21 ÄÅË* úÉÍÎÅÅ ÓÏÌÎÃÅÓÔÏÑÎÉÅ
+25 ÄÅË ëÏÌÑÄÁ (ÓÄ×ÉÎÕÔÏÅ ÚÉÍÎÅÅ ÓÏÌÎÃÅÓÔÏÑÎÉÅ)
+ 6 ÑÎ× äÅÎØ ëÁÝÅÑ É ÷ÅÌÅÓÁ
+24 ÆÅ× äÅÎØ ÷ÅÌÅÓÁ
+29 ÆÅ× äÅÎØ ëÁÝÅÑ
+ 1 ÍÁÒ äÅÎØ íÁÒÅÎÙ
+14 ÍÁÒ îÏ×ÙÊ çÏÄ, ï×ÓÅÎØ ÍÁÌÙÊ
+ðÁÓÈÁ-47 íÁÓÌÅÎÉÃÁ
+ðÁÓÈÁ+7 ëÒÁÓÎÁÑ çÏÒËÁ
+ðÁÓÈÁ+16 òÁÄÕÎÉÃÁ
+20 ÍÁÒ* ÷ÅÓÅÎÎÉÅ ÒÁ×ÎÏÄÅÎÓÔ×ÉÅ
+ 7 ÁÐÒ äÅÎØ íÁÒÅÎÙ (ÓÄ×ÉÎÕÔÏÅ ×ÅÓÅÎÎÅÅ ÒÁ×ÎÏÄÅÎÓÔ×ÉÅ)
+ 6 ÍÁÊ äÅÎØ äÁÖØÂÏÇÁ, ï×ÓÅÎØ ÂÏÌØÛÏÊ
+22 ÍÁÊ ñÒÉÌÉÎ äÅÎØ
+15 ÉÀÎ äÅÎØ ôÒÉÇÌÁ×Á
+21 ÉÀÎ* ìÅÔÎÅÅ ÓÏÌÎÃÅÓÔÏÑÎÉÅ
+ 1 ÉÀÌ òÕÓÁÌØÎÁÑ îÅÄÅÌÑ
+ 7 ÉÀÌ ëÕÐÁÌÁ (ÓÄ×ÉÎÕÔÏÅ ÌÅÔÎÅÅ ÓÏÌÎÃÅÓÔÏÑÎÉÅ)
+27 ÉÀÌ ïÔÂÏÒ ÖÅÒÔ× ðÅÒÕÎÕ, ÒÕÓÁÌÉÉ
+ 2 Á×Ç ðÅÒÕÎÏ× äÅÎØ
+21 Á×Ç äÅÎØ óÔÒÉÂÏÇÁ
+28 Á×Ç õÓÐÅÎÉÅ úÌÁÔÏÇÏÒËÉ
+14 ÓÅÎ äÅÎØ ÷ÏÌÈÁ úÍÅÅ×ÉÞÁ
+22 ÓÅÎ* ðÏ×ÏÒÏÔ Ë ÚÉÍÅ (ÏÓÅÎÎÅÅ ÒÁ×ÎÏÄÅÎÓÔ×ÉÅ)
+10 ÎÏÑ äÅÎØ íÁËÏÛÉ
+21 ÎÏÑ äÅÎØ ó×ÁÒÏÇÁ É óÅÍÁÒÇÌÁ
+ 9 ÄÅË äÅÎØ äÁÖØÂÏÇÁ É íÁÒÅÎÙ
+
+#endif /* !_ru_RU_KOI8_R_pagan_ */
+
diff --git a/misc_cmds/calendar/calendars/uk_UA.KOI8-U/calendar.all b/misc_cmds/calendar/calendars/uk_UA.KOI8-U/calendar.all
new file mode 100644
index 0000000..dc862bd
--- /dev/null
+++ b/misc_cmds/calendar/calendars/uk_UA.KOI8-U/calendar.all
@@ -0,0 +1,14 @@
+/*
+ * õËÒÁ§ÎÓØËÉÊ ËÁÌÅÎÄÁÒ
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/uk_UA.KOI8-U/calendar.all,v 1.1 2005/10/28 21:25:28 ru Exp $
+ */
+
+#ifndef _uk_UA_KOI8_U_all_
+#define _uk_UA_KOI8_U_all_
+
+#include <uk_UA.KOI8-U/calendar.holiday>
+#include <uk_UA.KOI8-U/calendar.orthodox>
+#include <uk_UA.KOI8-U/calendar.misc>
+
+#endif /* !_uk_UA_KOI8_U_all_ */
diff --git a/misc_cmds/calendar/calendars/uk_UA.KOI8-U/calendar.holiday b/misc_cmds/calendar/calendars/uk_UA.KOI8-U/calendar.holiday
new file mode 100644
index 0000000..d127ed9
--- /dev/null
+++ b/misc_cmds/calendar/calendars/uk_UA.KOI8-U/calendar.holiday
@@ -0,0 +1,22 @@
+/*
+ * õËÒÁ§ÎÓØ˦ ÄÅÒÖÁ×Φ Ó×ÑÔÁ
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/uk_UA.KOI8-U/calendar.holiday,v 1.1 2005/10/28 21:25:28 ru Exp $
+ */
+
+#ifndef _uk_UA_KOI8_U_holiday_
+#define _uk_UA_KOI8_U_holiday_
+
+LANG=uk_UA.KOI8-U
+Paskha=÷ÅÌÉËÄÅÎØ
+
+ó¦Þ 01 îÏ×ÉÊ ò¦Ë
+ó¦Þ 07 ò¦ÚÄ×Ï èÒÉÓÔÏ×Å
+âÅÒ 08 8 âÅÒÅÚÎÑ - í¦ÖÎÁÒÏÄÎÉÊ ö¦ÎÏÞÉÊ äÅÎØ
+ôÒÁ 01 1 ôÒÁ×ÎÑ - äÅÎØ ðÒÁæ
+ôÒÁ 09 äÅÎØ ðÅÒÅÍÏÇÉ
+÷ÅÌÉËÄÅÎØ+49 ôÒ¦ÊÃÑ
+þÅÒ 28 äÅÎØ ëÏÎÓÔÉÔÕæ§ õËÒÁ§ÎÉ
+óÅÒ 24 äÅÎØ îÅÚÁÌÅÖÎÏÓÔ¦ õËÒÁ§ÎÉ
+
+#endif /* !_uk_UA_KOI8_U_holiday_ */
diff --git a/misc_cmds/calendar/calendars/uk_UA.KOI8-U/calendar.misc b/misc_cmds/calendar/calendars/uk_UA.KOI8-U/calendar.misc
new file mode 100644
index 0000000..ec91264
--- /dev/null
+++ b/misc_cmds/calendar/calendars/uk_UA.KOI8-U/calendar.misc
@@ -0,0 +1,18 @@
+/*
+ * ¶ÎÛ¦ æËÁצ ÄÁÔÉ
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/uk_UA.KOI8-U/calendar.misc,v 1.1 2005/10/28 21:25:28 ru Exp $
+ */
+
+#ifndef _uk_UA_KOI8_U_misc_
+#define _uk_UA_KOI8_U_misc_
+
+LANG=uk_UA.KOI8-U
+
+/* ðÏÓÔÁÎÏ×Á ëÁ¦ÎÅÔÕ í¦Î¦ÓÔÒ¦× õËÒÁ§ÎÉ ×¦Ä 13 ÔÒÁ×ÎÑ 1996 Ò. N 509
+ * "ðÒÏ ÐÏÒÑÄÏË ÏÂÞÉÓÌÅÎÎÑ ÞÁÓÕ ÎÁ ÔÅÒÉÔÏÒ¦§ õËÒÁ§ÎÉ"
+ */
+âÅÒ îÄ-1 ðÅÒÅÈ¦Ä ÎÁ ̦ÔÎ¦Ê ÞÁÓ (ÏÓÔÁÎÎÑ ÎÅĦÌÑ ÂÅÒÅÚÎÑ)
+öÏ× îÄ-1 ðÅÒÅÈ¦Ä ÎÁ ÚÉÍÏ×ÉÊ ÞÁÓ (ÏÓÔÁÎÎÑ ÎÅĦÌÑ ÖÏ×ÔÎÑ)
+
+#endif /* !_uk_UA_KOI8_U_misc_ */
diff --git a/misc_cmds/calendar/calendars/uk_UA.KOI8-U/calendar.orthodox b/misc_cmds/calendar/calendars/uk_UA.KOI8-U/calendar.orthodox
new file mode 100644
index 0000000..31f6df3
--- /dev/null
+++ b/misc_cmds/calendar/calendars/uk_UA.KOI8-U/calendar.orthodox
@@ -0,0 +1,35 @@
+/*
+ * ðÒÁ×ÏÓÌÁ×Φ Ó×ÑÔÁ
+ *
+ * $FreeBSD: src/usr.bin/calendar/calendars/uk_UA.KOI8-U/calendar.orthodox,v 1.1 2005/10/28 21:25:28 ru Exp $
+ */
+
+#ifndef _uk_UA_KOI8_U_orthodox_
+#define _uk_UA_KOI8_U_orthodox_
+
+LANG=uk_UA.KOI8-U
+Paskha=÷ÅÌÉËÄÅÎØ
+
+ 7 ó¦Þ ò¦ÚÄ×Ï èÒÉÓÔÏ×Å
+19 ó¦Þ âÏÇÏÑ×ÌÅÎÎÑ ÁÂÏ èÒÅÝÅÎÎÑ çÏÓÐÏÄΤ
+15 ìÀÔ óÔÒ¦ÔÅÎÎÑ çÏÓÐÏÄΤ
+÷ÅÌÉËÄÅÎØ-46 ÷ÅÌÉËÉÊ ð¦ÓÔ
+÷ÅÌÉËÄÅÎØ-7 ÷ÅÒÂÎÁ îÅĦÌÑ
+÷ÅÌÉËÄÅÎØ-3 ÷ÅÌÉËÉÊ þÅÔ×ÅÒ
+÷ÅÌÉËÄÅÎØ-2 óÔÒÁÓÎÁ ð'ÑÔÎÉÃÑ
+÷ÅÌÉËÄÅÎØ ÷ÏÓËÒÅÓ¦ÎÎÑ èÒÉÓÔÏ×Å
+÷ÅÌÉËÄÅÎØ+39 ÷ÏÚÎÅÓ¦ÎÎÑ çÏÓÐÏÄΤ
+÷ÅÌÉËÄÅÎØ+49 äÅÎØ ó×ÑÔϧ ôÒ¦Êæ, ð'ÑÔÉÄÅÓÑÔÎÉÃÑ
+÷ÅÌÉËÄÅÎØ+60 ó×ÑÔÏ Ô¦ÌÁ èÒÉÓÔÏ×ÏÇÏ
+ 7 ëצ âÌÁÇÏצÝÅÎÎÑ ðÒÅÓ×ÑÔϧ ä¦×É íÁÒ¦§
+ 7 ìÉÐ ò¦ÚÄ×Ï Ó×ÑÔÏÇÏ ¶×ÁÎÁ èÒÅÓÔÉÔÅÌÑ
+12 ìÉÐ ó×ÑÔÉÈ ÷ÅÒÈÏ×ÎÉÈ ÁÐÏÓÔÏÌ¦× ðÅÔÒÁ ¦ ðÁ×ÌÁ
+19 óÅÒ ðÒÅÏÂÒÁÖÅÎÎÑ çÏÓÐÏÄΤ
+28 óÅÒ õÓÐÅÎÎÑ ðÒÅÓ×ÑÔϧ âÏÇÏÒÏÄÉæ
+11 ÷ÅÒ õÓ¦ËÎÏ×ÅÎÎÑ ÞÅÓÎϧ ÇÏÌÏ×É Ó×ÑÔÏÇÏ ¶×ÁÎÁ èÒÅÓÔÉÔÅÌÑ
+21 ÷ÅÒ ò¦ÚÄ×Ï ðÒÅÓ×ÑÔϧ âÏÇÏÒÏÄÉæ
+27 ÷ÅÒ ÷ÏÚÄ×ÉÖÅÎÎÑ þÅÓÎÏÇÏ èÒÅÓÔÁ
+14 öÏ× ðÏËÒÏ×Á ðÒÅÓ×ÑÔϧ âÏÇÏÒÏÄÉæ
+ 4 çÒÕ ÷×ÅÄÅÎÎÑ ÄÏ ÈÒÁÍÕ ðÒÅÓ×ÑÔϧ âÏÇÏÒÏÄÉæ
+
+#endif /* !_uk_UA_KOI8_U_orthodox_ */
diff --git a/misc_cmds/calendar/day.c b/misc_cmds/calendar/day.c
new file mode 100644
index 0000000..f41fc2d
--- /dev/null
+++ b/misc_cmds/calendar/day.c
@@ -0,0 +1,498 @@
+/*
+ * Copyright (c) 1989, 1993, 1994
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: src/usr.bin/calendar/day.c,v 1.27 2007/06/09 05:54:13 grog Exp $");
+
+#include <sys/types.h>
+#include <sys/uio.h>
+#include <ctype.h>
+#include <err.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#include "pathnames.h"
+#include "calendar.h"
+
+struct tm *tp;
+static const struct tm tm0;
+int *cumdays, yrdays;
+char dayname[10];
+
+
+/* 1-based month, 0-based days, cumulative */
+int daytab[][14] = {
+ { 0, -1, 30, 58, 89, 119, 150, 180, 211, 242, 272, 303, 333, 364 },
+ { 0, -1, 30, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 },
+};
+
+static char const *days[] = {
+ "sun", "mon", "tue", "wed", "thu", "fri", "sat", NULL,
+};
+
+static const char *months[] = {
+ "jan", "feb", "mar", "apr", "may", "jun",
+ "jul", "aug", "sep", "oct", "nov", "dec", NULL,
+};
+
+static struct fixs fndays[8]; /* full national days names */
+static struct fixs ndays[8]; /* short national days names */
+
+static struct fixs fnmonths[13]; /* full national months names */
+static struct fixs nmonths[13]; /* short national month names */
+
+
+void
+setnnames(void)
+{
+ char buf[80];
+ int i, l;
+ struct tm tm;
+
+ for (i = 0; i < 7; i++) {
+ tm.tm_wday = i;
+ strftime(buf, sizeof(buf), "%a", &tm);
+ for (l = strlen(buf);
+ l > 0 && isspace((unsigned char)buf[l - 1]);
+ l--)
+ ;
+ buf[l] = '\0';
+ if (ndays[i].name != NULL)
+ free(ndays[i].name);
+ if ((ndays[i].name = strdup(buf)) == NULL)
+ errx(1, "cannot allocate memory");
+ ndays[i].len = strlen(buf);
+
+ strftime(buf, sizeof(buf), "%A", &tm);
+ for (l = strlen(buf);
+ l > 0 && isspace((unsigned char)buf[l - 1]);
+ l--)
+ ;
+ buf[l] = '\0';
+ if (fndays[i].name != NULL)
+ free(fndays[i].name);
+ if ((fndays[i].name = strdup(buf)) == NULL)
+ errx(1, "cannot allocate memory");
+ fndays[i].len = strlen(buf);
+ }
+
+ for (i = 0; i < 12; i++) {
+ tm.tm_mon = i;
+ strftime(buf, sizeof(buf), "%b", &tm);
+ for (l = strlen(buf);
+ l > 0 && isspace((unsigned char)buf[l - 1]);
+ l--)
+ ;
+ buf[l] = '\0';
+ if (nmonths[i].name != NULL)
+ free(nmonths[i].name);
+ if ((nmonths[i].name = strdup(buf)) == NULL)
+ errx(1, "cannot allocate memory");
+ nmonths[i].len = strlen(buf);
+
+ strftime(buf, sizeof(buf), "%B", &tm);
+ for (l = strlen(buf);
+ l > 0 && isspace((unsigned char)buf[l - 1]);
+ l--)
+ ;
+ buf[l] = '\0';
+ if (fnmonths[i].name != NULL)
+ free(fnmonths[i].name);
+ if ((fnmonths[i].name = strdup(buf)) == NULL)
+ errx(1, "cannot allocate memory");
+ fnmonths[i].len = strlen(buf);
+ }
+}
+
+void
+settime(time_t now)
+{
+ char *oldl, *lbufp;
+
+ tp = localtime(&now);
+ if ( isleap(tp->tm_year + 1900) ) {
+ yrdays = 366;
+ cumdays = daytab[1];
+ } else {
+ yrdays = 365;
+ cumdays = daytab[0];
+ }
+ /* Friday displays Monday's events */
+ /* -A n ignores weekends */
+ if (f_dayAfter != 0 && Friday != -1) {
+ int weeks = f_dayAfter / 5;
+ int days = f_dayAfter % 5;
+ f_dayAfter += 2 * weeks;
+ if (days &&
+ (tp->tm_wday <= Friday) &&
+ (tp->tm_wday+days > Friday)) {
+ f_dayAfter += 2;
+ }
+ }
+ header[5].iov_base = dayname;
+
+ oldl = NULL;
+ lbufp = setlocale(LC_TIME, NULL);
+ if (lbufp != NULL && (oldl = strdup(lbufp)) == NULL)
+ errx(1, "cannot allocate memory");
+ (void) setlocale(LC_TIME, "C");
+ header[5].iov_len = strftime(dayname, sizeof(dayname), "%A", tp);
+ (void) setlocale(LC_TIME, (oldl != NULL ? oldl : ""));
+ if (oldl != NULL)
+ free(oldl);
+
+ setnnames();
+}
+
+/* convert Day[/Month][/Year] into unix time (since 1970)
+ * Day: two digits, Month: two digits, Year: digits
+ */
+time_t
+Mktime (char *dp)
+{
+ time_t t;
+ int d, m, y;
+ struct tm tm;
+
+ (void)time(&t);
+ tp = localtime(&t);
+
+ tm = tm0;
+ tm.tm_mday = tp->tm_mday;
+ tm.tm_mon = tp->tm_mon;
+ tm.tm_year = tp->tm_year;
+
+ switch (sscanf(dp, "%d.%d.%d", &d, &m, &y)) {
+ case 3:
+ if (y > 1900)
+ y -= 1900;
+ tm.tm_year = y;
+ /* FALLTHROUGH */
+ case 2:
+ tm.tm_mon = m - 1;
+ /* FALLTHROUGH */
+ case 1:
+ tm.tm_mday = d;
+ }
+
+#ifdef DEBUG
+ fprintf(stderr, "Mktime: %d %d %s\n", (int)mktime(&tm), (int)t,
+ asctime(&tm));
+#endif
+ return(mktime(&tm));
+}
+
+/*
+ * Possible date formats include any combination of:
+ * 3-charmonth (January, Jan, Jan)
+ * 3-charweekday (Friday, Monday, mon.)
+ * numeric month or day (1, 2, 04)
+ *
+ * Any character may separate them, or they may not be separated. Any line,
+ * following a line that is matched, that starts with "whitespace", is shown
+ * along with the matched line.
+ */
+int
+isnow(char *endp, int *monthp, int *dayp, int *varp)
+{
+ int day, flags, month = 0, v1, v2;
+
+ /*
+ * CONVENTION
+ *
+ * Month: 1-12
+ * Monthname: Jan .. Dec
+ * Day: 1-31
+ * Weekday: Mon-Sun
+ *
+ */
+
+ flags = 0;
+
+ /* read first field */
+ /* didn't recognize anything, skip it */
+ if (!(v1 = getfield(endp, &endp, &flags)))
+ return (0);
+
+ /* Easter or Easter depending days */
+ if (flags & F_EASTER)
+ day = v1 - 1; /* days since January 1 [0-365] */
+
+ /*
+ * 1. {Weekday,Day} XYZ ...
+ *
+ * where Day is > 12
+ */
+ else if (flags & F_ISDAY || v1 > 12) {
+
+ /* found a day; day: 1-31 or weekday: 1-7 */
+ day = v1;
+
+ /* {Day,Weekday} {Month,Monthname} ... */
+ /* if no recognizable month, assume just a day alone
+ * in other words, find month or use current month */
+ if (!(month = getfield(endp, &endp, &flags)))
+ month = tp->tm_mon + 1;
+ }
+
+ /* 2. {Monthname} XYZ ... */
+ else if (flags & F_ISMONTH) {
+ month = v1;
+
+ /* Monthname {day,weekday} */
+ /* if no recognizable day, assume the first day in month */
+ if (!(day = getfield(endp, &endp, &flags)))
+ day = 1;
+ }
+
+ /* Hm ... */
+ else {
+ v2 = getfield(endp, &endp, &flags);
+
+ /*
+ * {Day} {Monthname} ...
+ * where Day <= 12
+ */
+ if (flags & F_ISMONTH) {
+ day = v1;
+ month = v2;
+ *varp = 0;
+ }
+
+ /* {Month} {Weekday,Day} ... */
+ else {
+ /* F_ISDAY set, v2 > 12, or no way to tell */
+ month = v1;
+ /* if no recognizable day, assume the first */
+ day = v2 ? v2 : 1;
+ *varp = 0;
+ }
+ }
+
+ /* convert Weekday into *next* Day,
+ * e.g.: 'Sunday' -> 22
+ * 'SundayLast' -> ??
+ */
+ if (flags & F_ISDAY) {
+#ifdef DEBUG
+ fprintf(stderr, "\nday: %d %s month %d\n", day, endp, month);
+#endif
+
+ *varp = 1;
+ /* variable weekday, SundayLast, MondayFirst ... */
+ if (day < 0 || day >= 10) {
+
+ /* negative offset; last, -4 .. -1 */
+ if (day < 0) {
+ v1 = day/10 - 1; /* offset -4 ... -1 */
+ day = 10 + (day % 10); /* day 1 ... 7 */
+
+ /* day, eg '22nd' */
+ v2 = tp->tm_mday + (((day - 1) - tp->tm_wday + 7) % 7);
+
+ /* (month length - day) / 7 + 1 */
+ if (cumdays[month+1] - cumdays[month] >= v2
+ && ((int)((cumdays[month+1] -
+ cumdays[month] - v2) / 7) + 1) == -v1)
+ /* bingo ! */
+ day = v2;
+
+ /* set to yesterday */
+ else {
+ day = tp->tm_mday - 1;
+ if (day == 0)
+ return (0);
+ }
+ }
+
+ /* first, second ... +1 ... +5 */
+ else {
+ v1 = day/10; /* offset: +1 (first Sunday) ... */
+ day = day % 10;
+
+ /* day, eg '22th' */
+ v2 = tp->tm_mday + (((day - 1) - tp->tm_wday + 7) % 7);
+
+ /* Hurrah! matched */
+ if ( ((v2 - 1 + 7) / 7) == v1 )
+ day = v2;
+
+ /* set to yesterday */
+ else {
+ day = tp->tm_mday - 1;
+ if (day == 0)
+ return (0);
+ }
+ }
+ }
+
+ /* wired */
+ else {
+ day = tp->tm_mday + (((day - 1) - tp->tm_wday + 7) % 7);
+ *varp = 1;
+ }
+ }
+
+ if (!(flags & F_EASTER)) {
+ if (day + cumdays[month] > cumdays[month + 1]) { /* off end of month */
+ day -= (cumdays[month + 1] - cumdays[month]); /* adjust */
+ if (++month > 12) /* next year */
+ month = 1;
+ }
+ *monthp = month;
+ *dayp = day;
+ day = cumdays[month] + day;
+ }
+ else {
+ for (v1 = 0; day > cumdays[v1]; v1++)
+ ;
+ *monthp = v1 - 1;
+ *dayp = day - cumdays[v1 - 1];
+ *varp = 1;
+ }
+
+#ifdef DEBUG
+ fprintf(stderr, "day2: day %d(%d-%d) yday %d\n", *dayp, day,
+ cumdays[month], tp->tm_yday);
+#endif
+
+ /* When days before or days after is specified */
+ /* no year rollover */
+ if (day >= tp->tm_yday - f_dayBefore &&
+ day <= tp->tm_yday + f_dayAfter)
+ return (1);
+
+ /* next year */
+ if (tp->tm_yday + f_dayAfter >= yrdays) {
+ int end = tp->tm_yday + f_dayAfter - yrdays;
+ if (day <= end)
+ return (1);
+ }
+
+ /* previous year */
+ if (tp->tm_yday - f_dayBefore < 0) {
+ int before = yrdays + (tp->tm_yday - f_dayBefore );
+ if (day >= before)
+ return (1);
+ }
+
+ return (0);
+}
+
+
+int
+getmonth(char *s)
+{
+ const char **p;
+ struct fixs *n;
+
+ for (n = fnmonths; n->name; ++n)
+ if (!strncasecmp(s, n->name, n->len))
+ return ((n - fnmonths) + 1);
+ for (n = nmonths; n->name; ++n)
+ if (!strncasecmp(s, n->name, n->len))
+ return ((n - nmonths) + 1);
+ for (p = months; *p; ++p)
+ if (!strncasecmp(s, *p, 3))
+ return ((p - months) + 1);
+ return (0);
+}
+
+
+int
+getday(char *s)
+{
+ const char **p;
+ struct fixs *n;
+
+ for (n = fndays; n->name; ++n)
+ if (!strncasecmp(s, n->name, n->len))
+ return ((n - fndays) + 1);
+ for (n = ndays; n->name; ++n)
+ if (!strncasecmp(s, n->name, n->len))
+ return ((n - ndays) + 1);
+ for (p = days; *p; ++p)
+ if (!strncasecmp(s, *p, 3))
+ return ((p - days) + 1);
+ return (0);
+}
+
+/* return offset for variable weekdays
+ * -1 -> last weekday in month
+ * +1 -> first weekday in month
+ * ... etc ...
+ */
+int
+getdayvar(char *s)
+{
+ int offs;
+
+
+ offs = strlen(s);
+
+
+ /* Sun+1 or Wednesday-2
+ * ^ ^ */
+
+ /* fprintf(stderr, "x: %s %s %d\n", s, s + offs - 2, offs); */
+ switch(*(s + offs - 2)) {
+ case '-':
+ return(-(atoi(s + offs - 1)));
+ case '+':
+ return(atoi(s + offs - 1));
+ }
+
+
+ /*
+ * some aliases: last, first, second, third, fourth
+ */
+
+ /* last */
+ if (offs > 4 && !strcasecmp(s + offs - 4, "last"))
+ return(-1);
+ else if (offs > 5 && !strcasecmp(s + offs - 5, "first"))
+ return(+1);
+ else if (offs > 6 && !strcasecmp(s + offs - 6, "second"))
+ return(+2);
+ else if (offs > 5 && !strcasecmp(s + offs - 5, "third"))
+ return(+3);
+ else if (offs > 6 && !strcasecmp(s + offs - 6, "fourth"))
+ return(+4);
+
+
+ /* no offset detected */
+ return(0);
+}
diff --git a/misc_cmds/calendar/io.c b/misc_cmds/calendar/io.c
new file mode 100644
index 0000000..6c8f4d2
--- /dev/null
+++ b/misc_cmds/calendar/io.c
@@ -0,0 +1,470 @@
+/*
+ * Copyright (c) 1989, 1993, 1994
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+static const char copyright[] =
+"@(#) Copyright (c) 1989, 1993\n\
+ The Regents of the University of California. All rights reserved.\n";
+#endif
+
+#if 0
+#ifndef lint
+static char sccsid[] = "@(#)calendar.c 8.3 (Berkeley) 3/25/94";
+#endif
+#endif
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: src/usr.bin/calendar/io.c,v 1.24 2007/12/30 22:04:04 grog Exp $");
+
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/uio.h>
+#include <sys/wait.h>
+#include <ctype.h>
+#include <err.h>
+#include <errno.h>
+#include <langinfo.h>
+#include <locale.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "pathnames.h"
+#include "calendar.h"
+
+
+const char *calendarFile = "calendar"; /* default calendar file */
+const char *calendarHomes[] = { ".calendar", _PATH_INCLUDE }; /* HOME */
+const char *calendarNoMail = "nomail"; /* don't sent mail if this file exist */
+
+struct fixs neaster, npaskha;
+
+struct iovec header[] = {
+ {"From: ", 6},
+ {NULL, 0},
+ {" (Reminder Service)\nTo: ", 24},
+ {NULL, 0},
+ {"\nSubject: ", 10},
+ {NULL, 0},
+ {"'s Calendar\nPrecedence: bulk\n\n", 30},
+};
+
+
+void
+cal(void)
+{
+ int printing;
+ char *p;
+ FILE *fp;
+ int ch, l;
+ int month;
+ int day;
+ int var;
+ static int d_first = -1;
+ char buf[2048 + 1];
+ struct event *events = NULL;
+
+ if ((fp = opencal()) == NULL)
+ return;
+ for (printing = 0; fgets(buf, sizeof(buf), stdin) != NULL;) {
+ if ((p = strchr(buf, '\n')) != NULL)
+ *p = '\0';
+ else
+ while ((ch = getchar()) != '\n' && ch != EOF);
+ for (l = strlen(buf);
+ l > 0 && isspace((unsigned char)buf[l - 1]);
+ l--)
+ ;
+ buf[l] = '\0';
+ if (buf[0] == '\0')
+ continue;
+ if (strncmp(buf, "LANG=", 5) == 0) {
+ (void) setlocale(LC_ALL, buf + 5);
+ d_first = (*nl_langinfo(D_MD_ORDER) == 'd');
+ setnnames();
+ continue;
+ }
+ if (strncasecmp(buf, "Easter=", 7) == 0 && buf[7]) {
+ if (neaster.name != NULL)
+ free(neaster.name);
+ if ((neaster.name = strdup(buf + 7)) == NULL)
+ errx(1, "cannot allocate memory");
+ neaster.len = strlen(buf + 7);
+ continue;
+ }
+ if (strncasecmp(buf, "Paskha=", 7) == 0 && buf[7]) {
+ if (npaskha.name != NULL)
+ free(npaskha.name);
+ if ((npaskha.name = strdup(buf + 7)) == NULL)
+ errx(1, "cannot allocate memory");
+ npaskha.len = strlen(buf + 7);
+ continue;
+ }
+ if (buf[0] != '\t') {
+ printing = isnow(buf, &month, &day, &var) ? 1 : 0;
+ if ((p = strchr(buf, '\t')) == NULL) {
+#if DEBUG
+ fprintf(stderr, "[continue <%s>]\n", buf);
+#endif
+ continue;
+ }
+ if (p > buf && p[-1] == '*')
+ var = 1;
+ if (printing) {
+#if DEBUG
+ fprintf(stderr, "[Add event]\n");
+#endif
+ struct tm tm;
+ char dbuf[80];
+
+ if (d_first < 0)
+ d_first = (*nl_langinfo(D_MD_ORDER) == 'd');
+ tm.tm_sec = 0; /* unused */
+ tm.tm_min = 0; /* unused */
+ tm.tm_hour = 0; /* unused */
+ tm.tm_wday = 0; /* unused */
+ tm.tm_mon = month - 1;
+ tm.tm_mday = day;
+ tm.tm_year = tp->tm_year; /* unused */
+ (void)strftime(dbuf, sizeof(dbuf),
+ d_first ? "%e %b" : "%b %e",
+ &tm);
+ events = event_add(events, month, day, dbuf, var, p);
+ }
+ }
+ else if (printing)
+ event_continue(events, buf);
+ }
+
+ event_print_all(fp, events);
+ closecal(fp);
+}
+
+/*
+ * Functions to handle buffered calendar events.
+ */
+struct event *
+event_add(struct event *events, int month, int day, char *date, int var, char *txt)
+{
+ struct event *e;
+
+ e = (struct event *)calloc(1, sizeof(struct event));
+ if (e == NULL)
+ errx(1, "event_add: cannot allocate memory");
+ e->month = month;
+ e->day = day;
+ e->var = var;
+ e->date = strdup(date);
+ if (e->date == NULL)
+ errx(1, "event_add: cannot allocate memory");
+ e->text = strdup(txt);
+ if (e->text == NULL)
+ errx(1, "event_add: cannot allocate memory");
+ e->next = events;
+
+ return e;
+}
+
+void
+event_continue(struct event *e, char *txt)
+{
+ char *text;
+
+ text = strdup(e->text);
+ if (text == NULL)
+ errx(1, "event_continue: cannot allocate memory");
+
+ free(e->text);
+ e->text = (char *)malloc(strlen(text) + strlen(txt) + 3);
+ if (e->text == NULL)
+ errx(1, "event_continue: cannot allocate memory");
+ strcpy(e->text, text);
+ strcat(e->text, "\n");
+ strcat(e->text, txt);
+ free(text);
+
+ return;
+}
+
+void
+event_print_all(FILE *fp, struct event *events)
+{
+ struct event *e, *e_next;
+ int daycount = f_dayAfter + f_dayBefore;
+ int daycounter;
+ int day, month;
+
+ for (daycounter = 0; daycounter <= daycount; daycounter++) {
+ day = tp->tm_yday - f_dayBefore + daycounter;
+ if (day < 0) day += yrdays;
+ if (day >= yrdays) day -= yrdays;
+
+ month = 1;
+ while (month <= 12) {
+ if (day <= cumdays[month])
+ break;
+ month++;
+ }
+ month--;
+ day -= cumdays[month];
+
+#ifdef DEBUG
+ fprintf(stderr,"event_print_allmonth: %d, day: %d\n",month,day);
+#endif
+
+ for (e = events; e != NULL; e = e_next ) {
+ e_next = e->next;
+
+ if (month != e->month || day != e->day)
+ continue;
+
+ (void)fprintf(fp, "%s%c%s\n", e->date,
+ e->var ? '*' : ' ', e->text);
+ }
+ }
+}
+
+int
+getfield(char *p, char **endp, int *flags)
+{
+ int val, var;
+ char *start, savech;
+
+ for (; !isdigit((unsigned char)*p) && !isalpha((unsigned char)*p)
+ && *p != '*'; ++p);
+ if (*p == '*') { /* `*' is current month */
+ *flags |= F_ISMONTH;
+ *endp = p+1;
+ return (tp->tm_mon + 1);
+ }
+ if (isdigit((unsigned char)*p)) {
+ val = strtol(p, &p, 10); /* if 0, it's failure */
+ for (; !isdigit((unsigned char)*p)
+ && !isalpha((unsigned char)*p) && *p != '*'; ++p);
+ *endp = p;
+ return (val);
+ }
+ for (start = p; isalpha((unsigned char)*++p););
+
+ /* Sunday-1 */
+ if (*p == '+' || *p == '-')
+ for(; isdigit((unsigned char)*++p););
+
+ savech = *p;
+ *p = '\0';
+
+ /* Month */
+ if ((val = getmonth(start)) != 0)
+ *flags |= F_ISMONTH;
+
+ /* Day */
+ else if ((val = getday(start)) != 0) {
+ *flags |= F_ISDAY;
+
+ /* variable weekday */
+ if ((var = getdayvar(start)) != 0) {
+ if (var <=5 && var >= -4)
+ val += var * 10;
+#ifdef DEBUG
+ printf("var: %d\n", var);
+#endif
+ }
+ }
+
+ /* Easter */
+ else if ((val = geteaster(start, tp->tm_year + 1900)) != 0)
+ *flags |= F_EASTER;
+
+ /* Paskha */
+ else if ((val = getpaskha(start, tp->tm_year + 1900)) != 0)
+ *flags |= F_EASTER;
+
+ /* undefined rest */
+ else {
+ *p = savech;
+ return (0);
+ }
+ for (*p = savech; !isdigit((unsigned char)*p)
+ && !isalpha((unsigned char)*p) && *p != '*'; ++p);
+ *endp = p;
+ return (val);
+}
+
+char path[MAXPATHLEN];
+
+FILE *
+opencal(void)
+{
+ uid_t uid;
+ size_t i;
+ int fd, found, pdes[2];
+ struct stat sbuf;
+
+ /* open up calendar file as stdin */
+ if (!freopen(calendarFile, "r", stdin)) {
+ if (doall) {
+ if (chdir(calendarHomes[0]) != 0)
+ return (NULL);
+ if (stat(calendarNoMail, &sbuf) == 0)
+ return (NULL);
+ if (!freopen(calendarFile, "r", stdin))
+ return (NULL);
+ } else {
+ char *home = getenv("HOME");
+ if (home == NULL || *home == '\0')
+ errx(1, "cannot get home directory");
+ chdir(home);
+ for (found = i = 0; i < sizeof(calendarHomes) /
+ sizeof(calendarHomes[0]); i++)
+ if (chdir(calendarHomes[i]) == 0 &&
+ freopen(calendarFile, "r", stdin)) {
+ found = 1;
+ break;
+ }
+ if (!found)
+ errx(1, "can't open calendar file \"%s\": %s (%d)",
+ calendarFile, strerror(errno), errno);
+ }
+ }
+ if (pipe(pdes) < 0)
+ return (NULL);
+ switch (fork()) {
+ case -1: /* error */
+ (void)close(pdes[0]);
+ (void)close(pdes[1]);
+ return (NULL);
+ case 0:
+ /* child -- stdin already setup, set stdout to pipe input */
+ if (pdes[1] != STDOUT_FILENO) {
+ (void)dup2(pdes[1], STDOUT_FILENO);
+ (void)close(pdes[1]);
+ }
+ (void)close(pdes[0]);
+ uid = geteuid();
+ if (setuid(getuid()) < 0) {
+ warnx("first setuid failed");
+ _exit(1);
+ };
+ if (setgid(getegid()) < 0) {
+ warnx("setgid failed");
+ _exit(1);
+ }
+ if (setuid(uid) < 0) {
+ warnx("setuid failed");
+ _exit(1);
+ }
+ execl(_PATH_CPP, "cpp", "-w", "-P",
+ "-traditional", "-nostdinc", /* GCC specific opts */
+ "-I.", "-I" _PATH_INCLUDE, (char *)NULL);
+ warn(_PATH_CPP);
+ _exit(1);
+ }
+ /* parent -- set stdin to pipe output */
+ (void)dup2(pdes[0], STDIN_FILENO);
+ (void)close(pdes[0]);
+ (void)close(pdes[1]);
+
+ /* not reading all calendar files, just set output to stdout */
+ if (!doall)
+ return (stdout);
+
+ /* set output to a temporary file, so if no output don't send mail */
+ (void)snprintf(path, sizeof(path), "%s/_calXXXXXX", _PATH_TMP);
+ if ((fd = mkstemp(path)) < 0)
+ return (NULL);
+ return (fdopen(fd, "w+"));
+}
+
+void
+closecal(FILE *fp)
+{
+ uid_t uid;
+ struct stat sbuf;
+ int nread, pdes[2], status;
+ char buf[1024];
+
+ if (!doall)
+ return;
+
+ (void)rewind(fp);
+ if (fstat(fileno(fp), &sbuf) || !sbuf.st_size)
+ goto done;
+ if (pipe(pdes) < 0)
+ goto done;
+ switch (fork()) {
+ case -1: /* error */
+ (void)close(pdes[0]);
+ (void)close(pdes[1]);
+ goto done;
+ case 0:
+ /* child -- set stdin to pipe output */
+ if (pdes[0] != STDIN_FILENO) {
+ (void)dup2(pdes[0], STDIN_FILENO);
+ (void)close(pdes[0]);
+ }
+ (void)close(pdes[1]);
+ uid = geteuid();
+ if (setuid(getuid()) < 0) {
+ warnx("setuid failed");
+ _exit(1);
+ };
+ if (setgid(getegid()) < 0) {
+ warnx("setgid failed");
+ _exit(1);
+ }
+ if (setuid(uid) < 0) {
+ warnx("setuid failed");
+ _exit(1);
+ }
+ execl(_PATH_SENDMAIL, "sendmail", "-i", "-t", "-F",
+ "\"Reminder Service\"", (char *)NULL);
+ warn(_PATH_SENDMAIL);
+ _exit(1);
+ }
+ /* parent -- write to pipe input */
+ (void)close(pdes[0]);
+
+ header[1].iov_base = header[3].iov_base = pw->pw_name;
+ header[1].iov_len = header[3].iov_len = strlen(pw->pw_name);
+ writev(pdes[1], header, 7);
+ while ((nread = read(fileno(fp), buf, sizeof(buf))) > 0)
+ (void)write(pdes[1], buf, nread);
+ (void)close(pdes[1]);
+done: (void)fclose(fp);
+ (void)unlink(path);
+ while (wait(&status) >= 0);
+}
diff --git a/misc_cmds/calendar/ostern.c b/misc_cmds/calendar/ostern.c
new file mode 100644
index 0000000..0f9d17e
--- /dev/null
+++ b/misc_cmds/calendar/ostern.c
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 1996 Wolfram Schneider <wosch@FreeBSD.org>. Berlin.
+ * 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 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 AUTHOR 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/cdefs.h>
+__FBSDID("$FreeBSD: src/usr.bin/calendar/ostern.c,v 1.12 2007/05/07 11:18:30 dwmalone Exp $");
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#include "calendar.h"
+
+/* return year day for Easter */
+
+/*
+ * This code is based on the Calendar FAQ's code for how to calculate
+ * easter is. This is the Gregorian calendar version. They refer to
+ * the Algorithm of Oudin in the "Explanatory Supplement to the
+ * Astronomical Almanac".
+ */
+
+int
+easter(int year) /* 0 ... abcd, NOT since 1900 */
+{
+ int G, /* Golden number - 1 */
+ C, /* Century */
+ H, /* 23 - epact % 30 */
+ I, /* days from 21 March to Paschal full moon */
+ J, /* weekday of full moon */
+ L; /* days from 21 March to Sunday on of before full moon */
+
+ G = year % 19;
+ C = year / 100;
+ H = (C - C/4 - (8*C+13)/25 + 19*G + 15) % 30;
+ I = H - (H/28)*(1 - (H/28)*(29/(H + 1))*((21 - G)/11));
+ J = (year + year/4 + I + 2 - C + C/4) % 7;
+
+ L = I - J;
+
+ if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
+ return 31 + 29 + 21 + L + 7;
+ else
+ return 31 + 28 + 21 + L + 7;
+}
+
+/* return year day for Easter or easter depending days
+ * Match: Easter([+-][0-9]+)?
+ * e.g: Easter-2 is Good Friday (2 days before Easter)
+ */
+
+int
+geteaster(char *s, int year)
+{
+ int offset = 0;
+
+#define EASTER "easter"
+#define EASTERNAMELEN (sizeof(EASTER) - 1)
+
+ if (strncasecmp(s, EASTER, EASTERNAMELEN) == 0)
+ s += EASTERNAMELEN;
+ else if ( neaster.name != NULL
+ && strncasecmp(s, neaster.name, neaster.len) == 0
+ )
+ s += neaster.len;
+ else
+ return(0);
+
+#if DEBUG
+ printf("%s %d %d\n", s, year, EASTERNAMELEN);
+#endif
+
+ /* Easter+1 or Easter-2
+ * ^ ^ */
+
+ switch(*s) {
+
+ case '-':
+ case '+':
+ offset = atoi(s);
+ break;
+
+ default:
+ offset = 0;
+ }
+
+ return (easter(year) + offset);
+}
diff --git a/misc_cmds/calendar/paskha.c b/misc_cmds/calendar/paskha.c
new file mode 100644
index 0000000..8193fb3
--- /dev/null
+++ b/misc_cmds/calendar/paskha.c
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 1993-1996 by Andrey 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/cdefs.h>
+__FBSDID("$FreeBSD: src/usr.bin/calendar/paskha.c,v 1.8 2007/05/07 11:18:30 dwmalone Exp $");
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#include "calendar.h"
+
+#define PASKHA "paskha"
+#define PASKHALEN (sizeof(PASKHA) - 1)
+
+static int paskha (int);
+
+/* return year day for Orthodox Easter using Gauss formula */
+/* (old style result) */
+
+static int
+paskha(int R) /*year*/
+{
+ int a, b, c, d, e;
+ static int x = 15;
+ static int y = 6;
+
+ a = R % 19;
+ b = R % 4;
+ c = R % 7;
+ d = (19*a + x) % 30;
+ e = (2*b + 4*c + 6*d + y) % 7;
+ return (((cumdays[3] + 1) + 22) + (d + e));
+}
+
+/* return year day for Orthodox Easter depending days */
+
+int
+getpaskha(char *s, int year)
+{
+ int offset;
+
+ if (strncasecmp(s, PASKHA, PASKHALEN) == 0)
+ s += PASKHALEN;
+ else if ( npaskha.name != NULL
+ && strncasecmp(s, npaskha.name, npaskha.len) == 0
+ )
+ s += npaskha.len;
+ else
+ return 0;
+
+
+ /* Paskha+1 or Paskha-2
+ * ^ ^ */
+
+ switch(*s) {
+
+ case '-':
+ case '+':
+ offset = atoi(s);
+ break;
+
+ default:
+ offset = 0;
+ break;
+ }
+
+ return (paskha(year) + offset + 13/* new style */);
+}
diff --git a/misc_cmds/calendar/pathnames.h b/misc_cmds/calendar/pathnames.h
new file mode 100644
index 0000000..85913f5
--- /dev/null
+++ b/misc_cmds/calendar/pathnames.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 1989, 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.
+ *
+ * @(#)pathnames.h 8.1 (Berkeley) 6/6/93
+ * $FreeBSD: src/usr.bin/calendar/pathnames.h,v 1.4 2001/01/13 01:33:59 ache Exp $
+ */
+
+#include <paths.h>
+
+#define _PATH_CPP "/usr/bin/cpp"
+#define _PATH_INCLUDE "/usr/share/calendar"
diff --git a/misc_cmds/leave/leave.1 b/misc_cmds/leave/leave.1
new file mode 100644
index 0000000..ada7c3f
--- /dev/null
+++ b/misc_cmds/leave/leave.1
@@ -0,0 +1,100 @@
+.\" Copyright (c) 1980, 1990, 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.
+.\"
+.\" @(#)leave.1 8.3 (Berkeley) 4/28/95
+.\" $FreeBSD: src/usr.bin/leave/leave.1,v 1.10 2002/12/23 16:04:51 ru Exp $
+.\"
+.Dd April 28, 1995
+.Dt LEAVE 1
+.Os
+.Sh NAME
+.Nm leave
+.Nd remind you when you have to leave
+.Sh SYNOPSIS
+.Nm
+.Op Oo Cm \&+ Oc Ns Ar hhmm
+.Sh DESCRIPTION
+The
+.Nm
+utility waits until the specified time, then reminds you that you
+have to leave.
+You are reminded 5 minutes and 1 minute before the actual
+time, at the time, and every minute thereafter.
+When you log off,
+.Nm
+exits just before it would have
+printed the next message.
+.Pp
+The following options are available:
+.Bl -tag -width indent
+.It Ar hhmm
+The time of day is in the form
+.Ar hhmm
+where
+.Ar hh
+is a time in
+hours (on a 12 or 24 hour clock), and
+.Ar mm
+are minutes.
+All times are converted to a 12 hour clock, and assumed to
+be in the next 12 hours.
+.It Cm \&+
+If the time is preceded by
+.Sq Cm \&+ ,
+the alarm will go off in hours and minutes
+from the current time.
+.El
+.Pp
+If no argument is given,
+.Nm
+prompts with "When do you
+have to leave?".
+A reply of newline causes
+.Nm
+to exit,
+otherwise the reply is assumed to be a time.
+This form is suitable for inclusion in a
+.Pa .login
+or
+.Pa .profile .
+.Pp
+To get rid of
+.Nm
+you should either log off or use
+.Ql kill \-s KILL
+giving its process id.
+.Sh SEE ALSO
+.Xr calendar 1
+.Sh HISTORY
+The
+.Nm
+command appeared in
+.Bx 3.0 .
diff --git a/misc_cmds/leave/leave.c b/misc_cmds/leave/leave.c
new file mode 100644
index 0000000..c1db136
--- /dev/null
+++ b/misc_cmds/leave/leave.c
@@ -0,0 +1,196 @@
+/*
+ * Copyright (c) 1980, 1988, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+static const char copyright[] =
+"@(#) Copyright (c) 1980, 1988, 1993\n\
+ The Regents of the University of California. All rights reserved.\n";
+#endif /* not lint */
+
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)leave.c 8.1 (Berkeley) 6/6/93";
+#endif
+#endif /* not lint */
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: src/usr.bin/leave/leave.c,v 1.12 2002/09/04 23:29:03 dwmalone Exp $");
+
+#include <err.h>
+#include <ctype.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+
+void doalarm(u_int);
+static void usage(void);
+
+/*
+ * leave [[+]hhmm]
+ *
+ * Reminds you when you have to leave.
+ * Leave prompts for input and goes away if you hit return.
+ * It nags you like a mother hen.
+ */
+int
+main(int argc, char **argv)
+{
+ u_int secs;
+ int hours, minutes;
+ char c, *cp = NULL;
+ struct tm *t;
+ time_t now;
+ int plusnow, t_12_hour;
+ char buf[50];
+
+ if (setlocale(LC_TIME, "") == NULL)
+ warn("setlocale");
+
+ if (argc < 2) {
+#define MSG1 "When do you have to leave? "
+ (void)write(STDOUT_FILENO, MSG1, sizeof(MSG1) - 1);
+ cp = fgets(buf, sizeof(buf), stdin);
+ if (cp == NULL || *cp == '\n')
+ exit(0);
+ } else if (argc > 2)
+ usage();
+ else
+ cp = argv[1];
+
+ if (*cp == '+') {
+ plusnow = 1;
+ ++cp;
+ } else
+ plusnow = 0;
+
+ for (hours = 0; (c = *cp) && c != '\n'; ++cp) {
+ if (!isdigit(c))
+ usage();
+ hours = hours * 10 + (c - '0');
+ }
+ minutes = hours % 100;
+ hours /= 100;
+
+ if (minutes < 0 || minutes > 59)
+ usage();
+ if (plusnow)
+ secs = hours * 60 * 60 + minutes * 60;
+ else {
+ (void)time(&now);
+ t = localtime(&now);
+
+ if (hours > 23)
+ usage();
+
+ /* Convert tol to 12 hr time (0:00...11:59) */
+ if (hours > 11)
+ hours -= 12;
+
+ /* Convert tm to 12 hr time (0:00...11:59) */
+ if (t->tm_hour > 11)
+ t_12_hour = t->tm_hour - 12;
+ else
+ t_12_hour = t->tm_hour;
+
+ if (hours < t_12_hour ||
+ (hours == t_12_hour && minutes <= t->tm_min))
+ /* Leave time is in the past so we add 12 hrs */
+ hours += 12;
+
+ secs = (hours - t_12_hour) * 60 * 60;
+ secs += (minutes - t->tm_min) * 60;
+ secs -= now % 60; /* truncate (now + secs) to min */
+ }
+ doalarm(secs);
+ exit(0);
+}
+
+void
+doalarm(u_int secs)
+{
+ int bother;
+ time_t daytime;
+ char tb[80];
+ int pid;
+
+ if ((pid = fork())) {
+ (void)time(&daytime);
+ daytime += secs;
+ strftime(tb, sizeof(tb), "%+", localtime(&daytime));
+ printf("Alarm set for %s. (pid %d)\n", tb, pid);
+ exit(0);
+ }
+ sleep((u_int)2); /* let parent print set message */
+ if (secs >= 2)
+ secs -= 2;
+
+ /*
+ * if write fails, we've lost the terminal through someone else
+ * causing a vhangup by logging in.
+ */
+#define FIVEMIN (5 * 60)
+#define MSG2 "\07\07You have to leave in 5 minutes.\n"
+ if (secs >= FIVEMIN) {
+ sleep(secs - FIVEMIN);
+ if (write(STDOUT_FILENO, MSG2, sizeof(MSG2) - 1) != sizeof(MSG2) - 1)
+ exit(0);
+ secs = FIVEMIN;
+ }
+
+#define ONEMIN (60)
+#define MSG3 "\07\07Just one more minute!\n"
+ if (secs >= ONEMIN) {
+ sleep(secs - ONEMIN);
+ if (write(STDOUT_FILENO, MSG3, sizeof(MSG3) - 1) != sizeof(MSG3) - 1)
+ exit(0);
+ }
+
+#define MSG4 "\07\07Time to leave!\n"
+ for (bother = 10; bother--;) {
+ sleep((u_int)ONEMIN);
+ if (write(STDOUT_FILENO, MSG4, sizeof(MSG4) - 1) != sizeof(MSG4) - 1)
+ exit(0);
+ }
+
+#define MSG5 "\07\07That was the last time I'll tell you. Bye.\n"
+ (void)write(STDOUT_FILENO, MSG5, sizeof(MSG5) - 1);
+ exit(0);
+}
+
+static void
+usage(void)
+{
+ fprintf(stderr, "usage: leave [[+]hhmm]\n");
+ exit(1);
+}
diff --git a/misc_cmds/misc_cmds.xcodeproj/project.pbxproj b/misc_cmds/misc_cmds.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..7d5a051
--- /dev/null
+++ b/misc_cmds/misc_cmds.xcodeproj/project.pbxproj
@@ -0,0 +1,971 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 45;
+ objects = {
+
+/* Begin PBXAggregateTarget section */
+ 723CE9B30FC36FAF00064057 /* Build All */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = 723CE9C10FC36FEB00064057 /* Build configuration list for PBXAggregateTarget "Build All" */;
+ buildPhases = (
+ );
+ dependencies = (
+ 723CE9BE0FC36FC600064057 /* PBXTargetDependency */,
+ 723CE9BC0FC36FC600064057 /* PBXTargetDependency */,
+ 723CE9BA0FC36FC600064057 /* PBXTargetDependency */,
+ 723CE9B80FC36FC600064057 /* PBXTargetDependency */,
+ 53D2642B112DD86900FFBD9F /* PBXTargetDependency */,
+ 723CE9B60FC36FC600064057 /* PBXTargetDependency */,
+ );
+ name = "Build All";
+ productName = "Build All";
+ };
+/* End PBXAggregateTarget section */
+
+/* Begin PBXBuildFile section */
+ 3E59B92E1D4939A700D3128C /* libncurses.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E59B92D1D4939A700D3128C /* libncurses.dylib */; };
+ 3E59B92F1D4939B000D3128C /* libncurses.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E59B92D1D4939A700D3128C /* libncurses.dylib */; };
+ 53D2641F112DD84700FFBD9F /* calendar.c in Sources */ = {isa = PBXBuildFile; fileRef = 723CE9040FC34BFF00064057 /* calendar.c */; };
+ 53D26420112DD84700FFBD9F /* easter.c in Sources */ = {isa = PBXBuildFile; fileRef = 723CE9060FC34BFF00064057 /* easter.c */; };
+ 53D26421112DD84700FFBD9F /* ncal.c in Sources */ = {isa = PBXBuildFile; fileRef = 723CE9080FC34BFF00064057 /* ncal.c */; settings = {COMPILER_FLAGS = "-I$(SRCROOT)/ncal"; }; };
+ 723CE8750FC3450300064057 /* leave.c in Sources */ = {isa = PBXBuildFile; fileRef = 723CE8590FC3436900064057 /* leave.c */; settings = {COMPILER_FLAGS = "-D__FBSDID=__RCSID -include stdint.h -Du_int=uint32_t"; }; };
+ 723CE8870FC3453000064057 /* leave.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = 723CE8580FC3436900064057 /* leave.1 */; };
+ 723CE8B90FC3478800064057 /* tsort.c in Sources */ = {isa = PBXBuildFile; fileRef = 723CE89D0FC346BA00064057 /* tsort.c */; };
+ 723CE8BB0FC347A300064057 /* tsort.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = 723CE89C0FC346BA00064057 /* tsort.1 */; };
+ 723CE8D20FC3488100064057 /* units.c in Sources */ = {isa = PBXBuildFile; fileRef = 723CE8CA0FC3486000064057 /* units.c */; };
+ 723CE8D60FC348D700064057 /* units.1 in Copy manpage */ = {isa = PBXBuildFile; fileRef = 723CE8CB0FC3486D00064057 /* units.1 */; };
+ 723CE8EB0FC34A0B00064057 /* units.lib in Copy Unit Files */ = {isa = PBXBuildFile; fileRef = 723CE8E90FC349ED00064057 /* units.lib */; };
+ 723CE90C0FC34C1A00064057 /* calendar.c in Sources */ = {isa = PBXBuildFile; fileRef = 723CE9040FC34BFF00064057 /* calendar.c */; };
+ 723CE90E0FC34C1A00064057 /* easter.c in Sources */ = {isa = PBXBuildFile; fileRef = 723CE9060FC34BFF00064057 /* easter.c */; };
+ 723CE90F0FC34C1A00064057 /* ncal.c in Sources */ = {isa = PBXBuildFile; fileRef = 723CE9080FC34BFF00064057 /* ncal.c */; settings = {COMPILER_FLAGS = "-I$(SRCROOT)/ncal"; }; };
+ 723CE9130FC34C5400064057 /* ncal.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = 723CE9070FC34BFF00064057 /* ncal.1 */; };
+ 723CE9600FC350FF00064057 /* calendar.c in Sources */ = {isa = PBXBuildFile; fileRef = 723CE9590FC350FF00064057 /* calendar.c */; };
+ 723CE9610FC350FF00064057 /* day.c in Sources */ = {isa = PBXBuildFile; fileRef = 723CE95B0FC350FF00064057 /* day.c */; };
+ 723CE9620FC350FF00064057 /* io.c in Sources */ = {isa = PBXBuildFile; fileRef = 723CE95C0FC350FF00064057 /* io.c */; };
+ 723CE9630FC350FF00064057 /* ostern.c in Sources */ = {isa = PBXBuildFile; fileRef = 723CE95D0FC350FF00064057 /* ostern.c */; };
+ 723CE9640FC350FF00064057 /* paskha.c in Sources */ = {isa = PBXBuildFile; fileRef = 723CE95E0FC350FF00064057 /* paskha.c */; };
+ 723CE9C70FC3792900064057 /* calendar.1 in Copy manpage */ = {isa = PBXBuildFile; fileRef = 723CE9C30FC378FD00064057 /* calendar.1 */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 53D2642A112DD86900FFBD9F /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 723CE84B0FC342D200064057 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 53D2641D112DD84700FFBD9F;
+ remoteInfo = cal;
+ };
+ 723CE9B50FC36FC600064057 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 723CE84B0FC342D200064057 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 723CE94A0FC3505500064057;
+ remoteInfo = calendar;
+ };
+ 723CE9B70FC36FC600064057 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 723CE84B0FC342D200064057 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 723CE8F20FC34BD300064057;
+ remoteInfo = ncal;
+ };
+ 723CE9B90FC36FC600064057 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 723CE84B0FC342D200064057 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 723CE8CE0FC3487200064057;
+ remoteInfo = units;
+ };
+ 723CE9BB0FC36FC600064057 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 723CE84B0FC342D200064057 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 723CE8B40FC3476900064057;
+ remoteInfo = tsort;
+ };
+ 723CE9BD0FC36FC600064057 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 723CE84B0FC342D200064057 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 723CE85C0FC3437B00064057;
+ remoteInfo = leave;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 723CE8880FC3454E00064057 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ 723CE8870FC3453000064057 /* leave.1 in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 723CE8C20FC347C600064057 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ 723CE8BB0FC347A300064057 /* tsort.1 in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 723CE8D40FC348B200064057 /* Copy manpage */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ 723CE8D60FC348D700064057 /* units.1 in Copy manpage */,
+ );
+ name = "Copy manpage";
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 723CE8E20FC3496B00064057 /* Copy Unit Files */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstPath = /usr/share/misc/;
+ dstSubfolderSpec = 0;
+ files = (
+ 723CE8EB0FC34A0B00064057 /* units.lib in Copy Unit Files */,
+ );
+ name = "Copy Unit Files";
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 723CE91D0FC34C9600064057 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstPath = /usr/share/man/man1;
+ dstSubfolderSpec = 0;
+ files = (
+ 723CE9130FC34C5400064057 /* ncal.1 in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 723CE9DA0FC379A200064057 /* Copy manpage */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ 723CE9C70FC3792900064057 /* calendar.1 in Copy manpage */,
+ );
+ name = "Copy manpage";
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 3E59B92D1D4939A700D3128C /* libncurses.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libncurses.dylib; path = usr/lib/libncurses.dylib; sourceTree = SDKROOT; };
+ 53D26428112DD84700FFBD9F /* cal */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = cal; sourceTree = BUILT_PRODUCTS_DIR; };
+ 723CE8580FC3436900064057 /* leave.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = leave.1; sourceTree = "<group>"; };
+ 723CE8590FC3436900064057 /* leave.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = leave.c; sourceTree = "<group>"; };
+ 723CE85D0FC3437B00064057 /* leave */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = leave; sourceTree = BUILT_PRODUCTS_DIR; };
+ 723CE89C0FC346BA00064057 /* tsort.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = tsort.1; sourceTree = "<group>"; };
+ 723CE89D0FC346BA00064057 /* tsort.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tsort.c; sourceTree = "<group>"; };
+ 723CE8B50FC3476900064057 /* tsort */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = tsort; sourceTree = BUILT_PRODUCTS_DIR; };
+ 723CE8CA0FC3486000064057 /* units.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = units.c; sourceTree = "<group>"; };
+ 723CE8CB0FC3486D00064057 /* units.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = units.1; sourceTree = "<group>"; };
+ 723CE8CF0FC3487200064057 /* units */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = units; sourceTree = BUILT_PRODUCTS_DIR; };
+ 723CE8DD0FC3491B00064057 /* pathnames.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pathnames.h; sourceTree = "<group>"; };
+ 723CE8E90FC349ED00064057 /* units.lib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = units.lib; sourceTree = "<group>"; };
+ 723CE8EA0FC34A0600064057 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
+ 723CE8F30FC34BD300064057 /* ncal */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ncal; sourceTree = BUILT_PRODUCTS_DIR; };
+ 723CE9040FC34BFF00064057 /* calendar.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = calendar.c; sourceTree = "<group>"; };
+ 723CE9050FC34BFF00064057 /* calendar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = calendar.h; sourceTree = "<group>"; };
+ 723CE9060FC34BFF00064057 /* easter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = easter.c; sourceTree = "<group>"; };
+ 723CE9070FC34BFF00064057 /* ncal.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = ncal.1; sourceTree = "<group>"; };
+ 723CE9080FC34BFF00064057 /* ncal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ncal.c; sourceTree = "<group>"; };
+ 723CE94B0FC3505500064057 /* calendar */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = calendar; sourceTree = BUILT_PRODUCTS_DIR; };
+ 723CE9590FC350FF00064057 /* calendar.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = calendar.c; sourceTree = "<group>"; };
+ 723CE95A0FC350FF00064057 /* calendar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = calendar.h; sourceTree = "<group>"; };
+ 723CE95B0FC350FF00064057 /* day.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = day.c; sourceTree = "<group>"; };
+ 723CE95C0FC350FF00064057 /* io.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = io.c; sourceTree = "<group>"; };
+ 723CE95D0FC350FF00064057 /* ostern.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ostern.c; sourceTree = "<group>"; };
+ 723CE95E0FC350FF00064057 /* paskha.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = paskha.c; sourceTree = "<group>"; };
+ 723CE95F0FC350FF00064057 /* pathnames.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pathnames.h; sourceTree = "<group>"; };
+ 723CE96A0FC36C6400064057 /* calendar.all */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.all; sourceTree = "<group>"; };
+ 723CE96B0FC36C6400064057 /* calendar.australia */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.australia; sourceTree = "<group>"; };
+ 723CE96C0FC36C6400064057 /* calendar.birthday */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.birthday; sourceTree = "<group>"; };
+ 723CE96D0FC36C6400064057 /* calendar.christian */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.christian; sourceTree = "<group>"; };
+ 723CE96E0FC36C6400064057 /* calendar.computer */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.computer; sourceTree = "<group>"; };
+ 723CE96F0FC36C6400064057 /* calendar.croatian */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.croatian; sourceTree = "<group>"; };
+ 723CE9700FC36C6400064057 /* calendar.dutch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.dutch; sourceTree = "<group>"; };
+ 723CE9710FC36C6400064057 /* calendar.freebsd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.freebsd; sourceTree = "<group>"; };
+ 723CE9720FC36C6400064057 /* calendar.french */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.french; sourceTree = "<group>"; };
+ 723CE9730FC36C6400064057 /* calendar.german */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.german; sourceTree = "<group>"; };
+ 723CE9740FC36C6400064057 /* calendar.history */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.history; sourceTree = "<group>"; };
+ 723CE9750FC36C6400064057 /* calendar.holiday */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.holiday; sourceTree = "<group>"; };
+ 723CE9760FC36C6400064057 /* calendar.hungarian */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.hungarian; sourceTree = "<group>"; };
+ 723CE9770FC36C6400064057 /* calendar.judaic */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.judaic; sourceTree = "<group>"; };
+ 723CE9780FC36C6400064057 /* calendar.lotr */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.lotr; sourceTree = "<group>"; };
+ 723CE9790FC36C6400064057 /* calendar.music */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.music; sourceTree = "<group>"; };
+ 723CE97A0FC36C6400064057 /* calendar.newzealand */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.newzealand; sourceTree = "<group>"; };
+ 723CE97B0FC36C6400064057 /* calendar.russian */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.russian; sourceTree = "<group>"; };
+ 723CE97C0FC36C6400064057 /* calendar.southafrica */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.southafrica; sourceTree = "<group>"; };
+ 723CE97D0FC36C6400064057 /* calendar.ukrainian */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.ukrainian; sourceTree = "<group>"; };
+ 723CE97E0FC36C6400064057 /* calendar.usholiday */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.usholiday; sourceTree = "<group>"; };
+ 723CE97F0FC36C6400064057 /* calendar.world */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.world; sourceTree = "<group>"; };
+ 723CE9810FC36C6400064057 /* calendar.feiertag */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.feiertag; sourceTree = "<group>"; };
+ 723CE9830FC36C6400064057 /* calendar.all */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.all; sourceTree = "<group>"; };
+ 723CE9840FC36C6400064057 /* calendar.feiertag */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.feiertag; sourceTree = "<group>"; };
+ 723CE9850FC36C6400064057 /* calendar.geschichte */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.geschichte; sourceTree = "<group>"; };
+ 723CE9860FC36C6400064057 /* calendar.kirche */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.kirche; sourceTree = "<group>"; };
+ 723CE9870FC36C6400064057 /* calendar.literatur */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.literatur; sourceTree = "<group>"; };
+ 723CE9880FC36C6400064057 /* calendar.musik */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.musik; sourceTree = "<group>"; };
+ 723CE9890FC36C6400064057 /* calendar.wissenschaft */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.wissenschaft; sourceTree = "<group>"; };
+ 723CE98B0FC36C6400064057 /* calendar.all */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.all; sourceTree = "<group>"; };
+ 723CE98C0FC36C6400064057 /* calendar.fetes */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.fetes; sourceTree = "<group>"; };
+ 723CE98D0FC36C6400064057 /* calendar.french */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.french; sourceTree = "<group>"; };
+ 723CE98E0FC36C6400064057 /* calendar.jferies */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.jferies; sourceTree = "<group>"; };
+ 723CE98F0FC36C6400064057 /* calendar.proverbes */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.proverbes; sourceTree = "<group>"; };
+ 723CE9910FC36C6400064057 /* calendar.all */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.all; sourceTree = "<group>"; };
+ 723CE9920FC36C6400064057 /* calendar.praznici */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.praznici; sourceTree = "<group>"; };
+ 723CE9940FC36C6400064057 /* calendar.all */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.all; sourceTree = "<group>"; };
+ 723CE9950FC36C6400064057 /* calendar.nevnapok */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.nevnapok; sourceTree = "<group>"; };
+ 723CE9960FC36C6400064057 /* calendar.unnepek */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.unnepek; sourceTree = "<group>"; };
+ 723CE9980FC36C6400064057 /* calendar.all */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.all; sourceTree = "<group>"; };
+ 723CE9990FC36C6400064057 /* calendar.common */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.common; sourceTree = "<group>"; };
+ 723CE99A0FC36C6400064057 /* calendar.holiday */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.holiday; sourceTree = "<group>"; };
+ 723CE99B0FC36C6400064057 /* calendar.military */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.military; sourceTree = "<group>"; };
+ 723CE99C0FC36C6400064057 /* calendar.msk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.msk; sourceTree = "<group>"; };
+ 723CE99D0FC36C6400064057 /* calendar.orthodox */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.orthodox; sourceTree = "<group>"; };
+ 723CE99E0FC36C6400064057 /* calendar.pagan */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.pagan; sourceTree = "<group>"; };
+ 723CE9A00FC36C6400064057 /* calendar.all */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.all; sourceTree = "<group>"; };
+ 723CE9A10FC36C6400064057 /* calendar.holiday */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.holiday; sourceTree = "<group>"; };
+ 723CE9A20FC36C6400064057 /* calendar.misc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.misc; sourceTree = "<group>"; };
+ 723CE9A30FC36C6400064057 /* calendar.orthodox */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = calendar.orthodox; sourceTree = "<group>"; };
+ 723CE9C30FC378FD00064057 /* calendar.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = calendar.1; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 53D26422112DD84700FFBD9F /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 3E59B92E1D4939A700D3128C /* libncurses.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 723CE85B0FC3437B00064057 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 723CE8B30FC3476900064057 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 723CE8CD0FC3487200064057 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 723CE8F10FC34BD300064057 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 3E59B92F1D4939B000D3128C /* libncurses.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 723CE9490FC3505500064057 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 3E59B92C1D4939A700D3128C /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 3E59B92D1D4939A700D3128C /* libncurses.dylib */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+ 723CE8490FC342D200064057 = {
+ isa = PBXGroup;
+ children = (
+ 723CE8530FC3432200064057 /* Source */,
+ 723CE85E0FC3437B00064057 /* Products */,
+ 3E59B92C1D4939A700D3128C /* Frameworks */,
+ );
+ sourceTree = "<group>";
+ };
+ 723CE8530FC3432200064057 /* Source */ = {
+ isa = PBXGroup;
+ children = (
+ 723CE94F0FC3509E00064057 /* calendar */,
+ 723CE8F60FC34BE400064057 /* ncal */,
+ 723CE8C30FC3481100064057 /* units */,
+ 723CE8540FC3432D00064057 /* leave */,
+ 723CE8970FC3469A00064057 /* tsort */,
+ );
+ name = Source;
+ sourceTree = "<group>";
+ };
+ 723CE8540FC3432D00064057 /* leave */ = {
+ isa = PBXGroup;
+ children = (
+ 723CE8580FC3436900064057 /* leave.1 */,
+ 723CE8590FC3436900064057 /* leave.c */,
+ );
+ path = leave;
+ sourceTree = "<group>";
+ };
+ 723CE85E0FC3437B00064057 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 723CE85D0FC3437B00064057 /* leave */,
+ 723CE8B50FC3476900064057 /* tsort */,
+ 723CE8CF0FC3487200064057 /* units */,
+ 723CE8F30FC34BD300064057 /* ncal */,
+ 723CE94B0FC3505500064057 /* calendar */,
+ 53D26428112DD84700FFBD9F /* cal */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 723CE8970FC3469A00064057 /* tsort */ = {
+ isa = PBXGroup;
+ children = (
+ 723CE89C0FC346BA00064057 /* tsort.1 */,
+ 723CE89D0FC346BA00064057 /* tsort.c */,
+ );
+ path = tsort;
+ sourceTree = "<group>";
+ };
+ 723CE8C30FC3481100064057 /* units */ = {
+ isa = PBXGroup;
+ children = (
+ 723CE8EA0FC34A0600064057 /* README */,
+ 723CE8E90FC349ED00064057 /* units.lib */,
+ 723CE8DD0FC3491B00064057 /* pathnames.h */,
+ 723CE8CA0FC3486000064057 /* units.c */,
+ 723CE8CB0FC3486D00064057 /* units.1 */,
+ );
+ path = units;
+ sourceTree = "<group>";
+ };
+ 723CE8F60FC34BE400064057 /* ncal */ = {
+ isa = PBXGroup;
+ children = (
+ 723CE9040FC34BFF00064057 /* calendar.c */,
+ 723CE9050FC34BFF00064057 /* calendar.h */,
+ 723CE9060FC34BFF00064057 /* easter.c */,
+ 723CE9070FC34BFF00064057 /* ncal.1 */,
+ 723CE9080FC34BFF00064057 /* ncal.c */,
+ );
+ path = ncal;
+ sourceTree = "<group>";
+ };
+ 723CE94F0FC3509E00064057 /* calendar */ = {
+ isa = PBXGroup;
+ children = (
+ 723CE9C30FC378FD00064057 /* calendar.1 */,
+ 723CE9690FC36C6400064057 /* calendars */,
+ 723CE9590FC350FF00064057 /* calendar.c */,
+ 723CE95A0FC350FF00064057 /* calendar.h */,
+ 723CE95B0FC350FF00064057 /* day.c */,
+ 723CE95C0FC350FF00064057 /* io.c */,
+ 723CE95D0FC350FF00064057 /* ostern.c */,
+ 723CE95E0FC350FF00064057 /* paskha.c */,
+ 723CE95F0FC350FF00064057 /* pathnames.h */,
+ );
+ path = calendar;
+ sourceTree = "<group>";
+ };
+ 723CE9690FC36C6400064057 /* calendars */ = {
+ isa = PBXGroup;
+ children = (
+ 723CE96A0FC36C6400064057 /* calendar.all */,
+ 723CE96B0FC36C6400064057 /* calendar.australia */,
+ 723CE96C0FC36C6400064057 /* calendar.birthday */,
+ 723CE96D0FC36C6400064057 /* calendar.christian */,
+ 723CE96E0FC36C6400064057 /* calendar.computer */,
+ 723CE96F0FC36C6400064057 /* calendar.croatian */,
+ 723CE9700FC36C6400064057 /* calendar.dutch */,
+ 723CE9710FC36C6400064057 /* calendar.freebsd */,
+ 723CE9720FC36C6400064057 /* calendar.french */,
+ 723CE9730FC36C6400064057 /* calendar.german */,
+ 723CE9740FC36C6400064057 /* calendar.history */,
+ 723CE9750FC36C6400064057 /* calendar.holiday */,
+ 723CE9760FC36C6400064057 /* calendar.hungarian */,
+ 723CE9770FC36C6400064057 /* calendar.judaic */,
+ 723CE9780FC36C6400064057 /* calendar.lotr */,
+ 723CE9790FC36C6400064057 /* calendar.music */,
+ 723CE97A0FC36C6400064057 /* calendar.newzealand */,
+ 723CE97B0FC36C6400064057 /* calendar.russian */,
+ 723CE97C0FC36C6400064057 /* calendar.southafrica */,
+ 723CE97D0FC36C6400064057 /* calendar.ukrainian */,
+ 723CE97E0FC36C6400064057 /* calendar.usholiday */,
+ 723CE97F0FC36C6400064057 /* calendar.world */,
+ 723CE9800FC36C6400064057 /* de_AT.ISO_8859-15 */,
+ 723CE9820FC36C6400064057 /* de_DE.ISO8859-1 */,
+ 723CE98A0FC36C6400064057 /* fr_FR.ISO8859-1 */,
+ 723CE9900FC36C6400064057 /* hr_HR.ISO8859-2 */,
+ 723CE9930FC36C6400064057 /* hu_HU.ISO8859-2 */,
+ 723CE9970FC36C6400064057 /* ru_RU.KOI8-R */,
+ 723CE99F0FC36C6400064057 /* uk_UA.KOI8-U */,
+ );
+ path = calendars;
+ sourceTree = "<group>";
+ };
+ 723CE9800FC36C6400064057 /* de_AT.ISO_8859-15 */ = {
+ isa = PBXGroup;
+ children = (
+ 723CE9810FC36C6400064057 /* calendar.feiertag */,
+ );
+ path = "de_AT.ISO_8859-15";
+ sourceTree = "<group>";
+ };
+ 723CE9820FC36C6400064057 /* de_DE.ISO8859-1 */ = {
+ isa = PBXGroup;
+ children = (
+ 723CE9830FC36C6400064057 /* calendar.all */,
+ 723CE9840FC36C6400064057 /* calendar.feiertag */,
+ 723CE9850FC36C6400064057 /* calendar.geschichte */,
+ 723CE9860FC36C6400064057 /* calendar.kirche */,
+ 723CE9870FC36C6400064057 /* calendar.literatur */,
+ 723CE9880FC36C6400064057 /* calendar.musik */,
+ 723CE9890FC36C6400064057 /* calendar.wissenschaft */,
+ );
+ path = "de_DE.ISO8859-1";
+ sourceTree = "<group>";
+ };
+ 723CE98A0FC36C6400064057 /* fr_FR.ISO8859-1 */ = {
+ isa = PBXGroup;
+ children = (
+ 723CE98B0FC36C6400064057 /* calendar.all */,
+ 723CE98C0FC36C6400064057 /* calendar.fetes */,
+ 723CE98D0FC36C6400064057 /* calendar.french */,
+ 723CE98E0FC36C6400064057 /* calendar.jferies */,
+ 723CE98F0FC36C6400064057 /* calendar.proverbes */,
+ );
+ path = "fr_FR.ISO8859-1";
+ sourceTree = "<group>";
+ };
+ 723CE9900FC36C6400064057 /* hr_HR.ISO8859-2 */ = {
+ isa = PBXGroup;
+ children = (
+ 723CE9910FC36C6400064057 /* calendar.all */,
+ 723CE9920FC36C6400064057 /* calendar.praznici */,
+ );
+ path = "hr_HR.ISO8859-2";
+ sourceTree = "<group>";
+ };
+ 723CE9930FC36C6400064057 /* hu_HU.ISO8859-2 */ = {
+ isa = PBXGroup;
+ children = (
+ 723CE9940FC36C6400064057 /* calendar.all */,
+ 723CE9950FC36C6400064057 /* calendar.nevnapok */,
+ 723CE9960FC36C6400064057 /* calendar.unnepek */,
+ );
+ path = "hu_HU.ISO8859-2";
+ sourceTree = "<group>";
+ };
+ 723CE9970FC36C6400064057 /* ru_RU.KOI8-R */ = {
+ isa = PBXGroup;
+ children = (
+ 723CE9980FC36C6400064057 /* calendar.all */,
+ 723CE9990FC36C6400064057 /* calendar.common */,
+ 723CE99A0FC36C6400064057 /* calendar.holiday */,
+ 723CE99B0FC36C6400064057 /* calendar.military */,
+ 723CE99C0FC36C6400064057 /* calendar.msk */,
+ 723CE99D0FC36C6400064057 /* calendar.orthodox */,
+ 723CE99E0FC36C6400064057 /* calendar.pagan */,
+ );
+ path = "ru_RU.KOI8-R";
+ sourceTree = "<group>";
+ };
+ 723CE99F0FC36C6400064057 /* uk_UA.KOI8-U */ = {
+ isa = PBXGroup;
+ children = (
+ 723CE9A00FC36C6400064057 /* calendar.all */,
+ 723CE9A10FC36C6400064057 /* calendar.holiday */,
+ 723CE9A20FC36C6400064057 /* calendar.misc */,
+ 723CE9A30FC36C6400064057 /* calendar.orthodox */,
+ );
+ path = "uk_UA.KOI8-U";
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 53D2641D112DD84700FFBD9F /* cal */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 53D26426112DD84700FFBD9F /* Build configuration list for PBXNativeTarget "cal" */;
+ buildPhases = (
+ 53D2641E112DD84700FFBD9F /* Sources */,
+ 53D26422112DD84700FFBD9F /* Frameworks */,
+ 53D26425112DD84700FFBD9F /* ShellScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = cal;
+ productName = ncal;
+ productReference = 53D26428112DD84700FFBD9F /* cal */;
+ productType = "com.apple.product-type.tool";
+ };
+ 723CE85C0FC3437B00064057 /* leave */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 723CE8620FC3437C00064057 /* Build configuration list for PBXNativeTarget "leave" */;
+ buildPhases = (
+ 723CE85A0FC3437B00064057 /* Sources */,
+ 723CE85B0FC3437B00064057 /* Frameworks */,
+ 723CE8880FC3454E00064057 /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = leave;
+ productName = leave;
+ productReference = 723CE85D0FC3437B00064057 /* leave */;
+ productType = "com.apple.product-type.tool";
+ };
+ 723CE8B40FC3476900064057 /* tsort */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 723CE8B80FC3478800064057 /* Build configuration list for PBXNativeTarget "tsort" */;
+ buildPhases = (
+ 723CE8B20FC3476900064057 /* Sources */,
+ 723CE8B30FC3476900064057 /* Frameworks */,
+ 723CE8C20FC347C600064057 /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = tsort;
+ productName = tsort;
+ productReference = 723CE8B50FC3476900064057 /* tsort */;
+ productType = "com.apple.product-type.tool";
+ };
+ 723CE8CE0FC3487200064057 /* units */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 723CE8D50FC348B200064057 /* Build configuration list for PBXNativeTarget "units" */;
+ buildPhases = (
+ 723CE8CC0FC3487200064057 /* Sources */,
+ 723CE8CD0FC3487200064057 /* Frameworks */,
+ 723CE8D40FC348B200064057 /* Copy manpage */,
+ 723CE8E20FC3496B00064057 /* Copy Unit Files */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = units;
+ productName = units;
+ productReference = 723CE8CF0FC3487200064057 /* units */;
+ productType = "com.apple.product-type.tool";
+ };
+ 723CE8F20FC34BD300064057 /* ncal */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 723CE8F70FC34BE400064057 /* Build configuration list for PBXNativeTarget "ncal" */;
+ buildPhases = (
+ 723CE8F00FC34BD300064057 /* Sources */,
+ 723CE8F10FC34BD300064057 /* Frameworks */,
+ 723CE91D0FC34C9600064057 /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = ncal;
+ productName = ncal;
+ productReference = 723CE8F30FC34BD300064057 /* ncal */;
+ productType = "com.apple.product-type.tool";
+ };
+ 723CE94A0FC3505500064057 /* calendar */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 723CE94E0FC3507300064057 /* Build configuration list for PBXNativeTarget "calendar" */;
+ buildPhases = (
+ 723CE9480FC3505500064057 /* Sources */,
+ 723CE9490FC3505500064057 /* Frameworks */,
+ 723CE9DA0FC379A200064057 /* Copy manpage */,
+ 72FA601A0FC497B500E6462C /* ShellScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = calendar;
+ productName = calendar;
+ productReference = 723CE94B0FC3505500064057 /* calendar */;
+ productType = "com.apple.product-type.tool";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 723CE84B0FC342D200064057 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ };
+ buildConfigurationList = 723CE84E0FC342D200064057 /* Build configuration list for PBXProject "misc_cmds" */;
+ compatibilityVersion = "Xcode 3.1";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ );
+ mainGroup = 723CE8490FC342D200064057;
+ productRefGroup = 723CE85E0FC3437B00064057 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 723CE9B30FC36FAF00064057 /* Build All */,
+ 723CE85C0FC3437B00064057 /* leave */,
+ 723CE8B40FC3476900064057 /* tsort */,
+ 723CE8CE0FC3487200064057 /* units */,
+ 723CE8F20FC34BD300064057 /* ncal */,
+ 723CE94A0FC3505500064057 /* calendar */,
+ 53D2641D112DD84700FFBD9F /* cal */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 53D26425112DD84700FFBD9F /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "cp $DSTROOT/usr/share/man/man1/ncal.1 $DSTROOT/usr/share/man/man1/cal.1";
+ };
+ 72FA601A0FC497B500E6462C /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 8;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ shellPath = /bin/bash;
+ shellScript = "mkdir -p $DSTROOT/usr/share/calendar\ncp -R $SRCROOT/calendar/calendars/ $DSTROOT/usr/share/calendar/\nmkdir -p $DSTROOT/usr/share/calendar/de_DE.ISO8859-15\nmkdir -p $DSTROOT/usr/share/calendar/fr_FR.ISO8859-15";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 53D2641E112DD84700FFBD9F /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 53D2641F112DD84700FFBD9F /* calendar.c in Sources */,
+ 53D26420112DD84700FFBD9F /* easter.c in Sources */,
+ 53D26421112DD84700FFBD9F /* ncal.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 723CE85A0FC3437B00064057 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 723CE8750FC3450300064057 /* leave.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 723CE8B20FC3476900064057 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 723CE8B90FC3478800064057 /* tsort.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 723CE8CC0FC3487200064057 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 723CE8D20FC3488100064057 /* units.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 723CE8F00FC34BD300064057 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 723CE90C0FC34C1A00064057 /* calendar.c in Sources */,
+ 723CE90E0FC34C1A00064057 /* easter.c in Sources */,
+ 723CE90F0FC34C1A00064057 /* ncal.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 723CE9480FC3505500064057 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 723CE9600FC350FF00064057 /* calendar.c in Sources */,
+ 723CE9610FC350FF00064057 /* day.c in Sources */,
+ 723CE9620FC350FF00064057 /* io.c in Sources */,
+ 723CE9630FC350FF00064057 /* ostern.c in Sources */,
+ 723CE9640FC350FF00064057 /* paskha.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 53D2642B112DD86900FFBD9F /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 53D2641D112DD84700FFBD9F /* cal */;
+ targetProxy = 53D2642A112DD86900FFBD9F /* PBXContainerItemProxy */;
+ };
+ 723CE9B60FC36FC600064057 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 723CE94A0FC3505500064057 /* calendar */;
+ targetProxy = 723CE9B50FC36FC600064057 /* PBXContainerItemProxy */;
+ };
+ 723CE9B80FC36FC600064057 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 723CE8F20FC34BD300064057 /* ncal */;
+ targetProxy = 723CE9B70FC36FC600064057 /* PBXContainerItemProxy */;
+ };
+ 723CE9BA0FC36FC600064057 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 723CE8CE0FC3487200064057 /* units */;
+ targetProxy = 723CE9B90FC36FC600064057 /* PBXContainerItemProxy */;
+ };
+ 723CE9BC0FC36FC600064057 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 723CE8B40FC3476900064057 /* tsort */;
+ targetProxy = 723CE9BB0FC36FC600064057 /* PBXContainerItemProxy */;
+ };
+ 723CE9BE0FC36FC600064057 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 723CE85C0FC3437B00064057 /* leave */;
+ targetProxy = 723CE9BD0FC36FC600064057 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 53D26427112DD84700FFBD9F /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_MODEL_TUNING = G5;
+ INSTALL_PATH = /usr/bin;
+ OTHER_CFLAGS = "-D__FBSDID=__RCSID";
+ PREBINDING = NO;
+ PRODUCT_NAME = cal;
+ STRIP_INSTALLED_PRODUCT = YES;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 723CE84D0FC342D200064057 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+ COPY_PHASE_STRIP = YES;
+ CURRENT_PROJECT_VERSION = "$(RC_ProjectSourceVersion)";
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GENERATE_MASTER_OBJECT_FILE = NO;
+ INSTALL_MODE_FLAG = "gou-w,a+rX";
+ INSTALL_PATH = /usr/bin;
+ PREBINDING = NO;
+ USE_HEADERMAP = NO;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_BUILDER = "$(USER)";
+ VERSION_INFO_FILE = "$(PRODUCT_NAME)_vers.c";
+ VERSION_INFO_PREFIX = __;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 723CE8610FC3437C00064057 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = YES;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_MODEL_TUNING = G5;
+ INSTALL_PATH = /usr/bin;
+ PREBINDING = NO;
+ PRODUCT_NAME = leave;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = __;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 723CE8B70FC3476A00064057 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_MODEL_TUNING = G5;
+ INSTALL_PATH = /usr/bin;
+ PREBINDING = NO;
+ PRODUCT_NAME = tsort;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 723CE8D10FC3487300064057 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_MODEL_TUNING = G5;
+ INSTALL_PATH = /usr/bin;
+ OTHER_CFLAGS = "";
+ PREBINDING = NO;
+ PRODUCT_NAME = units;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 723CE8F50FC34BD300064057 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_MODEL_TUNING = G5;
+ INSTALL_PATH = /usr/bin;
+ OTHER_CFLAGS = "-D__FBSDID=__RCSID";
+ PREBINDING = NO;
+ PRODUCT_NAME = ncal;
+ STRIP_INSTALLED_PRODUCT = YES;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 723CE94D0FC3505500064057 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_MODEL_TUNING = G5;
+ GCC_PREPROCESSOR_DEFINITIONS = "__FBSDID=__RCSID";
+ INSTALL_PATH = /usr/bin;
+ PREBINDING = NO;
+ PRODUCT_NAME = calendar;
+ STRIP_INSTALLED_PRODUCT = YES;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 723CE9B40FC36FB000064057 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ PRODUCT_NAME = "Build All";
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 53D26426112DD84700FFBD9F /* Build configuration list for PBXNativeTarget "cal" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 53D26427112DD84700FFBD9F /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 723CE84E0FC342D200064057 /* Build configuration list for PBXProject "misc_cmds" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 723CE84D0FC342D200064057 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 723CE8620FC3437C00064057 /* Build configuration list for PBXNativeTarget "leave" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 723CE8610FC3437C00064057 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 723CE8B80FC3478800064057 /* Build configuration list for PBXNativeTarget "tsort" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 723CE8B70FC3476A00064057 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 723CE8D50FC348B200064057 /* Build configuration list for PBXNativeTarget "units" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 723CE8D10FC3487300064057 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 723CE8F70FC34BE400064057 /* Build configuration list for PBXNativeTarget "ncal" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 723CE8F50FC34BD300064057 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 723CE94E0FC3507300064057 /* Build configuration list for PBXNativeTarget "calendar" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 723CE94D0FC3505500064057 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 723CE9C10FC36FEB00064057 /* Build configuration list for PBXAggregateTarget "Build All" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 723CE9B40FC36FB000064057 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 723CE84B0FC342D200064057 /* Project object */;
+}
diff --git a/misc_cmds/ncal/calendar.c b/misc_cmds/ncal/calendar.c
new file mode 100644
index 0000000..fca63ee
--- /dev/null
+++ b/misc_cmds/ncal/calendar.c
@@ -0,0 +1,330 @@
+/*-
+ * Copyright (c) 1997 Wolfgang Helbig
+ * 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 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 AUTHOR 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/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "calendar.h"
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+/*
+ * For each month tabulate the number of days elapsed in a year before the
+ * month. This assumes the internal date representation, where a year
+ * starts on March 1st. So we don't need a special table for leap years.
+ * But we do need a special table for the year 1582, since 10 days are
+ * deleted in October. This is month1s for the switch from Julian to
+ * Gregorian calendar.
+ */
+static int const month1[] =
+ {0, 31, 61, 92, 122, 153, 184, 214, 245, 275, 306, 337};
+ /* M A M J J A S O N D J */
+static int const month1s[]=
+ {0, 31, 61, 92, 122, 153, 184, 214, 235, 265, 296, 327};
+
+typedef struct date date;
+
+/* The last day of Julian calendar, in internal and ndays representation */
+static int nswitch; /* The last day of Julian calendar */
+static date jiswitch = {1582, 7, 3};
+
+static date *date2idt(date *idt, date *dt);
+static date *idt2date(date *dt, date *idt);
+static int ndaysji(date *idt);
+static int ndaysgi(date *idt);
+static int firstweek(int year);
+
+/*
+ * Compute the Julian date from the number of days elapsed since
+ * March 1st of year zero.
+ */
+date *
+jdate(int ndays, date *dt)
+{
+ date idt; /* Internal date representation */
+ int r; /* hold the rest of days */
+
+ /*
+ * Compute the year by starting with an approximation not smaller
+ * than the answer and using linear search for the greatest
+ * year which does not begin after ndays.
+ */
+ idt.y = ndays / 365;
+ idt.m = 0;
+ idt.d = 0;
+ while ((r = ndaysji(&idt)) > ndays)
+ idt.y--;
+
+ /*
+ * Set r to the days left in the year and compute the month by
+ * linear search as the largest month that does not begin after r
+ * days.
+ */
+ r = ndays - r;
+ for (idt.m = 11; month1[idt.m] > r; idt.m--)
+ ;
+
+ /* Compute the days left in the month */
+ idt.d = r - month1[idt.m];
+
+ /* return external representation of the date */
+ return (idt2date(dt, &idt));
+}
+
+/*
+ * Return the number of days since March 1st of the year zero.
+ * The date is given according to Julian calendar.
+ */
+int
+ndaysj(date *dt)
+{
+ date idt; /* Internal date representation */
+
+ if (date2idt(&idt, dt) == NULL)
+ return (-1);
+ else
+ return (ndaysji(&idt));
+}
+
+/*
+ * Same as above, where the Julian date is given in internal notation.
+ * This formula shows the beauty of this notation.
+ */
+static int
+ndaysji(date * idt)
+{
+
+ return (idt->d + month1[idt->m] + idt->y * 365 + idt->y / 4);
+}
+
+/*
+ * Compute the date according to the Gregorian calendar from the number of
+ * days since March 1st, year zero. The date computed will be Julian if it
+ * is older than 1582-10-05. This is the reverse of the function ndaysg().
+ */
+date *
+gdate(int ndays, date *dt)
+{
+ int const *montht; /* month-table */
+ date idt; /* for internal date representation */
+ int r; /* holds the rest of days */
+
+ /*
+ * Compute the year by starting with an approximation not smaller
+ * than the answer and search linearly for the greatest year not
+ * starting after ndays.
+ */
+ idt.y = ndays / 365;
+ idt.m = 0;
+ idt.d = 0;
+ while ((r = ndaysgi(&idt)) > ndays)
+ idt.y--;
+
+ /*
+ * Set ndays to the number of days left and compute by linear
+ * search the greatest month which does not start after ndays. We
+ * use the table month1 which provides for each month the number
+ * of days that elapsed in the year before that month. Here the
+ * year 1582 is special, as 10 days are left out in October to
+ * resynchronize the calendar with the earth's orbit. October 4th
+ * 1582 is followed by October 15th 1582. We use the "switch"
+ * table month1s for this year.
+ */
+ ndays = ndays - r;
+ if (idt.y == 1582)
+ montht = month1s;
+ else
+ montht = month1;
+
+ for (idt.m = 11; montht[idt.m] > ndays; idt.m--)
+ ;
+
+ idt.d = ndays - montht[idt.m]; /* the rest is the day in month */
+
+ /* Advance ten days deleted from October if after switch in Oct 1582 */
+ if (idt.y == jiswitch.y && idt.m == jiswitch.m && jiswitch.d < idt.d)
+ idt.d += 10;
+
+ /* return external representation of found date */
+ return (idt2date(dt, &idt));
+}
+
+/*
+ * Return the number of days since March 1st of the year zero. The date is
+ * assumed Gregorian if younger than 1582-10-04 and Julian otherwise. This
+ * is the reverse of gdate.
+ */
+int
+ndaysg(date *dt)
+{
+ date idt; /* Internal date representation */
+
+ if (date2idt(&idt, dt) == NULL)
+ return (-1);
+ return (ndaysgi(&idt));
+}
+
+/*
+ * Same as above, but with the Gregorian date given in internal
+ * representation.
+ */
+static int
+ndaysgi(date *idt)
+{
+ int nd; /* Number of days--return value */
+
+ /* Cache nswitch if not already done */
+ if (nswitch == 0)
+ nswitch = ndaysji(&jiswitch);
+
+ /*
+ * Assume Julian calendar and adapt to Gregorian if necessary, i. e.
+ * younger than nswitch. Gregori deleted
+ * the ten days from Oct 5th to Oct 14th 1582.
+ * Thereafter years which are multiples of 100 and not multiples
+ * of 400 were not leap years anymore.
+ * This makes the average length of a year
+ * 365d +.25d - .01d + .0025d = 365.2425d. But the tropical
+ * year measures 365.2422d. So in 10000/3 years we are
+ * again one day ahead of the earth. Sigh :-)
+ * (d is the average length of a day and tropical year is the
+ * time from one spring point to the next.)
+ */
+ if ((nd = ndaysji(idt)) == -1)
+ return (-1);
+ if (idt->y >= 1600)
+ nd = (nd - 10 - (idt->y - 1600) / 100 + (idt->y - 1600) / 400);
+ else if (nd > nswitch)
+ nd -= 10;
+ return (nd);
+}
+
+/*
+ * Compute the week number from the number of days since March 1st year 0.
+ * The weeks are numbered per year starting with 1. If the first
+ * week of a year includes at least four days of that year it is week 1,
+ * otherwise it gets the number of the last week of the previous year.
+ * The variable y will be filled with the year that contains the greater
+ * part of the week.
+ */
+int
+week(int nd, int *y)
+{
+ date dt;
+ int fw; /* 1st day of week 1 of previous, this and
+ * next year */
+ gdate(nd, &dt);
+ for (*y = dt.y + 1; nd < (fw = firstweek(*y)); (*y)--)
+ ;
+ return ((nd - fw) / 7 + 1);
+}
+
+/* return the first day of week 1 of year y */
+static int
+firstweek(int y)
+{
+ date idt;
+ int nd, wd;
+
+ idt.y = y - 1; /* internal representation of y-1-1 */
+ idt.m = 10;
+ idt.d = 0;
+
+ nd = ndaysgi(&idt);
+ /*
+ * If more than 3 days of this week are in the preceding year, the
+ * next week is week 1 (and the next monday is the answer),
+ * otherwise this week is week 1 and the last monday is the
+ * answer.
+ */
+ if ((wd = weekday(nd)) > 3)
+ return (nd - wd + 7);
+ else
+ return (nd - wd);
+}
+
+/* return the weekday (Mo = 0 .. Su = 6) */
+int
+weekday(int nd)
+{
+ date dmondaygi = {1997, 8, 16}; /* Internal repr. of 1997-11-17 */
+ static int nmonday; /* ... which is a monday */
+
+ /* Cache the daynumber of one monday */
+ if (nmonday == 0)
+ nmonday = ndaysgi(&dmondaygi);
+
+ /* return (nd - nmonday) modulo 7 which is the weekday */
+ nd = (nd - nmonday) % 7;
+ if (nd < 0)
+ return (nd + 7);
+ else
+ return (nd);
+}
+
+/*
+ * Convert a date to internal date representation: The year starts on
+ * March 1st, month and day numbering start at zero. E. g. March 1st of
+ * year zero is written as y=0, m=0, d=0.
+ */
+static date *
+date2idt(date *idt, date *dt)
+{
+
+ idt->d = dt->d - 1;
+ if (dt->m > 2) {
+ idt->m = dt->m - 3;
+ idt->y = dt->y;
+ } else {
+ idt->m = dt->m + 9;
+ idt->y = dt->y - 1;
+ }
+ if (idt->m < 0 || idt->m > 11 || idt->y < 0)
+ return (NULL);
+ else
+ return idt;
+}
+
+/* Reverse of date2idt */
+static date *
+idt2date(date *dt, date *idt)
+{
+
+ dt->d = idt->d + 1;
+ if (idt->m < 10) {
+ dt->m = idt->m + 3;
+ dt->y = idt->y;
+ } else {
+ dt->m = idt->m - 9;
+ dt->y = idt->y + 1;
+ }
+ if (dt->m < 1)
+ return (NULL);
+ else
+ return (dt);
+}
diff --git a/misc_cmds/ncal/calendar.h b/misc_cmds/ncal/calendar.h
new file mode 100644
index 0000000..2c42d6c
--- /dev/null
+++ b/misc_cmds/ncal/calendar.h
@@ -0,0 +1,42 @@
+/*-
+ * Copyright (c) 1997 Wolfgang Helbig
+ * 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 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+struct date {
+ int y; /* year */
+ int m; /* month */
+ int d; /* day */
+};
+
+struct date *easterg(int _year, struct date *_dt);
+struct date *easterog(int _year, struct date *_dt);
+struct date *easteroj(int _year, struct date *_dt);
+struct date *gdate(int _nd, struct date *_dt);
+struct date *jdate(int _nd, struct date *_dt);
+int ndaysg(struct date *_dt);
+int ndaysj(struct date *_dt);
+int week(int _nd, int *_year);
+int weekday(int _nd);
diff --git a/misc_cmds/ncal/easter.c b/misc_cmds/ncal/easter.c
new file mode 100644
index 0000000..8bb3e1c
--- /dev/null
+++ b/misc_cmds/ncal/easter.c
@@ -0,0 +1,101 @@
+/*-
+ * Copyright (c) 1997 Wolfgang Helbig
+ * 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 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 AUTHOR 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/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "calendar.h"
+
+typedef struct date date;
+
+static int easterodn(int y);
+
+/* Compute Easter Sunday in Gregorian Calendar */
+date *
+easterg(int y, date *dt)
+{
+ int c, i, j, k, l, n;
+
+ n = y % 19;
+ c = y / 100;
+ k = (c - 17) / 25;
+ i = (c - c/4 -(c-k)/3 + 19 * n + 15) % 30;
+ i = i -(i/28) * (1 - (i/28) * (29/(i + 1)) * ((21 - n)/11));
+ j = (y + y/4 + i + 2 - c + c/4) % 7;
+ l = i - j;
+ dt->m = 3 + (l + 40) / 44;
+ dt->d = l + 28 - 31*(dt->m / 4);
+ dt->y = y;
+ return (dt);
+}
+
+/* Compute the Gregorian date of Easter Sunday in Julian Calendar */
+date *
+easterog(int y, date *dt)
+{
+
+ return (gdate(easterodn(y), dt));
+}
+
+/* Compute the Julian date of Easter Sunday in Julian Calendar */
+date *
+easteroj(int y, date * dt)
+{
+
+ return (jdate(easterodn(y), dt));
+}
+
+/* Compute the day number of Easter Sunday in Julian Calendar */
+static int
+easterodn(int y)
+{
+ /*
+ * Table for the easter limits in one metonic (19-year) cycle. 21
+ * to 31 is in March, 1 through 18 in April. Easter is the first
+ * sunday after the easter limit.
+ */
+ int mc[] = {5, 25, 13, 2, 22, 10, 30, 18, 7, 27, 15, 4,
+ 24, 12, 1, 21, 9, 29, 17};
+
+ /* Offset from a weekday to next sunday */
+ int ns[] = {6, 5, 4, 3, 2, 1, 7};
+ date dt;
+ int dn;
+
+ /* Assign the easter limit of y to dt */
+ dt.d = mc[y % 19];
+
+ if (dt.d < 21)
+ dt.m = 4;
+ else
+ dt.m = 3;
+
+ dt.y = y;
+
+ /* Return the next sunday after the easter limit */
+ dn = ndaysj(&dt);
+ return (dn + ns[weekday(dn)]);
+}
diff --git a/misc_cmds/ncal/ncal.1 b/misc_cmds/ncal/ncal.1
new file mode 100644
index 0000000..329db6d
--- /dev/null
+++ b/misc_cmds/ncal/ncal.1
@@ -0,0 +1,198 @@
+.\" Copyright (c) 1997 Wolfgang Helbig
+.\" 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 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 AUTHOR 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.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd March 14, 2009
+.Dt CAL 1
+.Os
+.Sh NAME
+.Nm cal ,
+.Nm ncal
+.Nd displays a calendar and the date of Easter
+.Sh SYNOPSIS
+.Nm
+.Op Fl 3hjy
+.Op Fl A Ar number
+.Op Fl B Ar number
+.Oo
+.Op Ar month
+.Ar year
+.Oc
+.Nm
+.Op Fl 3hj
+.Op Fl A Ar number
+.Op Fl B Ar number
+.Fl m Ar month
+.Op Ar year
+.Nm ncal
+.Op Fl 3hjJpwy
+.Op Fl A Ar number
+.Op Fl B Ar number
+.Op Fl s Ar country_code
+.Oo
+.Op Ar month
+.Ar year
+.Oc
+.Nm ncal
+.Op Fl 3hJeo
+.Op Fl A Ar number
+.Op Fl B Ar number
+.Op Ar year
+.Nm ncal
+.Op Fl CN
+.Op Fl H Ar yyyy-mm-dd
+.Op Fl d Ar yyyy-mm
+.Sh DESCRIPTION
+The
+.Nm
+utility displays a simple calendar in traditional format and
+.Nm ncal
+offers an alternative layout, more options and the date of Easter.
+The new format is a little cramped but it makes a year fit
+on a 25x80 terminal.
+If arguments are not specified,
+the current month is displayed.
+.Pp
+The options are as follows:
+.Bl -tag -width indent
+.It Fl h
+Turns off highlighting of today.
+.It Fl J
+Display Julian Calendar, if combined with the
+.Fl e
+option, display date of Easter according to the Julian Calendar.
+.It Fl e
+Display date of Easter (for western churches).
+.It Fl j
+Display Julian days (days one-based, numbered from January 1).
+.It Fl m Ar month
+Display the specified
+.Ar month .
+If
+.Ar month
+is specified as a decimal number, it may be followed by the letter
+.Ql f
+or
+.Ql p
+to indicate the following or preceding month of that number,
+respectively.
+.It Fl o
+Display date of Orthodox Easter (Greek and Russian
+Orthodox Churches).
+.It Fl p
+Print the country codes and switching days from Julian to Gregorian
+Calendar as they are assumed by
+.Nm ncal .
+The country code as determined from the local environment is marked
+with an asterisk.
+.It Fl s Ar country_code
+Assume the switch from Julian to Gregorian Calendar at the date
+associated with the
+.Ar country_code .
+If not specified,
+.Nm ncal
+tries to guess the switch date from the local environment or
+falls back to September 2, 1752.
+This was when Great
+Britain and her colonies switched to the Gregorian Calendar.
+.It Fl w
+Print the number of the week below each week column.
+.It Fl y
+Display a calendar for the specified year.
+.It Fl 3
+Display the previous, current and next month surrounding today.
+.It Fl A Ar number
+Display the
+.Ar number
+of months after the current month.
+.It Fl B Ar number
+Display the
+.Ar number
+of months before the current month.
+.It Fl C
+Switch to
+.Nm cal
+mode.
+.It Fl N
+Switch to
+.Nm ncal
+mode.
+.It Fl d Ar yyyy-mm
+Use
+.Ar yyyy-mm
+as the current date (for debugging of date selection).
+.It Fl H Ar yyyy-mm-dd
+Use
+.Ar yyyy-mm-dd
+as the current date (for debugging of highlighting).
+.El
+.Pp
+A single parameter specifies the year (1\(en9999) to be displayed;
+note the year must be fully specified:
+.Dq Li cal 89
+will
+.Em not
+display a calendar for 1989. Two parameters denote the month and
+year; the month is either a number between 1 and 12, or a full or
+abbreviated name as specified by the current locale. Month and
+year default to those of the current system clock and time zone (so
+.Dq Li cal -m 8
+will display a calendar for the month of August in the current
+year).
+.Pp
+Not all options can be used together. For example
+.Dq Li -3 -A 2 -B 3 -y -m 7
+would mean:
+show me the three months around the seventh month, three before
+that, two after that and the whole year.
+.Nm ncal
+will warn about these combinations.
+.Pp
+A year starts on January 1.
+.Pp
+Highlighting of dates is disabled if stdout is not a tty.
+.Sh SEE ALSO
+.Xr calendar 3 ,
+.Xr strftime 3
+.Sh HISTORY
+A
+.Nm
+command appeared in
+.At v5 .
+The
+.Nm ncal
+command appeared in
+.Fx 2.2.6 .
+.Sh AUTHORS
+The
+.Nm ncal
+command and manual were written by
+.An Wolfgang Helbig Aq Mt helbig@FreeBSD.org .
+.Sh BUGS
+The assignment of Julian\(enGregorian switching dates to country
+codes is historically naive for many countries.
+.Pp
+Not all options are compatible and using them in different orders
+will give varying results.
diff --git a/misc_cmds/ncal/ncal.c b/misc_cmds/ncal/ncal.c
new file mode 100644
index 0000000..5a5cbc3
--- /dev/null
+++ b/misc_cmds/ncal/ncal.c
@@ -0,0 +1,1177 @@
+/*-
+ * Copyright (c) 1997 Wolfgang Helbig
+ * 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 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 AUTHOR 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/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <calendar.h>
+#include <ctype.h>
+#include <err.h>
+#include <langinfo.h>
+#include <libgen.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <time.h>
+#include <unistd.h>
+#include <wchar.h>
+#include <wctype.h>
+#include <term.h>
+#undef lines /* term.h defines this */
+
+/* Width of one month with backward compatibility and in regular mode*/
+#define MONTH_WIDTH_B_J 27
+#define MONTH_WIDTH_B 20
+
+#define MONTH_WIDTH_R_J 24
+#define MONTH_WIDTH_R 18
+
+#define MAX_WIDTH 64
+
+typedef struct date date;
+
+struct monthlines {
+ wchar_t name[MAX_WIDTH + 1];
+ char lines[7][MAX_WIDTH + 1];
+ char weeks[MAX_WIDTH + 1];
+ unsigned int extralen[7];
+};
+
+struct weekdays {
+ wchar_t names[7][4];
+};
+
+/* The switches from Julian to Gregorian in some countries */
+static struct djswitch {
+ const char *cc; /* Country code according to ISO 3166 */
+ const char *nm; /* Name of country */
+ date dt; /* Last day of Julian calendar */
+} switches[] = {
+ {"AL", "Albania", {1912, 11, 30}},
+ {"AT", "Austria", {1583, 10, 5}},
+ {"AU", "Australia", {1752, 9, 2}},
+ {"BE", "Belgium", {1582, 12, 14}},
+ {"BG", "Bulgaria", {1916, 3, 18}},
+ {"CA", "Canada", {1752, 9, 2}},
+ {"CH", "Switzerland", {1655, 2, 28}},
+ {"CN", "China", {1911, 12, 18}},
+ {"CZ", "Czech Republic",{1584, 1, 6}},
+ {"DE", "Germany", {1700, 2, 18}},
+ {"DK", "Denmark", {1700, 2, 18}},
+ {"ES", "Spain", {1582, 10, 4}},
+ {"FI", "Finland", {1753, 2, 17}},
+ {"FR", "France", {1582, 12, 9}},
+ {"GB", "United Kingdom",{1752, 9, 2}},
+ {"GR", "Greece", {1924, 3, 9}},
+ {"HU", "Hungary", {1587, 10, 21}},
+ {"IS", "Iceland", {1700, 11, 16}},
+ {"IT", "Italy", {1582, 10, 4}},
+ {"JP", "Japan", {1918, 12, 18}},
+ {"LI", "Lithuania", {1918, 2, 1}},
+ {"LN", "Latin", {9999, 05, 31}},
+ {"LU", "Luxembourg", {1582, 12, 14}},
+ {"LV", "Latvia", {1918, 2, 1}},
+ {"NL", "Netherlands", {1582, 12, 14}},
+ {"NO", "Norway", {1700, 2, 18}},
+ {"PL", "Poland", {1582, 10, 4}},
+ {"PT", "Portugal", {1582, 10, 4}},
+ {"RO", "Romania", {1919, 3, 31}},
+ {"RU", "Russia", {1918, 1, 31}},
+ {"SI", "Slovenia", {1919, 3, 4}},
+ {"SE", "Sweden", {1753, 2, 17}},
+ {"TR", "Turkey", {1926, 12, 18}},
+ {"US", "United States", {1752, 9, 2}},
+ {"YU", "Yugoslavia", {1919, 3, 4}}
+};
+
+static struct djswitch *dftswitch =
+ switches + sizeof(switches) / sizeof(struct djswitch) - 2;
+ /* default switch (should be "US") */
+
+/* Table used to print day of month and week numbers */
+static char daystr[] = " 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15"
+ " 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31"
+ " 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47"
+ " 48 49 50 51 52 53";
+
+/* Table used to print day of year and week numbers */
+static char jdaystr[] = " 1 2 3 4 5 6 7 8 9"
+ " 10 11 12 13 14 15 16 17 18 19"
+ " 20 21 22 23 24 25 26 27 28 29"
+ " 30 31 32 33 34 35 36 37 38 39"
+ " 40 41 42 43 44 45 46 47 48 49"
+ " 50 51 52 53 54 55 56 57 58 59"
+ " 60 61 62 63 64 65 66 67 68 69"
+ " 70 71 72 73 74 75 76 77 78 79"
+ " 80 81 82 83 84 85 86 87 88 89"
+ " 90 91 92 93 94 95 96 97 98 99"
+ " 100 101 102 103 104 105 106 107 108 109"
+ " 110 111 112 113 114 115 116 117 118 119"
+ " 120 121 122 123 124 125 126 127 128 129"
+ " 130 131 132 133 134 135 136 137 138 139"
+ " 140 141 142 143 144 145 146 147 148 149"
+ " 150 151 152 153 154 155 156 157 158 159"
+ " 160 161 162 163 164 165 166 167 168 169"
+ " 170 171 172 173 174 175 176 177 178 179"
+ " 180 181 182 183 184 185 186 187 188 189"
+ " 190 191 192 193 194 195 196 197 198 199"
+ " 200 201 202 203 204 205 206 207 208 209"
+ " 210 211 212 213 214 215 216 217 218 219"
+ " 220 221 222 223 224 225 226 227 228 229"
+ " 230 231 232 233 234 235 236 237 238 239"
+ " 240 241 242 243 244 245 246 247 248 249"
+ " 250 251 252 253 254 255 256 257 258 259"
+ " 260 261 262 263 264 265 266 267 268 269"
+ " 270 271 272 273 274 275 276 277 278 279"
+ " 280 281 282 283 284 285 286 287 288 289"
+ " 290 291 292 293 294 295 296 297 298 299"
+ " 300 301 302 303 304 305 306 307 308 309"
+ " 310 311 312 313 314 315 316 317 318 319"
+ " 320 321 322 323 324 325 326 327 328 329"
+ " 330 331 332 333 334 335 336 337 338 339"
+ " 340 341 342 343 344 345 346 347 348 349"
+ " 350 351 352 353 354 355 356 357 358 359"
+ " 360 361 362 363 364 365 366";
+
+static int flag_nohighlight; /* user doesn't want a highlighted today */
+static int flag_weeks; /* user wants number of week */
+static int nswitch; /* user defined switch date */
+static int nswitchb; /* switch date for backward compatibility */
+static int highlightdate;
+
+static char *center(char *s, char *t, int w);
+static wchar_t *wcenter(wchar_t *s, wchar_t *t, int w);
+static int firstday(int y, int m);
+static void highlight(char *dst, char *src, int len, int *extraletters);
+static void mkmonthr(int year, int month, int jd_flag,
+ struct monthlines * monthl);
+static void mkmonthb(int year, int month, int jd_flag,
+ struct monthlines * monthl);
+static void mkweekdays(struct weekdays * wds);
+static void monthranger(int year, int m, int jd_flag,
+ int before, int after);
+static void monthrangeb(int year, int m, int jd_flag,
+ int before, int after);
+static int parsemonth(const char *s, int *m, int *y);
+static void printcc(void);
+static void printeaster(int year, int julian, int orthodox);
+static date *sdater(int ndays, struct date * d);
+static date *sdateb(int ndays, struct date * d);
+static int sndaysr(struct date * d);
+static int sndaysb(struct date * d);
+static void usage(void);
+
+int
+main(int argc, char *argv[])
+{
+ struct djswitch *p, *q; /* to search user defined switch date */
+ date never = {10000, 1, 1}; /* outside valid range of dates */
+ date ukswitch = {1752, 9, 2};/* switch date for Great Britain */
+ date dt;
+ int ch; /* holds the option character */
+ int m = 0; /* month */
+ int y = 0; /* year */
+ int flag_backward = 0; /* user called cal--backward compat. */
+ int flag_wholeyear = 0; /* user wants the whole year */
+ int flag_julian_cal = 0; /* user wants Julian Calendar */
+ int flag_julian_day = 0; /* user wants the Julian day numbers */
+ int flag_orthodox = 0; /* user wants Orthodox easter */
+ int flag_easter = 0; /* user wants easter date */
+ int flag_3months = 0; /* user wants 3 month display (-3) */
+ int flag_after = 0; /* user wants to see months after */
+ int flag_before = 0; /* user wants to see months before */
+ int flag_specifiedmonth = 0;/* user wants to see this month (-m) */
+ int flag_givenmonth = 0; /* user has specified month [n] */
+ int flag_givenyear = 0; /* user has specified year [n] */
+ char *cp; /* character pointer */
+ char *flag_today = NULL; /* debug: use date as being today */
+ char *flag_month = NULL; /* requested month as string */
+ char *flag_highlightdate = NULL; /* debug: date to highlight */
+ int before, after;
+ const char *locale; /* locale to get country code */
+
+ flag_nohighlight = 0;
+ flag_weeks = 0;
+
+ /*
+ * Use locale to determine the country code,
+ * and use the country code to determine the default
+ * switchdate and date format from the switches table.
+ */
+ if (setlocale(LC_ALL, "") == NULL)
+ warn("setlocale");
+ locale = setlocale(LC_TIME, NULL);
+ if (locale == NULL ||
+ strcmp(locale, "C") == 0 ||
+ strcmp(locale, "POSIX") == 0 ||
+ strcmp(locale, "ASCII") == 0 ||
+ strcmp(locale, "US-ASCII") == 0)
+ locale = "_US";
+ q = switches + sizeof(switches) / sizeof(struct djswitch);
+ for (p = switches; p != q; p++)
+ if ((cp = strstr(locale, p->cc)) != NULL && *(cp - 1) == '_')
+ break;
+ if (p == q) {
+ nswitch = ndaysj(&dftswitch->dt);
+ } else {
+ nswitch = ndaysj(&p->dt);
+ dftswitch = p;
+ }
+
+
+ /*
+ * Get the filename portion of argv[0] and set flag_backward if
+ * this program is called "cal".
+ */
+ if (strncmp(basename(argv[0]), "cal", strlen("cal")) == 0)
+ flag_backward = 1;
+
+ /* Set the switch date to United Kingdom if backwards compatible */
+ if (flag_backward)
+ nswitchb = ndaysj(&ukswitch);
+
+ before = after = -1;
+
+ while ((ch = getopt(argc, argv, "3A:B:Cd:eH:hjJm:Nops:wy")) != -1)
+ switch (ch) {
+ case '3':
+ flag_3months = 1;
+ break;
+ case 'A':
+ if (flag_after > 0)
+ errx(EX_USAGE, "Double -A specified");
+ flag_after = strtol(optarg, NULL, 10);
+ if (flag_after <= 0)
+ errx(EX_USAGE,
+ "Argument to -A must be positive");
+ break;
+ case 'B':
+ if (flag_before > 0)
+ errx(EX_USAGE, "Double -A specified");
+ flag_before = strtol(optarg, NULL, 10);
+ if (flag_before <= 0)
+ errx(EX_USAGE,
+ "Argument to -B must be positive");
+ break;
+ case 'J':
+ if (flag_backward)
+ usage();
+ nswitch = ndaysj(&never);
+ flag_julian_cal = 1;
+ break;
+ case 'C':
+ flag_backward = 1;
+ break;
+ case 'N':
+ flag_backward = 0;
+ break;
+ case 'd':
+ flag_today = optarg;
+ break;
+ case 'H':
+ flag_highlightdate = optarg;
+ break;
+ case 'h':
+ flag_nohighlight = 1;
+ break;
+ case 'e':
+ if (flag_backward)
+ usage();
+ flag_easter = 1;
+ break;
+ case 'j':
+ flag_julian_day = 1;
+ break;
+ case 'm':
+ if (flag_specifiedmonth)
+ errx(EX_USAGE, "Double -m specified");
+ flag_month = optarg;
+ flag_specifiedmonth = 1;
+ break;
+ case 'o':
+ if (flag_backward)
+ usage();
+ flag_orthodox = 1;
+ flag_easter = 1;
+ break;
+ case 'p':
+ if (flag_backward)
+ usage();
+ printcc();
+ return (0);
+ break;
+ case 's':
+ if (flag_backward)
+ usage();
+ q = switches +
+ sizeof(switches) / sizeof(struct djswitch);
+ for (p = switches;
+ p != q && strcmp(p->cc, optarg) != 0; p++)
+ ;
+ if (p == q)
+ errx(EX_USAGE,
+ "%s: invalid country code", optarg);
+ nswitch = ndaysj(&(p->dt));
+ break;
+ case 'w':
+ if (flag_backward)
+ usage();
+ flag_weeks = 1;
+ break;
+ case 'y':
+ flag_wholeyear = 1;
+ break;
+ default:
+ usage();
+ }
+
+ argc -= optind;
+ argv += optind;
+
+ switch (argc) {
+ case 2:
+ if (flag_easter)
+ usage();
+ flag_month = *argv++;
+ flag_givenmonth = 1;
+ m = strtol(flag_month, NULL, 10);
+ /* FALLTHROUGH */
+ case 1:
+ y = atoi(*argv);
+ if (y < 1 || y > 9999)
+ errx(EX_USAGE, "year `%s' not in range 1..9999", *argv);
+ argv++;
+ flag_givenyear = 1;
+ break;
+ case 0:
+ if (flag_today != NULL) {
+ y = strtol(flag_today, NULL, 10);
+ m = strtol(flag_today + 5, NULL, 10);
+ } else {
+ time_t t;
+ struct tm *tm;
+
+ t = time(NULL);
+ tm = localtime(&t);
+ y = tm->tm_year + 1900;
+ m = tm->tm_mon + 1;
+ }
+ break;
+ default:
+ usage();
+ }
+
+ if (flag_month != NULL) {
+ if (parsemonth(flag_month, &m, &y)) {
+ errx(EX_USAGE,
+ "%s is neither a month number (1..12) nor a name",
+ flag_month);
+ }
+ }
+
+ /*
+ * What is not supported:
+ * -3 with -A or -B
+ * -3 displays 3 months, -A and -B change that behaviour.
+ * -3 with -y
+ * -3 displays 3 months, -y says display a whole year.
+ * -3 with a given year but no given month or without -m
+ * -3 displays 3 months, no month specified doesn't make clear
+ * which three months.
+ * -m with a given month
+ * conflicting arguments, both specify the same field.
+ * -y with -m
+ * -y displays the whole year, -m displays a single month.
+ * -y with a given month
+ * -y displays the whole year, the given month displays a single
+ * month.
+ * -y with -A or -B
+ * -y displays the whole year, -A and -B display extra months.
+ */
+
+ /* -3 together with -A or -B. */
+ if (flag_3months && (flag_after || flag_before))
+ errx(EX_USAGE, "-3 together with -A and -B is not supported.");
+ /* -3 together with -y. */
+ if (flag_3months && flag_wholeyear)
+ errx(EX_USAGE, "-3 together with -y is not supported.");
+ /* -3 together with givenyear but no givenmonth. */
+ if (flag_3months && flag_givenyear &&
+ !(flag_givenmonth || flag_specifiedmonth))
+ errx(EX_USAGE,
+ "-3 together with a given year but no given month is "
+ "not supported.");
+ /* -m together with xx xxxx. */
+ if (flag_specifiedmonth && flag_givenmonth)
+ errx(EX_USAGE,
+ "-m together with a given month is not supported.");
+ /* -y together with -m. */
+ if (flag_wholeyear && flag_specifiedmonth)
+ errx(EX_USAGE, "-y together with -m is not supported.");
+ /* -y together with xx xxxx. */
+ if (flag_wholeyear && flag_givenmonth)
+ errx(EX_USAGE, "-y together a given month is not supported.");
+ /* -y together with -A or -B. */
+ if (flag_wholeyear && (flag_before > 0 || flag_after > 0))
+ errx(EX_USAGE, "-y together a -A or -B is not supported.");
+ /* The rest should be fine. */
+
+ /* Select the period to display, in order of increasing priority .*/
+ if (flag_wholeyear ||
+ (flag_givenyear && !(flag_givenmonth || flag_specifiedmonth))) {
+ m = 1;
+ before = 0;
+ after = 11;
+ }
+ if (flag_givenyear && flag_givenmonth) {
+ before = 0;
+ after = 0;
+ }
+ if (flag_specifiedmonth) {
+ before = 0;
+ after = 0;
+ }
+ if (flag_before) {
+ before = flag_before;
+ }
+ if (flag_after) {
+ after = flag_after;
+ }
+ if (flag_3months) {
+ before = 1;
+ after = 1;
+ }
+ if (after == -1)
+ after = 0;
+ if (before == -1)
+ before = 0;
+
+ /* Highlight a specified day or today .*/
+ if (flag_highlightdate != NULL) {
+ dt.y = strtol(flag_highlightdate, NULL, 10);
+ dt.m = strtol(flag_highlightdate + 5, NULL, 10);
+ dt.d = strtol(flag_highlightdate + 8, NULL, 10);
+ } else {
+ time_t t;
+ struct tm *tm1;
+
+ t = time(NULL);
+ tm1 = localtime(&t);
+ dt.y = tm1->tm_year + 1900;
+ dt.m = tm1->tm_mon + 1;
+ dt.d = tm1->tm_mday;
+ }
+ highlightdate = sndaysb(&dt);
+
+ /* And now we finally start to calculate and output calendars. */
+ if (flag_easter)
+ printeaster(y, flag_julian_cal, flag_orthodox);
+ else
+ if (flag_backward)
+ monthrangeb(y, m, flag_julian_day, before, after);
+ else
+ monthranger(y, m, flag_julian_day, before, after);
+ return (0);
+}
+
+static void
+usage(void)
+{
+
+ fputs(
+"Usage: cal [general options] [-hjy] [[month] year]\n"
+" cal [general options] [-hj] [-m month] [year]\n"
+" ncal [general options] [-hJjpwy] [-s country_code] [[month] year]\n"
+" ncal [general options] [-hJeo] [year]\n"
+"General options: [-NC3] [-A months] [-B months]\n"
+"For debug the highlighting: [-H yyyy-mm-dd] [-d yyyy-mm]\n",
+ stderr);
+ exit(EX_USAGE);
+}
+
+/* Print the assumed switches for all countries. */
+static void
+printcc(void)
+{
+ struct djswitch *p;
+ int n; /* number of lines to print */
+ int m; /* offset from left to right table entry on the same line */
+
+#define FSTR "%c%s %-15s%4d-%02d-%02d"
+#define DFLT(p) ((p) == dftswitch ? '*' : ' ')
+#define FSTRARG(p) DFLT(p), (p)->cc, (p)->nm, (p)->dt.y, (p)->dt.m, (p)->dt.d
+
+ n = sizeof(switches) / sizeof(struct djswitch);
+ m = (n + 1) / 2;
+ n /= 2;
+ for (p = switches; p != switches + n; p++)
+ printf(FSTR" "FSTR"\n", FSTRARG(p), FSTRARG(p+m));
+ if (m != n)
+ printf(FSTR"\n", FSTRARG(p));
+}
+
+/* Print the date of easter sunday. */
+static void
+printeaster(int y, int julian, int orthodox)
+{
+ date dt;
+ struct tm tm;
+ char buf[MAX_WIDTH];
+ static int d_first = -1;
+
+ if (d_first < 0)
+ d_first = (*nl_langinfo(D_MD_ORDER) == 'd');
+ /* force orthodox easter for years before 1583 */
+ if (y < 1583)
+ orthodox = 1;
+
+ if (orthodox)
+ if (julian)
+ easteroj(y, &dt);
+ else
+ easterog(y, &dt);
+ else
+ easterg(y, &dt);
+
+ memset(&tm, 0, sizeof(tm));
+ tm.tm_year = dt.y - 1900;
+ tm.tm_mon = dt.m - 1;
+ tm.tm_mday = dt.d;
+ strftime(buf, sizeof(buf), d_first ? "%e %B %Y" : "%B %e %Y", &tm);
+ printf("%s\n", buf);
+}
+
+#define MW(mw, me) ((mw) + me)
+#define DECREASEMONTH(m, y) \
+ if (--m == 0) { \
+ m = 12; \
+ y--; \
+ }
+#define INCREASEMONTH(m, y) \
+ if (++(m) == 13) { \
+ (m) = 1; \
+ (y)++; \
+ }
+#define M2Y(m) ((m) / 12)
+#define M2M(m) (1 + (m) % 12)
+
+/* Print all months for the period in the range [ before .. y-m .. after ]. */
+static void
+monthrangeb(int y, int m, int jd_flag, int before, int after)
+{
+ struct monthlines year[12];
+ struct weekdays wds;
+ char s[MAX_WIDTH], t[MAX_WIDTH];
+ wchar_t ws[MAX_WIDTH], ws1[MAX_WIDTH];
+ const char *wdss;
+ int i, j;
+ int mpl;
+ int mw;
+ int m1, m2;
+ int printyearheader;
+ int prevyear = -1;
+
+ mpl = jd_flag ? 2 : 3;
+ mw = jd_flag ? MONTH_WIDTH_B_J : MONTH_WIDTH_B;
+ wdss = (mpl == 2) ? " " : "";
+
+ while (before != 0) {
+ DECREASEMONTH(m, y);
+ before--;
+ after++;
+ }
+ m1 = y * 12 + m - 1;
+ m2 = m1 + after;
+
+ mkweekdays(&wds);
+
+ /*
+ * The year header is printed when there are more than 'mpl' months
+ * and if the first month is a multitude of 'mpl'.
+ * If not, it will print the year behind every month.
+ */
+ printyearheader = (after >= mpl - 1) && (M2M(m1) - 1) % mpl == 0;
+
+ m = m1;
+ while (m <= m2) {
+ int count = 0;
+ for (i = 0; i != mpl && m + i <= m2; i++) {
+ mkmonthb(M2Y(m + i), M2M(m + i) - 1, jd_flag, year + i);
+ count++;
+ }
+
+ /* Empty line between two rows of months */
+ if (m != m1)
+ printf("\n");
+
+ /* Year at the top. */
+ if (printyearheader && M2Y(m) != prevyear) {
+ sprintf(s, "%d", M2Y(m));
+ printf("%s\n", center(t, s, mpl * mw));
+ prevyear = M2Y(m);
+ }
+
+ /* Month names. */
+ for (i = 0; i < count; i++)
+ if (printyearheader)
+ wprintf(L"%-*ls ",
+ mw, wcenter(ws, year[i].name, mw));
+ else {
+ swprintf(ws, sizeof(ws)/sizeof(ws[0]),
+ L"%-ls %d", year[i].name, M2Y(m + i));
+ wprintf(L"%-*ls ", mw, wcenter(ws1, ws, mw));
+ }
+ printf("\n");
+
+ /* Day of the week names. */
+ for (i = 0; i < count; i++) {
+ wprintf(L"%s%ls%s%ls%s%ls%s%ls%s%ls%s%ls%s%ls ",
+ wdss, wds.names[6], wdss, wds.names[0],
+ wdss, wds.names[1], wdss, wds.names[2],
+ wdss, wds.names[3], wdss, wds.names[4],
+ wdss, wds.names[5]);
+ }
+ printf("\n");
+
+ /* And the days of the month. */
+ for (i = 0; i != 6; i++) {
+ for (j = 0; j < count; j++)
+ printf("%-*s ",
+ MW(mw, year[j].extralen[i]),
+ year[j].lines[i]+1);
+ printf("\n");
+ }
+
+ m += mpl;
+ }
+}
+
+static void
+monthranger(int y, int m, int jd_flag, int before, int after)
+{
+ struct monthlines year[12];
+ struct weekdays wds;
+ char s[MAX_WIDTH], t[MAX_WIDTH];
+ int i, j;
+ int mpl;
+ int mw;
+ int m1, m2;
+ int prevyear = -1;
+ int printyearheader;
+
+ mpl = jd_flag ? 3 : 4;
+ mw = jd_flag ? MONTH_WIDTH_R_J : MONTH_WIDTH_R;
+
+ while (before != 0) {
+ DECREASEMONTH(m, y);
+ before--;
+ after++;
+ }
+ m1 = y * 12 + m - 1;
+ m2 = m1 + after;
+
+ mkweekdays(&wds);
+
+ /*
+ * The year header is printed when there are more than 'mpl' months
+ * and if the first month is a multitude of 'mpl'.
+ * If not, it will print the year behind every month.
+ */
+ printyearheader = (after >= mpl - 1) && (M2M(m1) - 1) % mpl == 0;
+
+ m = m1;
+ while (m <= m2) {
+ int count = 0;
+ for (i = 0; i != mpl && m + i <= m2; i++) {
+ mkmonthr(M2Y(m + i), M2M(m + i) - 1, jd_flag, year + i);
+ count++;
+ }
+
+ /* Empty line between two rows of months. */
+ if (m != m1)
+ printf("\n");
+
+ /* Year at the top. */
+ if (printyearheader && M2Y(m) != prevyear) {
+ sprintf(s, "%d", M2Y(m));
+ printf("%s\n", center(t, s, mpl * mw));
+ prevyear = M2Y(m);
+ }
+
+ /* Month names. */
+ wprintf(L" ");
+ for (i = 0; i < count; i++)
+ if (printyearheader)
+ wprintf(L"%-*ls", mw, year[i].name);
+ else
+ wprintf(L"%-ls %-*d", year[i].name,
+ mw - wcslen(year[i].name) - 1, M2Y(m + i));
+ printf("\n");
+
+ /* And the days of the month. */
+ for (i = 0; i != 7; i++) {
+ /* Week day */
+ wprintf(L"%.2ls", wds.names[i]);
+
+ /* Full months */
+ for (j = 0; j < count; j++)
+ printf("%-*s",
+ MW(mw, year[j].extralen[i]),
+ year[j].lines[i]);
+ printf("\n");
+ }
+
+ /* Week numbers. */
+ if (flag_weeks) {
+ printf(" ");
+ for (i = 0; i < count; i++)
+ printf("%-*s", mw, year[i].weeks);
+ printf("\n");
+ }
+
+ m += mpl;
+ }
+ return;
+}
+
+static void
+mkmonthr(int y, int m, int jd_flag, struct monthlines *mlines)
+{
+
+ struct tm tm; /* for strftime printing local names of
+ * months */
+ date dt; /* handy date */
+ int dw; /* width of numbers */
+ int first; /* first day of month */
+ int firstm; /* first day of first week of month */
+ int i, j, k, l; /* just indices */
+ int last; /* the first day of next month */
+ int jan1 = 0; /* the first day of this year */
+ char *ds; /* pointer to day strings (daystr or
+ * jdaystr) */
+
+ /* Set name of month. */
+ memset(&tm, 0, sizeof(tm));
+ tm.tm_mon = m;
+ wcsftime(mlines->name, sizeof(mlines->name) / sizeof(mlines->name[0]),
+ L"%OB", &tm);
+ mlines->name[0] = towupper(mlines->name[0]);
+
+ /*
+ * Set first and last to the day number of the first day of this
+ * month and the first day of next month respectively. Set jan1 to
+ * the day number of the first day of this year.
+ */
+ first = firstday(y, m + 1);
+ if (m == 11)
+ last = firstday(y + 1, 1);
+ else
+ last = firstday(y, m + 2);
+
+ if (jd_flag)
+ jan1 = firstday(y, 1);
+
+ /*
+ * Set firstm to the day number of monday of the first week of
+ * this month. (This might be in the last month)
+ */
+ firstm = first - weekday(first);
+
+ /* Set ds (daystring) and dw (daywidth) according to the jd_flag. */
+ if (jd_flag) {
+ ds = jdaystr;
+ dw = 4;
+ } else {
+ ds = daystr;
+ dw = 3;
+ }
+
+ /*
+ * Fill the lines with day of month or day of year (julian day)
+ * line index: i, each line is one weekday. column index: j, each
+ * column is one day number. print column index: k.
+ */
+ for (i = 0; i != 7; i++) {
+ l = 0;
+ for (j = firstm + i, k = 0; j < last; j += 7, k += dw) {
+ if (j >= first) {
+ if (jd_flag)
+ dt.d = j - jan1 + 1;
+ else
+ sdater(j, &dt);
+ if (j == highlightdate && !flag_nohighlight
+ && isatty(STDOUT_FILENO))
+ highlight(mlines->lines[i] + k,
+ ds + dt.d * dw, dw, &l);
+ else
+ memcpy(mlines->lines[i] + k + l,
+ ds + dt.d * dw, dw);
+ } else
+ memcpy(mlines->lines[i] + k + l, " ", dw);
+ }
+ mlines->lines[i][k + l] = '\0';
+ mlines->extralen[i] = l;
+ }
+
+ /* fill the weeknumbers. */
+ if (flag_weeks) {
+ for (j = firstm, k = 0; j < last; k += dw, j += 7)
+ if (j <= nswitch)
+ memset(mlines->weeks + k, ' ', dw);
+ else
+ memcpy(mlines->weeks + k,
+ ds + week(j, &i)*dw, dw);
+ mlines->weeks[k] = '\0';
+ }
+}
+
+static void
+mkmonthb(int y, int m, int jd_flag, struct monthlines *mlines)
+{
+
+ struct tm tm; /* for strftime printing local names of
+ * months */
+ date dt; /* handy date */
+ int dw; /* width of numbers */
+ int first; /* first day of month */
+ int firsts; /* sunday of first week of month */
+ int i, j, k, l; /* just indices */
+ int jan1 = 0; /* the first day of this year */
+ int last; /* the first day of next month */
+ char *ds; /* pointer to day strings (daystr or
+ * jdaystr) */
+
+ /* Set ds (daystring) and dw (daywidth) according to the jd_flag */
+ if (jd_flag) {
+ ds = jdaystr;
+ dw = 4;
+ } else {
+ ds = daystr;
+ dw = 3;
+ }
+
+ /* Set name of month centered. */
+ memset(&tm, 0, sizeof(tm));
+ tm.tm_mon = m;
+ wcsftime(mlines->name, sizeof(mlines->name) / sizeof(mlines->name[0]),
+ L"%OB", &tm);
+ mlines->name[0] = towupper(mlines->name[0]);
+
+ /*
+ * Set first and last to the day number of the first day of this
+ * month and the first day of next month respectively. Set jan1 to
+ * the day number of Jan 1st of this year.
+ */
+ dt.y = y;
+ dt.m = m + 1;
+ dt.d = 1;
+ first = sndaysb(&dt);
+ if (m == 11) {
+ dt.y = y + 1;
+ dt.m = 1;
+ dt.d = 1;
+ } else {
+ dt.y = y;
+ dt.m = m + 2;
+ dt.d = 1;
+ }
+ last = sndaysb(&dt);
+
+ if (jd_flag) {
+ dt.y = y;
+ dt.m = 1;
+ dt.d = 1;
+ jan1 = sndaysb(&dt);
+ }
+
+ /*
+ * Set firsts to the day number of sunday of the first week of
+ * this month. (This might be in the last month)
+ */
+ firsts = first - (weekday(first)+1) % 7;
+
+ /*
+ * Fill the lines with day of month or day of year (Julian day)
+ * line index: i, each line is one week. column index: j, each
+ * column is one day number. print column index: k.
+ */
+ for (i = 0; i != 6; i++) {
+ l = 0;
+ for (j = firsts + 7 * i, k = 0; j < last && k != dw * 7;
+ j++, k += dw) {
+ if (j >= first) {
+ if (jd_flag)
+ dt.d = j - jan1 + 1;
+ else
+ sdateb(j, &dt);
+ if (j == highlightdate && !flag_nohighlight)
+ highlight(mlines->lines[i] + k,
+ ds + dt.d * dw, dw, &l);
+ else
+ memcpy(mlines->lines[i] + k + l,
+ ds + dt.d * dw, dw);
+ } else
+ memcpy(mlines->lines[i] + k + l, " ", dw);
+ }
+ if (k == 0)
+ mlines->lines[i][1] = '\0';
+ else
+ mlines->lines[i][k + l] = '\0';
+ mlines->extralen[i] = l;
+ }
+}
+
+/* Put the local names of weekdays into the wds. */
+static void
+mkweekdays(struct weekdays *wds)
+{
+ int i, len, width = 0;
+ struct tm tm;
+ wchar_t buf[20];
+
+ memset(&tm, 0, sizeof(tm));
+
+ for (i = 0; i != 7; i++) {
+ tm.tm_wday = (i+1) % 7;
+ wcsftime(buf, sizeof(buf)/sizeof(buf[0]), L"%a", &tm);
+ for (len = 2; len > 0; --len) {
+ if ((width = wcswidth(buf, len)) <= 2)
+ break;
+ }
+ wmemset(wds->names[i], L'\0', 4);
+ if (width == 1)
+ wds->names[i][0] = L' ';
+ wcsncat(wds->names[i], buf, len);
+ wcsncat(wds->names[i], L" ", 1);
+ }
+}
+
+/*
+ * Compute the day number of the first existing date after the first day in
+ * month. (the first day in month and even the month might not exist!)
+ */
+static int
+firstday(int y, int m)
+{
+ date dt;
+ int nd;
+
+ dt.y = y;
+ dt.m = m;
+ dt.d = 1;
+ nd = sndaysr(&dt);
+ for (;;) {
+ sdater(nd, &dt);
+ if ((dt.m >= m && dt.y == y) || dt.y > y)
+ return (nd);
+ else
+ nd++;
+ }
+ /* NEVER REACHED */
+}
+
+/*
+ * Compute the number of days from date, obey the local switch from
+ * Julian to Gregorian if specified by the user.
+ */
+static int
+sndaysr(struct date *d)
+{
+
+ if (nswitch != 0)
+ if (nswitch < ndaysj(d))
+ return (ndaysg(d));
+ else
+ return (ndaysj(d));
+ else
+ return ndaysg(d);
+}
+
+/*
+ * Compute the number of days from date, obey the switch from
+ * Julian to Gregorian as used by UK and her colonies.
+ */
+static int
+sndaysb(struct date *d)
+{
+
+ if (nswitchb < ndaysj(d))
+ return (ndaysg(d));
+ else
+ return (ndaysj(d));
+}
+
+/* Inverse of sndays. */
+static struct date *
+sdater(int nd, struct date *d)
+{
+
+ if (nswitch < nd)
+ return (gdate(nd, d));
+ else
+ return (jdate(nd, d));
+}
+
+/* Inverse of sndaysb. */
+static struct date *
+sdateb(int nd, struct date *d)
+{
+
+ if (nswitchb < nd)
+ return (gdate(nd, d));
+ else
+ return (jdate(nd, d));
+}
+
+/* Center string t in string s of length w by putting enough leading blanks. */
+static char *
+center(char *s, char *t, int w)
+{
+ char blanks[MAX_WIDTH];
+
+ memset(blanks, ' ', sizeof(blanks));
+ sprintf(s, "%.*s%s", (int)(w - strlen(t)) / 2, blanks, t);
+ return (s);
+}
+
+/* Center string t in string s of length w by putting enough leading blanks. */
+static wchar_t *
+wcenter(wchar_t *s, wchar_t *t, int w)
+{
+ char blanks[MAX_WIDTH];
+
+ memset(blanks, ' ', sizeof(blanks));
+ swprintf(s, MAX_WIDTH, L"%.*s%ls", (int)(w - wcslen(t)) / 2, blanks, t);
+ return (s);
+}
+
+static int
+parsemonth(const char *s, int *m, int *y)
+{
+ int nm, ny;
+ char *cp;
+ struct tm tm;
+
+ nm = (int)strtol(s, &cp, 10);
+ if (cp != s) {
+ ny = *y;
+ if (*cp == '\0') {
+ ; /* no special action */
+ } else if (*cp == 'f' || *cp == 'F') {
+ if (nm <= *m)
+ ny++;
+ } else if (*cp == 'p' || *cp == 'P') {
+ if (nm >= *m)
+ ny--;
+ } else
+ return (1);
+ if (nm < 1 || nm > 12)
+ return 1;
+ *m = nm;
+ *y = ny;
+ return (0);
+ }
+ if (strptime(s, "%B", &tm) != NULL || strptime(s, "%b", &tm) != NULL) {
+ *m = tm.tm_mon + 1;
+ return (0);
+ }
+ return (1);
+}
+
+static void
+highlight(char *dst, char *src, int len, int *extralen)
+{
+ static int first = 1;
+ static const char *term_so, *term_se;
+
+ if (first) {
+ char tbuf[1024], cbuf[512], *b;
+
+ term_se = term_so = NULL;
+
+ /* On how to highlight on this type of terminal (if any). */
+ if (isatty(STDOUT_FILENO) && tgetent(tbuf, NULL) == 1) {
+ b = cbuf;
+ term_so = tgetstr("so", &b);
+ term_se = tgetstr("se", &b);
+ }
+
+ first = 0;
+ }
+
+ /*
+ * This check is not necessary, should have been handled before calling
+ * this function.
+ */
+ if (flag_nohighlight) {
+ memcpy(dst, src, len);
+ return;
+ }
+
+ /*
+ * If it is a real terminal, use the data from the termcap database.
+ */
+ if (term_so != NULL && term_se != NULL) {
+ /* separator. */
+ dst[0] = ' ';
+ dst++;
+ /* highlight on. */
+ memcpy(dst, term_so, strlen(term_so));
+ dst += strlen(term_so);
+ /* the actual text. (minus leading space) */
+ len--;
+ src++;
+ memcpy(dst, src, len);
+ dst += len;
+ /* highlight off. */
+ memcpy(dst, term_se, strlen(term_se));
+ *extralen = strlen(term_so) + strlen(term_se);
+ return;
+ }
+
+ /*
+ * Otherwise, print a _, backspace and the letter.
+ */
+ *extralen = 0;
+ /* skip leading space. */
+ src++;
+ len--;
+ /* separator. */
+ dst[0] = ' ';
+ dst++;
+ while (len > 0) {
+ /* _ and backspace. */
+ memcpy(dst, "_\010", 2);
+ dst += 2;
+ *extralen += 2;
+ /* the character. */
+ *dst++ = *src++;
+ len--;
+ }
+ return;
+}
diff --git a/misc_cmds/tsort/tsort.1 b/misc_cmds/tsort/tsort.1
new file mode 100644
index 0000000..a95793d
--- /dev/null
+++ b/misc_cmds/tsort/tsort.1
@@ -0,0 +1,90 @@
+.\" $NetBSD: tsort.1,v 1.7 1997/10/20 01:09:53 lukem Exp $
+.\"
+.\" Copyright (c) 1990, 1993, 1994
+.\" The Regents of the University of California. All rights reserved.
+.\"
+.\" This manual is derived from one contributed to Berkeley by
+.\" Michael Rendell of Memorial University of Newfoundland.
+.\"
+.\" 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.
+.\"
+.\" @(#)tsort.1 8.3 (Berkeley) 4/1/94
+.\"
+.Dd April 1, 1994
+.Dt TSORT 1
+.Os
+.Sh NAME
+.Nm tsort
+.Nd topological sort of a directed graph
+.Sh SYNOPSIS
+.Nm
+.Op Fl l
+.Op Fl q
+.Op Ar file
+.Sh DESCRIPTION
+.Nm
+takes a list of pairs of node names representing directed arcs in
+a graph and prints the nodes in topological order on standard output.
+Input is taken from the named
+.Ar file ,
+or from standard input if no file
+is given.
+.Pp
+Node names in the input are separated by white space and there must
+be an even number of node pairs.
+.Pp
+Presence of a node in a graph can be represented by an arc from the node
+to itself.
+This is useful when a node is not connected to any other nodes.
+.Pp
+If the graph contains a cycle (and therefore cannot be properly sorted),
+one of the arcs in the cycle is ignored and the sort continues.
+Cycles are reported on standard error.
+.Pp
+The options are as follows:
+.Bl -tag -width Ds
+.It Fl l
+Search for and display the longest cycle.
+Can take a very long time.
+.It Fl q
+Do not display informational messages about cycles. This is primarily
+intended for building libraries, where optimal ordering is not critical,
+and cycles occur often.
+.El
+.Sh SEE ALSO
+.Xr ar 1
+.Sh HISTORY
+A
+.Nm
+command appeared in
+.At v7 .
+This
+.Nm
+command and manual page are derived from sources contributed to Berkeley by
+Michael Rendell of Memorial University of Newfoundland.
diff --git a/misc_cmds/tsort/tsort.c b/misc_cmds/tsort/tsort.c
new file mode 100644
index 0000000..819f086
--- /dev/null
+++ b/misc_cmds/tsort/tsort.c
@@ -0,0 +1,443 @@
+/* $NetBSD: tsort.c,v 1.13 1998/08/25 20:59:42 ross Exp $ */
+
+/*
+ * Copyright (c) 1989, 1993, 1994
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Michael Rendell of Memorial University of Newfoundland.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+__COPYRIGHT("@(#) Copyright (c) 1989, 1993, 1994\n\
+ The Regents of the University of California. All rights reserved.\n");
+#endif /* not lint */
+
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)tsort.c 8.3 (Berkeley) 5/4/95";
+#endif
+__RCSID("$NetBSD: tsort.c,v 1.13 1998/08/25 20:59:42 ross Exp $");
+#endif /* not lint */
+
+#include <sys/types.h>
+
+#include <ctype.h>
+#include <db.h>
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+/*
+ * Topological sort. Input is a list of pairs of strings separated by
+ * white space (spaces, tabs, and/or newlines); strings are written to
+ * standard output in sorted order, one per line.
+ *
+ * usage:
+ * tsort [-l] [inputfile]
+ * If no input file is specified, standard input is read.
+ *
+ * Should be compatable with AT&T tsort HOWEVER the output is not identical
+ * (i.e. for most graphs there is more than one sorted order, and this tsort
+ * usually generates a different one then the AT&T tsort). Also, cycle
+ * reporting seems to be more accurate in this version (the AT&T tsort
+ * sometimes says a node is in a cycle when it isn't).
+ *
+ * Michael Rendell, michael@stretch.cs.mun.ca - Feb 26, '90
+ */
+#define HASHSIZE 53 /* doesn't need to be big */
+#define NF_MARK 0x1 /* marker for cycle detection */
+#define NF_ACYCLIC 0x2 /* this node is cycle free */
+#define NF_NODEST 0x4 /* Unreachable */
+
+typedef struct node_str NODE;
+
+struct node_str {
+ NODE **n_prevp; /* pointer to previous node's n_next */
+ NODE *n_next; /* next node in graph */
+ NODE **n_arcs; /* array of arcs to other nodes */
+ int n_narcs; /* number of arcs in n_arcs[] */
+ int n_arcsize; /* size of n_arcs[] array */
+ int n_refcnt; /* # of arcs pointing to this node */
+ int n_flags; /* NF_* */
+ char n_name[1]; /* name of this node */
+};
+
+typedef struct _buf {
+ char *b_buf;
+ int b_bsize;
+} BUF;
+
+DB *db;
+NODE *graph, **cycle_buf, **longest_cycle;
+int debug, longest, quiet;
+
+void add_arc __P((char *, char *));
+void clear_cycle __P((void));
+int find_cycle __P((NODE *, NODE *, int, int));
+NODE *get_node __P((char *));
+void *grow_buf __P((void *, int));
+int main __P((int, char **));
+void remove_node __P((NODE *));
+void tsort __P((void));
+void usage __P((void));
+
+int
+main(argc, argv)
+ int argc;
+ char *argv[];
+{
+ BUF *b;
+ int c, n;
+ FILE *fp;
+ int bsize, ch, nused;
+ BUF bufs[2];
+
+ fp = NULL;
+ while ((ch = getopt(argc, argv, "dlq")) != -1)
+ switch (ch) {
+ case 'd':
+ debug = 1;
+ break;
+ case 'l':
+ longest = 1;
+ break;
+ case 'q':
+ quiet = 1;
+ break;
+ case '?':
+ default:
+ usage();
+ }
+ argc -= optind;
+ argv += optind;
+
+ switch (argc) {
+ case 0:
+ fp = stdin;
+ break;
+ case 1:
+ if ((fp = fopen(*argv, "r")) == NULL)
+ err(1, "%s", *argv);
+ break;
+ default:
+ usage();
+ }
+
+ for (b = bufs, n = 2; --n >= 0; b++)
+ b->b_buf = grow_buf(NULL, b->b_bsize = 1024);
+
+ /* parse input and build the graph */
+ for (n = 0, c = getc(fp);;) {
+ while (c != EOF && isspace(c))
+ c = getc(fp);
+ if (c == EOF)
+ break;
+
+ nused = 0;
+ b = &bufs[n];
+ bsize = b->b_bsize;
+ do {
+ b->b_buf[nused++] = c;
+ if (nused == bsize)
+ b->b_buf = grow_buf(b->b_buf, bsize *= 2);
+ c = getc(fp);
+ } while (c != EOF && !isspace(c));
+
+ b->b_buf[nused] = '\0';
+ b->b_bsize = bsize;
+ if (n)
+ add_arc(bufs[0].b_buf, bufs[1].b_buf);
+ n = !n;
+ }
+ (void)fclose(fp);
+ if (n)
+ errx(1, "odd data count");
+
+ /* do the sort */
+ tsort();
+ exit(0);
+}
+
+/* double the size of oldbuf and return a pointer to the new buffer. */
+void *
+grow_buf(bp, size)
+ void *bp;
+ int size;
+{
+ if ((bp = realloc(bp, (u_int)size)) == NULL)
+ err(1, "realloc");
+ return (bp);
+}
+
+/*
+ * add an arc from node s1 to node s2 in the graph. If s1 or s2 are not in
+ * the graph, then add them.
+ */
+void
+add_arc(s1, s2)
+ char *s1, *s2;
+{
+ NODE *n1;
+ NODE *n2;
+ int bsize, i;
+
+ n1 = get_node(s1);
+
+ if (!strcmp(s1, s2))
+ return;
+
+ n2 = get_node(s2);
+
+ /*
+ * Check if this arc is already here.
+ */
+ for (i = 0; i < n1->n_narcs; i++)
+ if (n1->n_arcs[i] == n2)
+ return;
+ /*
+ * Add it.
+ */
+ if (n1->n_narcs == n1->n_arcsize) {
+ if (!n1->n_arcsize)
+ n1->n_arcsize = 10;
+ bsize = n1->n_arcsize * sizeof(*n1->n_arcs) * 2;
+ n1->n_arcs = grow_buf(n1->n_arcs, bsize);
+ n1->n_arcsize = bsize / sizeof(*n1->n_arcs);
+ }
+ n1->n_arcs[n1->n_narcs++] = n2;
+ ++n2->n_refcnt;
+}
+
+/* Find a node in the graph (insert if not found) and return a pointer to it. */
+NODE *
+get_node(name)
+ char *name;
+{
+ DBT data, key;
+ NODE *n;
+
+ if (db == NULL &&
+ (db = dbopen(NULL, O_RDWR, 0, DB_HASH, NULL)) == NULL)
+ err(1, "db: %s", name);
+
+ key.data = name;
+ key.size = strlen(name) + 1;
+
+ switch ((*db->get)(db, &key, &data, 0)) {
+ case 0:
+ memmove(&n, data.data, sizeof(n));
+ return (n);
+ case 1:
+ break;
+ default:
+ case -1:
+ err(1, "db: %s", name);
+ }
+
+ if ((n = malloc(sizeof(NODE) + key.size)) == NULL)
+ err(1, "malloc");
+
+ n->n_narcs = 0;
+ n->n_arcsize = 0;
+ n->n_arcs = NULL;
+ n->n_refcnt = 0;
+ n->n_flags = 0;
+ memmove(n->n_name, name, key.size);
+
+ /* Add to linked list. */
+ if ((n->n_next = graph) != NULL)
+ graph->n_prevp = &n->n_next;
+ n->n_prevp = &graph;
+ graph = n;
+
+ /* Add to hash table. */
+ data.data = &n;
+ data.size = sizeof(n);
+ if ((*db->put)(db, &key, &data, 0))
+ err(1, "db: %s", name);
+ return (n);
+}
+
+
+/*
+ * Clear the NODEST flag from all nodes.
+ */
+void
+clear_cycle()
+{
+ NODE *n;
+
+ for (n = graph; n != NULL; n = n->n_next)
+ n->n_flags &= ~NF_NODEST;
+}
+
+/* do topological sort on graph */
+void
+tsort()
+{
+ NODE *n, *next;
+ int cnt, i;
+
+ while (graph != NULL) {
+ /*
+ * Keep getting rid of simple cases until there are none left,
+ * if there are any nodes still in the graph, then there is
+ * a cycle in it.
+ */
+ do {
+ for (cnt = 0, n = graph; n != NULL; n = next) {
+ next = n->n_next;
+ if (n->n_refcnt == 0) {
+ remove_node(n);
+ ++cnt;
+ }
+ }
+ } while (graph != NULL && cnt);
+
+ if (graph == NULL)
+ break;
+
+ if (!cycle_buf) {
+ /*
+ * Allocate space for two cycle logs - one to be used
+ * as scratch space, the other to save the longest
+ * cycle.
+ */
+ for (cnt = 0, n = graph; n != NULL; n = n->n_next)
+ ++cnt;
+ cycle_buf = malloc((u_int)sizeof(NODE *) * cnt);
+ longest_cycle = malloc((u_int)sizeof(NODE *) * cnt);
+ if (cycle_buf == NULL || longest_cycle == NULL)
+ err(1, "malloc");
+ }
+ for (n = graph; n != NULL; n = n->n_next) {
+ if (!(n->n_flags & NF_ACYCLIC)) {
+ if ((cnt = find_cycle(n, n, 0, 0)) != 0) {
+ if (!quiet) {
+ warnx("cycle in data");
+ for (i = 0; i < cnt; i++)
+ warnx("%s",
+ longest_cycle[i]->n_name);
+ }
+ remove_node(n);
+ clear_cycle();
+ break;
+ } else {
+ /* to avoid further checks */
+ n->n_flags |= NF_ACYCLIC;
+ clear_cycle();
+ }
+ }
+ }
+ if (n == NULL)
+ errx(1, "internal error -- could not find cycle");
+ }
+}
+
+/* print node and remove from graph (does not actually free node) */
+void
+remove_node(n)
+ NODE *n;
+{
+ NODE **np;
+ int i;
+
+ (void)printf("%s\n", n->n_name);
+ for (np = n->n_arcs, i = n->n_narcs; --i >= 0; np++)
+ --(*np)->n_refcnt;
+ n->n_narcs = 0;
+ *n->n_prevp = n->n_next;
+ if (n->n_next)
+ n->n_next->n_prevp = n->n_prevp;
+}
+
+
+/* look for the longest? cycle from node from to node to. */
+int
+find_cycle(from, to, longest_len, depth)
+ NODE *from, *to;
+ int depth, longest_len;
+{
+ NODE **np;
+ int i, len;
+
+ /*
+ * avoid infinite loops and ignore portions of the graph known
+ * to be acyclic
+ */
+ if (from->n_flags & (NF_NODEST|NF_MARK|NF_ACYCLIC))
+ return (0);
+ from->n_flags |= NF_MARK;
+
+ for (np = from->n_arcs, i = from->n_narcs; --i >= 0; np++) {
+ cycle_buf[depth] = *np;
+ if (*np == to) {
+ if (depth + 1 > longest_len) {
+ longest_len = depth + 1;
+ (void)memcpy((char *)longest_cycle,
+ (char *)cycle_buf,
+ longest_len * sizeof(NODE *));
+ }
+ } else {
+ if ((*np)->n_flags & (NF_MARK|NF_ACYCLIC|NF_NODEST))
+ continue;
+ len = find_cycle(*np, to, longest_len, depth + 1);
+
+ if (debug)
+ (void)printf("%*s %s->%s %d\n", depth, "",
+ from->n_name, to->n_name, len);
+
+ if (len == 0)
+ (*np)->n_flags |= NF_NODEST;
+
+ if (len > longest_len)
+ longest_len = len;
+
+ if (len > 0 && !longest)
+ break;
+ }
+ }
+ from->n_flags &= ~NF_MARK;
+ return (longest_len);
+}
+
+void
+usage()
+{
+ (void)fprintf(stderr, "usage: tsort [-lq] [file]\n");
+ exit(1);
+}
diff --git a/misc_cmds/units/pathnames.h b/misc_cmds/units/pathnames.h
new file mode 100644
index 0000000..b8c1d3d
--- /dev/null
+++ b/misc_cmds/units/pathnames.h
@@ -0,0 +1,33 @@
+/* $FreeBSD: src/usr.bin/units/pathnames.h,v 1.4.56.1.2.1 2009/10/25 01:10:29 kensmith Exp $ */
+
+/*
+ * Copyright (c) 1993 Christopher G. Demetriou
+ * 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 Christopher G. Demetriou.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission
+ *
+ * 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 AUTHOR 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 _PATH_UNITSLIB "/usr/share/misc/units.lib"
diff --git a/misc_cmds/units/units.1 b/misc_cmds/units/units.1
new file mode 100644
index 0000000..80b1333
--- /dev/null
+++ b/misc_cmds/units/units.1
@@ -0,0 +1,181 @@
+.\" $FreeBSD: src/usr.bin/units/units.1,v 1.18.22.1.2.1 2009/10/25 01:10:29 kensmith Exp $
+.Dd July 14, 1993
+.Dt UNITS 1
+.Os
+.Sh NAME
+.Nm units
+.Nd conversion program
+.Sh SYNOPSIS
+.Nm
+.Op Fl f Ar filename
+.Op Fl qv
+.Op Ar from-unit to-unit
+.Sh OPTIONS
+The following options are available:
+.Bl -tag -width indent
+.It Fl f Ar filename
+Specify the name of the units data file to load.
+.It Fl q
+Suppress prompting of the user for units and the display of statistics
+about the number of units loaded.
+.It Fl v
+Print the version number.
+.It Ar from-unit to-unit
+Allow a single unit conversion to be done directly from the command
+line.
+The program will not print prompts.
+It will print out the
+result of the single specified conversion.
+.El
+.Sh DESCRIPTION
+The
+.Nm
+program converts quantities expressed in various scales to
+their equivalents in other scales.
+The
+.Nm
+program can only
+handle multiplicative scale changes.
+It cannot convert Celsius
+to Fahrenheit, for example.
+It works interactively by prompting
+the user for input:
+.Bd -literal
+ You have: meters
+ You want: feet
+ * 3.2808399
+ / 0.3048
+
+ You have: cm^3
+ You want: gallons
+ * 0.00026417205
+ / 3785.4118
+
+ You have: meters/s
+ You want: furlongs/fortnight
+ * 6012.8848
+ / 0.00016630952
+
+ You have: 1|2 inch
+ You want: cm
+ * 1.27
+ / 0.78740157
+.Ed
+.Pp
+Powers of units can be specified using the '^' character as shown in
+the example, or by simple concatenation: 'cm3' is equivalent to 'cm^3'.
+Multiplication of units can be specified by using spaces, a dash or
+an asterisk.
+Division of units is indicated by the slash ('/').
+Note that multiplication has a higher precedence than division,
+so 'm/s/s' is the same as 'm/s^2' or 'm/s s'.
+Division of numbers
+must be indicated using the vertical bar ('|').
+To convert half a
+meter, you would write '1|2 meter'.
+If you write '1/2 meter' then the
+units program would interpret that as equivalent to '0.5/meter'.
+If you enter incompatible unit types, the units program will
+print a message indicating that the units are not conformable and
+it will display the reduced form for each unit:
+.Bd -literal
+ You have: ergs/hour
+ You want: fathoms kg^2 / day
+ conformability error
+ 2.7777778e-11 kg m^2 / sec^3
+ 2.1166667e-05 kg^2 m / sec
+.Ed
+.Pp
+The conversion information is read from a units data file.
+The default
+file includes definitions for most familiar units, abbreviations and
+metric prefixes.
+Some constants of nature included are:
+.Pp
+.Bl -column -offset indent -compact "mercury"
+.It "pi ratio of circumference to diameter
+.It "c speed of light
+.It "e charge on an electron
+.It "g acceleration of gravity
+.It "force same as g
+.It "mole Avogadro's number
+.It "water pressure per unit height of water
+.It "mercury pressure per unit height of mercury
+.It "au astronomical unit
+.El
+.Pp
+The unit 'pound' is a unit of mass.
+Compound names are run together
+so 'pound force' is a unit of force.
+The unit 'ounce' is also a unit
+of mass.
+The fluid ounce is 'floz'.
+British units that differ from
+their US counterparts are prefixed with 'br', and currency is prefixed
+with its country name: 'belgiumfranc', 'britainpound'.
+When searching
+for a unit, if the specified string does not appear exactly as a unit
+name, then
+.Nm
+will try to remove a trailing 's' or a
+trailing 'es' and check again for a match.
+.Pp
+To find out what units are available read the standard units file.
+If you want to add your own units you can supply your own file.
+A unit is specified on a single line by
+giving its name and an equivalence.
+Be careful to define
+new units in terms of old ones so that a reduction leads to the
+primitive units which are marked with '!' characters.
+The
+.Nm
+program will not detect infinite loops that could be caused
+by careless unit definitions.
+Comments in the unit definition file
+begin with a '/' character at the beginning of a line.
+.Pp
+Prefixes are defined in the same was as standard units, but with
+a trailing dash at the end of the prefix name.
+If a unit is not found
+even after removing trailing 's' or 'es', then it will be checked
+against the list of prefixes.
+Prefixes will be removed until a legal
+base unit is identified.
+.Pp
+Here is an example of a short units file that defines some basic
+units.
+.Pp
+.Bl -column -offset indent -compact "minute"
+.It "m !a!
+.It "sec !b!
+.It "micro- 1e-6
+.It "minute 60 sec
+.It "hour 60 min
+.It "inch 0.0254 m
+.It "ft 12 inches
+.It "mile 5280 ft
+.El
+.Sh FILES
+.Bl -tag -width /usr/share/misc/units.lib -compact
+.It Pa /usr/share/misc/units.lib
+the standard units library
+.El
+.Sh AUTHORS
+.An Adrian Mariano Aq adrian@cam.cornell.edu
+.Sh BUGS
+The effect of including a '/' in a prefix is surprising.
+.Pp
+Exponents entered by the user can be only one digit.
+You can work around this by multiplying several terms.
+.Pp
+The user must use | to indicate division of numbers and / to
+indicate division of symbols.
+This distinction should not
+be necessary.
+.Pp
+The program contains various arbitrary limits on the length
+of the units converted and on the length of the data file.
+.Pp
+The program should use a hash table to store units so that
+it does not take so long to load the units list and check
+for duplication.
diff --git a/misc_cmds/units/units.c b/misc_cmds/units/units.c
new file mode 100644
index 0000000..169c79b
--- /dev/null
+++ b/misc_cmds/units/units.c
@@ -0,0 +1,749 @@
+/*
+ * units.c Copyright (c) 1993 by Adrian Mariano (adrian@cam.cornell.edu)
+ *
+ * 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. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ * Disclaimer: This software is provided by the author "as is". The author
+ * shall not be liable for any damages caused in any way by this software.
+ *
+ * I would appreciate (though I do not require) receiving a copy of any
+ * improvements you might make to this program.
+ */
+
+#ifndef lint
+static const char rcsid[] =
+ "$FreeBSD: src/usr.bin/units/units.c,v 1.11.2.1.2.1 2009/10/25 01:10:29 kensmith Exp $";
+#endif /* not lint */
+
+#include <ctype.h>
+#include <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "pathnames.h"
+
+#define VERSION "1.0"
+
+#ifndef UNITSFILE
+#define UNITSFILE _PATH_UNITSLIB
+#endif
+
+#define MAXUNITS 1000
+#define MAXPREFIXES 100
+
+#define MAXSUBUNITS 500
+
+#define PRIMITIVECHAR '!'
+
+const char *powerstring = "^";
+
+struct {
+ char *uname;
+ char *uval;
+} unittable[MAXUNITS];
+
+struct unittype {
+ char *numerator[MAXSUBUNITS];
+ char *denominator[MAXSUBUNITS];
+ double factor;
+ double offset;
+ int quantity;
+};
+
+struct {
+ char *prefixname;
+ char *prefixval;
+} prefixtable[MAXPREFIXES];
+
+
+char NULLUNIT[] = "";
+
+#ifdef MSDOS
+#define SEPARATOR ";"
+#else
+#define SEPARATOR ":"
+#endif
+
+int unitcount;
+int prefixcount;
+
+char *dupstr(const char *str);
+void readunits(const char *userfile);
+void initializeunit(struct unittype * theunit);
+int addsubunit(char *product[], char *toadd);
+void showunit(struct unittype * theunit);
+void zeroerror(void);
+int addunit(struct unittype *theunit, char *toadd, int flip, int quantity);
+int compare(const void *item1, const void *item2);
+void sortunit(struct unittype * theunit);
+void cancelunit(struct unittype * theunit);
+char *lookupunit(const char *unit);
+int reduceproduct(struct unittype * theunit, int flip);
+int reduceunit(struct unittype * theunit);
+int compareproducts(char **one, char **two);
+int compareunits(struct unittype * first, struct unittype * second);
+int completereduce(struct unittype * unit);
+void showanswer(struct unittype * have, struct unittype * want);
+void usage(void);
+
+char *
+dupstr(const char *str)
+{
+ char *ret;
+
+ ret = malloc(strlen(str) + 1);
+ if (!ret)
+ errx(3, "memory allocation error");
+ strcpy(ret, str);
+ return (ret);
+}
+
+
+void
+readunits(const char *userfile)
+{
+ FILE *unitfile;
+ char line[512], *lineptr;
+ int len, linenum, i;
+
+ unitcount = 0;
+ linenum = 0;
+
+ if (userfile) {
+ unitfile = fopen(userfile, "rt");
+ if (!unitfile)
+ errx(1, "unable to open units file '%s'", userfile);
+ }
+ else {
+ unitfile = fopen(UNITSFILE, "rt");
+ if (!unitfile) {
+ char *direc, *env;
+ char filename[1000];
+
+ env = getenv("PATH");
+ if (env) {
+ direc = strtok(env, SEPARATOR);
+ while (direc) {
+ snprintf(filename, sizeof(filename),
+ "%s/%s", direc, UNITSFILE);
+ unitfile = fopen(filename, "rt");
+ if (unitfile)
+ break;
+ direc = strtok(NULL, SEPARATOR);
+ }
+ }
+ if (!unitfile)
+ errx(1, "can't find units file '%s'", UNITSFILE);
+ }
+ }
+ while (!feof(unitfile)) {
+ if (!fgets(line, sizeof(line), unitfile))
+ break;
+ linenum++;
+ lineptr = line;
+ if (*lineptr == '/')
+ continue;
+ lineptr += strspn(lineptr, " \n\t");
+ len = strcspn(lineptr, " \n\t");
+ lineptr[len] = 0;
+ if (!strlen(lineptr))
+ continue;
+ if (lineptr[strlen(lineptr) - 1] == '-') { /* it's a prefix */
+ if (prefixcount == MAXPREFIXES) {
+ warnx("memory for prefixes exceeded in line %d", linenum);
+ continue;
+ }
+ lineptr[strlen(lineptr) - 1] = 0;
+ prefixtable[prefixcount].prefixname = dupstr(lineptr);
+ for (i = 0; i < prefixcount; i++)
+ if (!strcmp(prefixtable[i].prefixname, lineptr)) {
+ warnx("redefinition of prefix '%s' on line %d ignored",
+ lineptr, linenum);
+ continue;
+ }
+ lineptr += len + 1;
+ lineptr += strspn(lineptr, " \n\t");
+ len = strcspn(lineptr, "\n\t");
+ if (len == 0) {
+ warnx("unexpected end of prefix on line %d",
+ linenum);
+ continue;
+ }
+ lineptr[len] = 0;
+ prefixtable[prefixcount++].prefixval = dupstr(lineptr);
+ }
+ else { /* it's not a prefix */
+ if (unitcount == MAXUNITS) {
+ warnx("memory for units exceeded in line %d", linenum);
+ continue;
+ }
+ unittable[unitcount].uname = dupstr(lineptr);
+ for (i = 0; i < unitcount; i++)
+ if (!strcmp(unittable[i].uname, lineptr)) {
+ warnx("redefinition of unit '%s' on line %d ignored",
+ lineptr, linenum);
+ continue;
+ }
+ lineptr += len + 1;
+ lineptr += strspn(lineptr, " \n\t");
+ if (!strlen(lineptr)) {
+ warnx("unexpected end of unit on line %d",
+ linenum);
+ continue;
+ }
+ len = strcspn(lineptr, "\n\t");
+ lineptr[len] = 0;
+ unittable[unitcount++].uval = dupstr(lineptr);
+ }
+ }
+ fclose(unitfile);
+}
+
+void
+initializeunit(struct unittype * theunit)
+{
+ theunit->numerator[0] = theunit->denominator[0] = NULL;
+ theunit->factor = 1.0;
+ theunit->offset = 0.0;
+ theunit->quantity = 0;
+}
+
+
+int
+addsubunit(char *product[], char *toadd)
+{
+ char **ptr;
+
+ for (ptr = product; *ptr && *ptr != NULLUNIT; ptr++);
+ if (ptr >= product + MAXSUBUNITS) {
+ warnx("memory overflow in unit reduction");
+ return 1;
+ }
+ if (!*ptr)
+ *(ptr + 1) = 0;
+ *ptr = dupstr(toadd);
+ return 0;
+}
+
+
+void
+showunit(struct unittype * theunit)
+{
+ char **ptr;
+ int printedslash;
+ int counter = 1;
+
+ printf("\t%.8g", theunit->factor);
+ if (theunit->offset)
+ printf("&%.8g", theunit->offset);
+ for (ptr = theunit->numerator; *ptr; ptr++) {
+ if (ptr > theunit->numerator && **ptr &&
+ !strcmp(*ptr, *(ptr - 1)))
+ counter++;
+ else {
+ if (counter > 1)
+ printf("%s%d", powerstring, counter);
+ if (**ptr)
+ printf(" %s", *ptr);
+ counter = 1;
+ }
+ }
+ if (counter > 1)
+ printf("%s%d", powerstring, counter);
+ counter = 1;
+ printedslash = 0;
+ for (ptr = theunit->denominator; *ptr; ptr++) {
+ if (ptr > theunit->denominator && **ptr &&
+ !strcmp(*ptr, *(ptr - 1)))
+ counter++;
+ else {
+ if (counter > 1)
+ printf("%s%d", powerstring, counter);
+ if (**ptr) {
+ if (!printedslash)
+ printf(" /");
+ printedslash = 1;
+ printf(" %s", *ptr);
+ }
+ counter = 1;
+ }
+ }
+ if (counter > 1)
+ printf("%s%d", powerstring, counter);
+ printf("\n");
+}
+
+
+void
+zeroerror(void)
+{
+ warnx("unit reduces to zero");
+}
+
+/*
+ Adds the specified string to the unit.
+ Flip is 0 for adding normally, 1 for adding reciprocal.
+ Quantity is 1 if this is a quantity to be converted rather than a pure unit.
+
+ Returns 0 for successful addition, nonzero on error.
+*/
+
+int
+addunit(struct unittype * theunit, char *toadd, int flip, int quantity)
+{
+ char *scratch, *savescr;
+ char *item;
+ char *divider, *slash, *offset;
+ int doingtop;
+
+ if (!strlen(toadd))
+ return 1;
+
+ savescr = scratch = dupstr(toadd);
+ for (slash = scratch + 1; *slash; slash++)
+ if (*slash == '-' &&
+ (tolower(*(slash - 1)) != 'e' ||
+ !strchr(".0123456789", *(slash + 1))))
+ *slash = ' ';
+ slash = strchr(scratch, '/');
+ if (slash)
+ *slash = 0;
+ doingtop = 1;
+ do {
+ item = strtok(scratch, " *\t\n/");
+ while (item) {
+ if (strchr("0123456789.", *item)) { /* item is a number */
+ double num, offsetnum;
+
+ if (quantity)
+ theunit->quantity = 1;
+
+ offset = strchr(item, '&');
+ if (offset) {
+ *offset = 0;
+ offsetnum = atof(offset+1);
+ } else
+ offsetnum = 0.0;
+
+ divider = strchr(item, '|');
+ if (divider) {
+ *divider = 0;
+ num = atof(item);
+ if (!num) {
+ zeroerror();
+ return 1;
+ }
+ if (doingtop ^ flip) {
+ theunit->factor *= num;
+ theunit->offset *= num;
+ } else {
+ theunit->factor /= num;
+ theunit->offset /= num;
+ }
+ num = atof(divider + 1);
+ if (!num) {
+ zeroerror();
+ return 1;
+ }
+ if (doingtop ^ flip) {
+ theunit->factor /= num;
+ theunit->offset /= num;
+ } else {
+ theunit->factor *= num;
+ theunit->offset *= num;
+ }
+ }
+ else {
+ num = atof(item);
+ if (!num) {
+ zeroerror();
+ return 1;
+ }
+ if (doingtop ^ flip) {
+ theunit->factor *= num;
+ theunit->offset *= num;
+ } else {
+ theunit->factor /= num;
+ theunit->offset /= num;
+ }
+ }
+ if (doingtop ^ flip)
+ theunit->offset += offsetnum;
+ }
+ else { /* item is not a number */
+ int repeat = 1;
+
+ if (strchr("23456789",
+ item[strlen(item) - 1])) {
+ repeat = item[strlen(item) - 1] - '0';
+ item[strlen(item) - 1] = 0;
+ }
+ for (; repeat; repeat--)
+ if (addsubunit(doingtop ^ flip ? theunit->numerator : theunit->denominator, item))
+ return 1;
+ }
+ item = strtok(NULL, " *\t/\n");
+ }
+ doingtop--;
+ if (slash) {
+ scratch = slash + 1;
+ }
+ else
+ doingtop--;
+ } while (doingtop >= 0);
+ free(savescr);
+ return 0;
+}
+
+
+int
+compare(const void *item1, const void *item2)
+{
+ return strcmp(*(const char * const *)item1, *(const char * const *)item2);
+}
+
+
+void
+sortunit(struct unittype * theunit)
+{
+ char **ptr;
+ unsigned int count;
+
+ for (count = 0, ptr = theunit->numerator; *ptr; ptr++, count++);
+ qsort(theunit->numerator, count, sizeof(char *), compare);
+ for (count = 0, ptr = theunit->denominator; *ptr; ptr++, count++);
+ qsort(theunit->denominator, count, sizeof(char *), compare);
+}
+
+
+void
+cancelunit(struct unittype * theunit)
+{
+ char **den, **num;
+ int comp;
+
+ den = theunit->denominator;
+ num = theunit->numerator;
+
+ while (*num && *den) {
+ comp = strcmp(*den, *num);
+ if (!comp) {
+/* if (*den!=NULLUNIT) free(*den);
+ if (*num!=NULLUNIT) free(*num);*/
+ *den++ = NULLUNIT;
+ *num++ = NULLUNIT;
+ }
+ else if (comp < 0)
+ den++;
+ else
+ num++;
+ }
+}
+
+
+
+
+/*
+ Looks up the definition for the specified unit.
+ Returns a pointer to the definition or a null pointer
+ if the specified unit does not appear in the units table.
+*/
+
+static char buffer[100]; /* buffer for lookupunit answers with
+ prefixes */
+
+char *
+lookupunit(const char *unit)
+{
+ int i;
+ char *copy;
+
+ for (i = 0; i < unitcount; i++) {
+ if (!strcmp(unittable[i].uname, unit))
+ return unittable[i].uval;
+ }
+
+ if (unit[strlen(unit) - 1] == '^') {
+ copy = dupstr(unit);
+ copy[strlen(copy) - 1] = 0;
+ for (i = 0; i < unitcount; i++) {
+ if (!strcmp(unittable[i].uname, copy)) {
+ strlcpy(buffer, copy, sizeof(buffer));
+ free(copy);
+ return buffer;
+ }
+ }
+ free(copy);
+ }
+ if (unit[strlen(unit) - 1] == 's') {
+ copy = dupstr(unit);
+ copy[strlen(copy) - 1] = 0;
+ for (i = 0; i < unitcount; i++) {
+ if (!strcmp(unittable[i].uname, copy)) {
+ strlcpy(buffer, copy, sizeof(buffer));
+ free(copy);
+ return buffer;
+ }
+ }
+ if (copy[strlen(copy) - 1] == 'e') {
+ copy[strlen(copy) - 1] = 0;
+ for (i = 0; i < unitcount; i++) {
+ if (!strcmp(unittable[i].uname, copy)) {
+ strlcpy(buffer, copy, sizeof(buffer));
+ free(copy);
+ return buffer;
+ }
+ }
+ }
+ free(copy);
+ }
+ for (i = 0; i < prefixcount; i++) {
+ size_t len = strlen(prefixtable[i].prefixname);
+ if (len && !strncmp(prefixtable[i].prefixname, unit, len)) {
+ if (!strlen(unit + len) || lookupunit(unit + len)) {
+ snprintf(buffer, sizeof(buffer), "%s %s",
+ prefixtable[i].prefixval, unit + len);
+ return buffer;
+ }
+ }
+ }
+ return 0;
+}
+
+
+
+/*
+ reduces a product of symbolic units to primitive units.
+ The three low bits are used to return flags:
+
+ bit 0 (1) set on if reductions were performed without error.
+ bit 1 (2) set on if no reductions are performed.
+ bit 2 (4) set on if an unknown unit is discovered.
+*/
+
+
+#define ERROR 4
+
+int
+reduceproduct(struct unittype * theunit, int flip)
+{
+
+ char *toadd;
+ char **product;
+ int didsomething = 2;
+
+ if (flip)
+ product = theunit->denominator;
+ else
+ product = theunit->numerator;
+
+ for (; *product; product++) {
+
+ for (;;) {
+ if (!strlen(*product))
+ break;
+ toadd = lookupunit(*product);
+ if (!toadd) {
+ printf("unknown unit '%s'\n", *product);
+ return ERROR;
+ }
+ if (strchr(toadd, PRIMITIVECHAR))
+ break;
+ didsomething = 1;
+ if (*product != NULLUNIT) {
+ free(*product);
+ *product = NULLUNIT;
+ }
+ if (addunit(theunit, toadd, flip, 0))
+ return ERROR;
+ }
+ }
+ return didsomething;
+}
+
+
+/*
+ Reduces numerator and denominator of the specified unit.
+ Returns 0 on success, or 1 on unknown unit error.
+*/
+
+int
+reduceunit(struct unittype * theunit)
+{
+ int ret;
+
+ ret = 1;
+ while (ret & 1) {
+ ret = reduceproduct(theunit, 0) | reduceproduct(theunit, 1);
+ if (ret & 4)
+ return 1;
+ }
+ return 0;
+}
+
+
+int
+compareproducts(char **one, char **two)
+{
+ while (*one || *two) {
+ if (!*one && *two != NULLUNIT)
+ return 1;
+ if (!*two && *one != NULLUNIT)
+ return 1;
+ if (*one == NULLUNIT)
+ one++;
+ else if (*two == NULLUNIT)
+ two++;
+ else if (strcmp(*one, *two))
+ return 1;
+ else
+ one++, two++;
+ }
+ return 0;
+}
+
+
+/* Return zero if units are compatible, nonzero otherwise */
+
+int
+compareunits(struct unittype * first, struct unittype * second)
+{
+ return
+ compareproducts(first->numerator, second->numerator) ||
+ compareproducts(first->denominator, second->denominator);
+}
+
+
+int
+completereduce(struct unittype * unit)
+{
+ if (reduceunit(unit))
+ return 1;
+ sortunit(unit);
+ cancelunit(unit);
+ return 0;
+}
+
+
+void
+showanswer(struct unittype * have, struct unittype * want)
+{
+ if (compareunits(have, want)) {
+ printf("conformability error\n");
+ showunit(have);
+ showunit(want);
+ }
+ else if (have->offset != want->offset) {
+ if (want->quantity)
+ printf("WARNING: conversion of non-proportional quantities.\n");
+ printf("\t");
+ if (have->quantity)
+ printf("%.8g\n",
+ (have->factor + have->offset-want->offset)/want->factor);
+ else
+ printf(" (-> x*%.8g %+.8g)\n\t (<- y*%.8g %+.8g)\n",
+ have->factor / want->factor,
+ (have->offset-want->offset)/want->factor,
+ want->factor / have->factor,
+ (want->offset - have->offset)/have->factor);
+ }
+ else
+ printf("\t* %.8g\n\t/ %.8g\n", have->factor / want->factor,
+ want->factor / have->factor);
+}
+
+
+void
+usage(void)
+{
+ fprintf(stderr,
+ "usage: units [-f unitsfile] [-q] [-v] [from-unit to-unit]\n");
+ exit(3);
+}
+
+
+int
+main(int argc, char **argv)
+{
+
+ struct unittype have, want;
+ char havestr[81], wantstr[81];
+ int optchar;
+ char *userfile = 0;
+ int quiet = 0;
+
+ while ((optchar = getopt(argc, argv, "vqf:")) != -1) {
+ switch (optchar) {
+ case 'f':
+ userfile = optarg;
+ break;
+ case 'q':
+ quiet = 1;
+ break;
+ case 'v':
+ fprintf(stderr, "\n units version %s Copyright (c) 1993 by Adrian Mariano\n",
+ VERSION);
+ fprintf(stderr, " This program may be freely distributed\n");
+ usage();
+ default:
+ usage();
+ break;
+ }
+ }
+
+ if (optind != argc - 2 && optind != argc)
+ usage();
+
+ readunits(userfile);
+
+ if (optind == argc - 2) {
+ strlcpy(havestr, argv[optind], sizeof(havestr));
+ strlcpy(wantstr, argv[optind + 1], sizeof(wantstr));
+ initializeunit(&have);
+ addunit(&have, havestr, 0, 1);
+ completereduce(&have);
+ initializeunit(&want);
+ addunit(&want, wantstr, 0, 1);
+ completereduce(&want);
+ showanswer(&have, &want);
+ }
+ else {
+ if (!quiet)
+ printf("%d units, %d prefixes\n", unitcount,
+ prefixcount);
+ for (;;) {
+ do {
+ initializeunit(&have);
+ if (!quiet)
+ printf("You have: ");
+ if (!fgets(havestr, sizeof(havestr), stdin)) {
+ if (!quiet)
+ putchar('\n');
+ exit(0);
+ }
+ } while (addunit(&have, havestr, 0, 1) ||
+ completereduce(&have));
+ do {
+ initializeunit(&want);
+ if (!quiet)
+ printf("You want: ");
+ if (!fgets(wantstr, sizeof(wantstr), stdin)) {
+ if (!quiet)
+ putchar('\n');
+ exit(0);
+ }
+ } while (addunit(&want, wantstr, 0, 1) ||
+ completereduce(&want));
+ showanswer(&have, &want);
+ }
+ }
+
+ return(0);
+}
diff --git a/misc_cmds/units/units.lib b/misc_cmds/units/units.lib
new file mode 100644
index 0000000..9d415ef
--- /dev/null
+++ b/misc_cmds/units/units.lib
@@ -0,0 +1,732 @@
+/ $FreeBSD: src/usr.bin/units/units.lib,v 1.19.2.1.2.1 2009/10/25 01:10:29 kensmith Exp $
+
+/ primitive units
+
+m !a!
+kg !b!
+sec !c!
+coul !d!
+candela !e!
+usdollar !f!
+euro !g!
+bit !h!
+erlang !i!
+K !j!
+
+/ prefixes
+
+yotta- 1e24
+zetta- 1e21
+exa- 1e18
+peta- 1e15
+tera- 1e12
+giga- 1e9
+mega- 1e6
+myria- 1e4
+kilo- 1e3
+hecto- 1e2
+deka- 1e1
+deca- deka
+deci- 1e-1
+centi- 1e-2
+milli- 1e-3
+micro- 1e-6
+nano- 1e-9
+pico- 1e-12
+femto- 1e-15
+atto- 1e-18
+zopto- 1e-21
+zepto- zopto
+yocto- 1e-24
+
+semi- .5
+demi- .5
+
+Y- yotta
+Z- zetta
+E- exa
+P- peta
+T- tera
+G- giga
+M- mega
+k- kilo
+h- hecto
+da- deka
+d- deci
+c- centi
+m- milli
+n- nano
+p- pico
+f- femto
+a- atto
+z- zopto
+y- yocto
+
+/ binary prefixes introduced in 1999
+exbi- 1152921504606846976
+pebi- 1125899906842624
+tebi- 1099511627776
+gibi- 1073741824
+mebi- 1048576
+kibi- 1024
+
+Ei- exbi
+Pi- pebi
+Ti- tebi
+Gi- gibi
+Mi- mebi
+Ki- kibi
+
+/ constants
+
+fuzz 1
+pi 3.14159265358979323846
+c 2.99792458e+8 m/sec
+g0 9.80665 m/sec2
+g g0
+bigG 6.67428e-11 m3/kg/s2
+AU 1.49597870691e+11 m fuzz
+au AU
+mole 6.0221417930e+23 fuzz
+e 1.6021917e-19 coul fuzz
+energy c2
+force g
+mercury 1.3332239e+5 kg/m2-sec2
+hg mercury
+mmHg 0.001 m hg
+#mu 4.e-7 pi-N/A2
+epsilon 1.0 /mu/c2
+alpha 0.5 mu-c-e2/planck
+planck 6.6260755e-34 joule-sec
+hbar 0.5 planck/pi
+electronmass 9.1093821545-31 kg
+protonmass 1.6726217129-27 kg
+neutronmass 1.6749272928-27 kg
+
+/ dimensionless
+
+radian .5 / pi
+degree 1|180 pi-radian
+circle 2 pi-radian
+turn 2 pi-radian
+revolution turn
+rev turn
+grade .9 degree
+arcdeg 1 degree
+arcmin 1|60 arcdeg
+ccs 1|36 erlang
+arcsec 1|60 arcmin
+
+steradian radian2
+sphere 4 pi-steradian
+sr steradian
+
+/ Time
+
+second sec
+s sec
+minute 60 sec
+min minute
+hour 60 min
+hr hour
+day 24 hr
+da day
+week 7 day
+year 365.24219879 day fuzz
+yr year
+month 1|12 year
+us microsec
+
+/ Mass
+
+gram millikg
+gm gram
+metricton kilokg
+
+/ Avoirdupois
+
+lb .45359237 kg
+pound lb
+lbf lb g
+ounce 1|16 lb
+oz ounce
+dram 1|16 oz
+dr dram
+grain 1|7000 lb
+gr grain
+shortton 2000 lb
+ton shortton
+longton 2240 lb
+
+/ Apothecary
+
+scruple 20 grain
+apdram 60 grain
+apounce 480 grain
+appound 5760 grain
+troypound appound
+
+/ Mining
+
+troyounce apounce
+troz apounce
+pennyweight 1|20 troz
+pwt pennyweight
+dwt pennyweight
+
+/ Length
+
+meter m
+micron micrometer
+angstrom decinanometer
+ao 0.25 alpha/pi/rydbergconst
+
+inch 2.54 cm
+in inch
+foot 12 in
+feet foot
+ft foot
+yard 3 ft
+yd yard
+rod 5.5 yd
+rd rod
+mile 5280 ft
+mi mile
+
+british 1200|3937 m/ft
+nmile 1852 m
+
+acre 4840 yd2
+
+cc cm3
+liter kilocc
+ml milliliter
+
+/ US Liquid
+
+gallon 231 in3
+imperial 1.20095
+gal gallon
+quart 1|4 gal
+qt quart
+pint 1|2 qt
+pt pint
+
+floz 1|16 pt
+fldr 1|8 floz
+shot 3|2 floz
+
+/ US Dry
+
+dry 268.8025 in3/gallon fuzz
+peck 8 dry-quart
+pk peck
+bushel 4 peck
+bu bushel
+chaldron 36 bushel
+
+/ British
+
+brgallon 277.420 in3 fuzz
+brquart 1|4 brgallon
+brpint 1|2 brquart
+brfloz 1|20 brpint
+brpeck 554.84 in3 fuzz
+brbushel 4 brpeck
+brhundredweight 112 lb
+
+/ Bottles
+
+bottle 750 milliliter
+/bottle fifth
+
+miniature 100 milliliter
+split 1|4 bottle
+half 1|2 bottle
+magnum 2 bottle
+jeroboam 4 bottle
+rehoboam 6 bottle
+methuselah 8 bottle
+salmanazar 12 bottle
+balthazar 16 bottle
+nebuchadnezzar 20 bottle
+sovereign 34 bottle
+
+/ Bottles - alternate names and spellings
+
+pony split
+fillette half
+tappit-hen 3 imperial
+rheoboam rehoboam
+shalmaneser salmanazar
+
+/ Russian
+berkovets 10 pood
+pood 40 funt
+funt 0.40951 kg
+lot 1|32 funt
+zolotnik 1|3 lot
+dolya 1|96 zolotnik
+rumile 7 verst
+mezhevayaverst 2 verst
+verst 1066.8 m
+sazhen 1|500 verst
+kosayasazhen 1|430.2 verst
+arshin 1|1500 verst
+/ is not exactly defined
+ruell 16.54 in
+liniya 1|10 in
+vershok 1.75 in
+pyad 7 in
+vedro 12.3 liter
+shtoff 1|10 vedro
+vinebottle 1|16 vedro
+vodkabottle 1|20 vedro
+charka 1|100 vedro
+shkalik 1|200 vedro
+desyatina_state 109.3 are
+desyatina_farmery 0.75 desyatina_state
+sqverst 104.2 desyatina_state
+sqarshin 1|21600 desyatina_state
+sqfoot 1|117600 desyatina_state
+
+/ Energy Work
+
+newton kg-m/sec2
+nt newton
+N newton
+joule nt-m
+J joule
+cal 4.1868 joule
+
+/ Electrical
+
+coulomb coul
+C coul
+ampere coul/sec
+A ampere
+amp ampere
+watt joule/sec
+W watt
+volt watt/amp
+ohm volt/amp
+mho /ohm
+farad coul/volt
+F farad
+henry sec2/farad
+H henry
+weber volt-sec
+Wb weber
+
+/ Light
+
+cd candela
+lumen cd sr
+lux cd sr/m2
+
+/ EMU currencies have constant exchange rate against Euro since 1.1.1999.
+/ See http://en.wikipedia.org/wiki/Euro for details.
+austriaschilling 1|13.7603 euro
+belgiumfranc 1|40.3399 euro
+finlandmarkka 1|5.94573 euro
+francefranc 1|6.55957 euro
+germanymark 1|1.95583 euro
+greecedrachma 1|340.750 euro
+irelandpunt 1|0.787564 euro
+italylira 1|1936.27 euro
+luxembourgfranc 1|40.3399 euro
+netherlandsguilder 1|2.20371 euro
+portugalescudo 1|200.482 euro
+spainpeseta 1|166.386 euro
+sloveniantolar 1|239.640 euro
+cypriotpound 1|0.585274 euro
+malteselira 1|0.429300 euro
+slovakkoruna 1|30.1260 euro
+
+/ These ones are pegged to the Euro
+/ See http://en.wikipedia.org/wiki/Euro for details.
+bosniaherzegovinamark 1|1.95583 euro
+bulgarianlev 1|1.95583 euro
+capeverdeanescudo 1|110.265 euro
+centralafricancfafranc 1|655.957 euro
+comorosfranc 1|491.96775 euro
+danishkrone 1|7.46038 euro
+estoniakroon 1|15.6466 euro
+lithuanianlitas 1|3.45280 euro
+pacificfrancexchange 1|0.00838 euro
+westafricancfafranc 1|655.957 euro
+
+/ These ones are pegged on the US Dollar
+/ See http://en.wikipedia.org/wiki/USD for details.
+dollar usdollar
+arubanflorin 1|1.75 usdollar
+bahamiandollar 1|1 usdollar
+bahrainidinar 1|0.376 usdollar
+barbadiandollar 1|2 usdollar
+belizedollar 1|2 usdollar
+belarusianruble 1|2135 usdollar
+bermudiandollar 1|1 usdollar
+caymanislandsdollar 1.2 usdollar
+cubanconvertiblepeso 1.08 usdollar
+djiboutianfranc 1|177.721 usdollar
+eastcaribbeandollar 1|2.7 usdollar
+eritreannakfa 1|15 usdollar
+hongkongdollar 1|7.80 usdollar
+macanesepatacas 1|1.03 hongkongdollar
+jordaniandinar 1|0.709 usdollar
+lebanesepound 1|1507.5 usdollar
+maldivianrufiyaa 1|12.8 usdollar
+netherlandsantilleanguilder 1|1.79 usdollar
+omanirial 2.6008 usdollar
+qataririyal 1|3.64 usdollar
+saudiriyal 1|3.75 usdollar
+unitedarabemiratesdirham 1|3.6725 usdollar
+
+bosniamark bosniaherzegovinamark
+cfafranc centralafricancfafranc
+cfpfranc pacificfrancexchange
+drachma greecedrachma
+escudo portugalescudo
+franc francefranc
+guilder netherlandsguilder
+herzegovinamark bosniaherzegovinamark
+hollandguilder netherlandsguilder
+lira italylira
+mark germanymark
+markka finlandmarkka
+peseta spainpeseta
+rand southafricarand
+
+/ computer
+
+baud bit/sec
+nibble 4 bit
+nybble nibble
+byte 8 bit
+word 2 byte
+block 512 byte
+kbyte 1024 byte
+megabyte 1024 kbyte
+gigabyte 1024 megabyte
+terabyte 1024 gigabyte
+petabyte 1024 terabyte
+exabyte 1024 petabyte
+zettabyte 1024 exabyte
+yottabyte 1024 zettabyte
+kilobyte kbyte
+meg megabyte
+
+
+/ Trivia
+
+% 1|100
+abampere 10 ampere
+admiraltyknot 6080 ft/hr
+apostilb cd/pi-m2
+are 1e+2 m2
+asb apostilb
+arpentcan 27.52 mi
+arpentlin 191.835 ft
+astronomicalunit au
+atmosphere 1.01325e+5 nt/m2
+atm atmosphere
+atomicmassunit 1.66053878283e-27 kg fuzz
+# year 3.15569259747e7 sec fuzz
+amu atomicmassunit
+bag 94 lb
+bakersdozen 13
+bar 1e+5 nt/m2
+barie 1e-1 nt/m2
+barleycorn 1|3 in
+barn 1e-28 m2
+oilbarrel 42 gal
+barrel oilbarrel
+barye 1e-1 nt/m2
+baryl microbar
+bev 1e+9 e-volt
+biot 10 amp
+blondel cd/pi-m2
+boardfoot 144 in3
+bolt 40 yd
+bottommeasure 1|40 in
+britishthermalunit 1.05506e+3 joule fuzz
+btu britishthermalunit
+refrigeration 12000 btu/ton-hour
+buck usdollar
+cable 720 ft
+caliber 1e-2 in
+calorie cal
+carat 205 milligram
+caratgold 1|24
+cent centidollar
+cental 100 lb
+centesimalminute 1e-2 grade
+centesimalsecond 1e-4 grade
+century 100 year
+cfs ft3/sec
+chain 66 ft
+circularinch 1|4 pi-in2
+circularmil 1e-6|4 pi-in2
+clusec 1e-8 mm-hg m3/s
+coomb 4 bu
+cord 128 ft3
+cordfoot cord
+crith 9.06e-2 gm
+cubit 18 in
+cup 1|2 pt
+curie 3.7e+10 /sec
+dalton amu
+decade 10 yr
+dioptre /m
+displacementton 35 ft3
+doppelzentner 100 kg
+dozen 12
+drop .03 cm3
+dyne cm-gm/sec2
+electronvolt e-volt
+ell 45 in
+engineerschain 100 ft
+engineerslink 100|100 ft
+equivalentfootcandle lumen/pi-ft2
+equivalentlux lumen/pi-m2
+equivalentphot cd/pi-cm2
+erg cm2-gm/sec2
+ev e-volt
+faraday 9.6485309e+4 coul
+fathom 6 ft
+fermi 1e-15 m
+fifth 4|5 qt
+fin 5 usdollar
+finger 7|8 in
+firkin 9 gal
+footcandle lumen/ft2
+footlambert cd/pi-ft2
+fortnight 14 da
+franklin 3.33564e-10 coul
+frigorie kilocal
+furlong 220 yd
+galileo 1e-2 m/sec2
+gamma 1e-9 weber/m2
+gauss 1e-4 weber/m2
+G gauss
+geodeticfoot british-ft
+geographicalmile 1852 m
+gilbert 2.5 amp/pi
+gill 1|4 pt
+gross 144
+gunterschain 22 yd
+hand 4 in
+hartree 2 rydberg
+head water
+hectare 1e+4 m2
+hefnercandle .92 cd
+hertz /sec
+Hz hertz
+hogshead 63 gallon
+hd hogshead
+homestead 1|4 mi2
+horsepower 735.50 watt
+hp horsepower
+hubble 1e9 ly
+hyl gm force sec2/m
+hz /sec
+imaginarycubicfoot 1.4 ft3
+jansky 1e-26 W/m2-Hz
+Jy jansky
+karat 1|24
+kayser /cm
+key kg
+kilderkin 18 gal
+knot nmile/hr
+kn knot
+lambert cd/pi-cm2
+Lb lambert
+langley cal/cm2
+last 80 bu
+league 3 mi
+lightyear c-yr
+ly lightyear
+line 1|12 in
+link 66|100 ft
+longhundredweight 112 lb
+longquarter 28 lb
+lusec 1e-6 mm-hg m3/s
+m_earth 5.97223e24 kg
+m_moon 7.34e22 kg
+m_sun 1.98843e30 kg
+mach 331.46 m/sec
+marineleague 3 nmile
+maxwell 1e-8 weber
+Mx maxwell
+metriccarat 200 milligram
+mgd megagal/day
+mh millihenry
+mil 1e-3 in
+millennium 1000 year
+minersinch 1.5 ft3/min
+minim 1|60 fldr
+mo month
+mpg mile/gal
+mph mile/hr
+nail 1|16 yd
+nauticalmile nmile
+nit cd/m2
+noggin 1|8 qt
+nox 1e-3 lux
+oersted 2.5e+2 amp/m/pi
+Oe oersted
+pace 36 in
+pair 2
+palm 3 in
+parasang 3.5 mi
+parsec AU-radian/arcsec
+pascal nt/m2
+Pa pascal
+pc parsec
+percent %
+perch rd
+phot lumen/cm2
+pica 1|6 in
+pieze 1e+3 nt/m2
+pipe 4 barrel
+point 1|72 in
+poise gm/cm-sec
+P poise
+pole rd
+pond 9.80665e-3 nt
+poundal ft-lb/sec2
+pdl poundal
+proof 1|200
+psi lb-g/in2
+quarter 9 in
+quartersection 1|4 mi2
+quintal 100 kg
+quire 25
+r_earth 6.378e8 cm
+r_moon 1.738e7 cm
+r_sun 6.9599e10 cm
+rackunit 1.75 in
+rad 100 erg/gm
+ream 500
+registerton 100 ft3
+rem 0.01 J/kg
+rhe 10 m2/nt-sec
+rontgen 2.58e-4 curie/kg
+roentgen rontgen
+rood 1.21e+3 yd
+rope 20 ft
+RU rackunit
+rutherford 1e+6 /sec
+rydbergconst 0.5 elctronmass-c-alpha2/planck
+rydberg rydbergconst-planck-c
+sabin 1 ft2
+sack 3 bu
+score 20
+seam 8 bu
+section mi2
+shed 1e-24 barn
+shippington 40 ft3
+shorthundredweight 100 lb
+shortquarter 25 lb
+siemens /ohm
+sigma microsec
+skein 120 yd
+skot 1e-3 apostilb
+slug lb-g-sec2/ft
+smoot 67 in
+span 9 in
+spat 4 pi sr
+spindle 14400 yd
+square 100 ft2
+stere m3
+sthene 1e+3 nt
+stilb cd/cm2
+sb stilb
+stoke 1e-4 m2/sec
+stone 14 lb
+strike 2 bu
+surveyfoot british-ft
+surveyyard 3 surveyfoot
+surveyorschain 66 ft
+surveyorslink 66|100 ft
+tablespoon 4 fldr
+tbl tablespoon
+tbsp tablespoon
+teaspoon 4|3 fldr
+tesla weber/m2
+T tesla
+therm 1e+5 btu
+thermie 1e+6 cal
+timberfoot ft3
+tnt 4.6e+6 m2/sec2
+tonne 1e+6 gm
+torr mm hg
+township 36 mi2
+tsp teaspoon
+tun 8 barrel
+water gram g / cc
+wey 40 bu
+weymass 252 lb
+Xunit 1.00206e-13 m
+k 1.38047e-16 erg/degC
+
+
+degC 1&+273.15 K
+kelvin K
+brewster 1e-12 m2/newton
+degF 5|9&255.37222222222222222222 K
+degreesrankine 5|9 K
+degrankine degreesrankine
+degreerankine degreesrankine
+degreaumur 10|8&+273.15 K
+drachm 60 grain
+poncelet 100 kg m g / sec
+denier .05|450 gram / m
+tex .001 gram / m
+englishell 45 inch
+scottishell 37.2 inch
+flemishell 27 inch
+V volt
+eV e V
+bohrradius hbar2-C2/8.988e9 N m2-e2-electronmass
+becquerel 1|3.7e10 curie
+fresnel 1e12 hertz
+statcoul 1|2.99792458e9 coul
+statamp 1|2.99792458e9 amp
+statvolt 2.99792458e2 volt
+statcoulomb statcoul
+statampere statamp
+debye 3.33564e-30 coul-m
+pulsatance 2 pi/sec
+rpm rev/minute
+rps rev/sec
+kilohm kiloohm
+megohm megaohm
+siderealyear 365.256360417 day
+siderealday 23.934469444 hour
+siderealhour 1|24 sidereal day
+lunarmonth 29.5305555 day
+synodicmonth lunarmonth
+siderealmonth 27.32152777 day
+tropicalyear year
+solaryear year
+lunaryear 12 lunarmonth
+cran 37.5 brgallon
+kip 1000 lbf
+frenchfoot 16|15 ft
+frenchfeet frenchfoot
+toise 6 frenchfeet
+sievert 8.4 rontgen
+candle 1.02 candela
+militarypace 2.5 feet
+metre meter
+litre liter
+gramme gram
+iudiptheria 62.8 microgram
+iupenicillin .6 microgram
+iuinsulin 41.67 microgram
+cottonyarncount 2520 ft/pound
+linenyarncount 900 ft/pound
+worstedyarncount 1680 ft/pound
+metricyarncount meter/gram
+jewlerspoint 2 milligram