History log of /freebsd-current/usr.bin/calendar/io.c
Revision Date Author Comments
# 0a82cd4f 17-Dec-2023 Kyle Evans <kevans@FreeBSD.org>

calendar: correct the search order for files

Include files that don't begin with a '/' are documented to search the
current directory, then /usr/share/calendar. This hasn't been accurate
for years, since e061f95e7b9b ("Rework calendar(1) parser") rewrote a
lot of this.

Stash off the cwd before we do any chdir()ing around and use that to
honor the same order we'll follow for the -f flag. This may result in
an extra lookup that will fail for the initial calendar file, but I
don't think it's worth the complexity to avoid it.

While we're here, fix the documentation to just reference the order
described in FILES so that we only need to keep it up to date in one
place.

Reviewed by: bapt
Sponsored by: Klara, Inc.
Differential Revision: https://reviews.freebsd.org/D42278


# 0b8224d1 24-Nov-2023 Warner Losh <imp@FreeBSD.org>

Remove copyright strings ifdef'd out

We've ifdef'd out the copyright strings for some time now. Go ahead and
remove the ifdefs. Plus whatever other detritis was left over from other
recent removals. These copyright strings are present in the comments and
are largely from CSRG's attempt at adding their copyright to every
binary file (which modern interpretations of the license doesn't
require).

Sponsored by: Netflix


# bdcbfde3 23-Nov-2023 Warner Losh <imp@FreeBSD.org>

usr.bin: Remove ancient SCCS tags.

Remove ancient SCCS tags from the tree, automated scripting, with two
minor fixup to keep things compiling. All the common forms in the tree
were removed with a perl script.

Sponsored by: Netflix


# 1d386b48 16-Aug-2023 Warner Losh <imp@FreeBSD.org>

Remove $FreeBSD$: one-line .c pattern

Remove /^[\s*]*__FBSDID\("\$FreeBSD\$"\);?\s*\n/


# 65e9eb07 07-Mar-2023 David E. O'Brien <obrien@FreeBSD.org>

Look in getlocalbase() for the calendar-data package data

Fix d20d6550187a95a78bb532909aad8ef7ac62be66 where getlocalbase()
wasn't used to fill out the printf(3) format of _PATH_INCLUDE_LOCAL.

Differential Revision: https://reviews.freebsd.org/D38975
Reviewed by: imp


# 35b8fd0b 07-Jun-2021 Stefan Eßer <se@FreeBSD.org>

usr.bin/calendar: do not treat // in text as comment

The C++-style comment marker "//" has been added with the rewrite of
the preprocessor features. Since this character sequence occurs in
ULRS, the reminder of the URL was considered a comment and stripped
from the calendar line.

Change parsing of "//" to only start a comment at the begin of a line
or when preceeded by a white-space character.

PR: 256455
Reported by: Philippe Michel (philippe.michel7 at free.fr)
MFC after: 3 days


# e163cae7 30-Dec-2020 Stefan Eßer <se@FreeBSD.org>

Make calendarhome buffer static

the value may be used in error messages after leaving this function.


# 6f139d79 12-Dec-2020 Stefan Eßer <se@FreeBSD.org>

Use getlocalbase() instead of compiled in LOCALBASE to locate calendars


# 0357fa26 05-Nov-2020 Stefan Eßer <se@FreeBSD.org>

Restrict locale settings to the file they occur in

This prevents LANG= in an included file from affecting the interpretation
of month and day names in the including file.

Make the internal pre-processor accept white space between the "#" at
the start of the line and the keyword for better compatibility with cpp.

Add support for the cpp keywords #warning and #error.

MFC after: 3 days


# 2ceb17a8 04-Nov-2020 Stefan Eßer <se@FreeBSD.org>

Add regression tests for conditions and comments

Fix one case where #else was not corerctly processed and simplify the
conditions logic.

Fix parsing of day and month names in the locale specified in the calendar
file. The previous version would expect those names to match the locale of
the user.

Mention that comments are now correctly processed and that // is supported
in addition to /* ... */.

MFC after: 3 days


# f1560bd0 02-Nov-2020 Stefan Eßer <se@FreeBSD.org>

Consistently print calendar dates in the locale of the user

Calendar files that specify LANG=... to specify their character encoding did
also set the date format defined for that locale, resulting in output like:

Nov 4 Gabriel Faure dies from pneumonia in Paris, France, 1924
4 nov. N'oubliez pas les Charles !

After this commit the output is always printed in a consistent format
according to the user's current locale, e.g.:

Nov 4 Gabriel Faure dies from pneumonia in Paris, France, 1924
Nov 4 N'oubliez pas les Charles !

I'll open a review asking for opinions whether this format change should
be merged to -STABLE.

Relnotes: yes


# cc9fbfaf 03-Nov-2020 Stefan Eßer <se@FreeBSD.org>

Check that #ifdef, #ifndef, and #undef are used with a single name

This restores the parameter validation that has been peformed by cpp
for defining and testing of names used in conditions.

MFC after: 3 days


# ab34af07 01-Nov-2020 Stefan Eßer <se@FreeBSD.org>

Fix psoition reporting for calendar data file in system directory

MFC after: 3 days


# 8e8c5da4 31-Oct-2020 Stefan Eßer <se@FreeBSD.org>

Improve calendar file parsing and consistency tests

Add line number information to more warning and error messages.
Detect #else and #endif without corresponing #ifdef/#ifndef as error.
Detect missing #endif at end of file and print warning but continue.

Support for #undef has been added to reverse the effect of a prior #define.
It is no error if the argument value has not been defined before.

These changes may cause error aborts on malformed input files (e.g. with
spurious #else or #endif), but no such errors exist in the calendar files
in the FreeBSD base system and the calendar-data port and all tests pass.

More tests will be added in a follow-up commit to detect regressions that
might affect the newly added features.

This commit ends a series of updates that enhance the pre-processor and
make it behave much more like prior versions of the calendar progarm that
called cpp to pre-process the data files.

MFC after: 3 days
Relnotes: yes


# 66887086 31-Oct-2020 Stefan Eßer <se@FreeBSD.org>

Add file names and line numbers to debug messages

MFC after: 3 days


# 1462201c 31-Oct-2020 Stefan Eßer <se@FreeBSD.org>

Add file names and line numbers to calendar format error messages

Without file name and line number it is very cumbersum to identify the
locations of errors in calendar files.

MFC after: 3 days


# 6bdb89a8 30-Oct-2020 Stefan Eßer <se@FreeBSD.org>

Fix length calculation in memmove

MFC after: 3 days


# 0f352f4e 30-Oct-2020 Stefan Eßer <se@FreeBSD.org>

Re-implement comment parsing missing in the internal pre-processor

The internal pre-processor ignored lines that did not parse a calendar
entries, but did not support multi-line comments in the way the external
cpp did.

The calendar files distributed with the base system (now in a port) do
use comments, though.

Implement comment processing for single-line (//) and multi-line comments
(/* */) with same semantics as in a standard C pre-processor.

All tests pass with this version, but there are no tests that specifically
verify comment processing.

Reported by: jhs@berklix.com (Julian H. Stacey)
MFC after: 3 days


# ac04cf18 29-Oct-2020 Stefan Eßer <se@FreeBSD.org>

Simplify test for closing delimiter of #include argument (no functional
change).

While here: Fix invalid parameters of a commented-out debug printf() found
when testing with this code enabled.

MFC after: 3 days


# 19b5c307 28-Oct-2020 Stefan Eßer <se@FreeBSD.org>

Add support for nested conditionals

The previous behavior was to support nested #ifdef and #ifndef, but to
return to unconditional parsing after the next #endif, independently of
the number of previously parsed conditions.

E.g. after "#ifdef A / #ifdef B / #endif" the following lines were
unconditially parsed again, independently of A and/or B being defined.

The new behavior is to count the level of false conditions and to only
restart parsing of calendar entries when the corresponding number of
#endif tokens have been seen.

In addition to the above, an #else directive has been added, to toggle
between parsing and ignoring of the following lines.

No validation of the correct use of the condition directives is made.
#endif without prior #define or #ifndef is ignored and #else toggles
between parsing and skipping of entries.

The MFC period has been set to 1 month to allow for a review of the
changes and for a discussion, whether these modifications should not
be merged at all.

No correct input file is parsed differently than before, but if calendar
data files are published that use these new features, those data files
will not parse correctly on prior versions of this program.

MFC after: 1 month


# e0e29f94 28-Oct-2020 Stefan Eßer <se@FreeBSD.org>

Fix off-by-one error in processing of #ifdef lines

The convention in this program is to parse the line immediately starting
after the token (e.g. #defineA and #ifdefA define respectively look-up "A"),
and this commit restores this behavior instead of skipping an assumed
white-space character following #ifdef.

Reported by: kevans
MFC after: 3 days


# 29398979 28-Oct-2020 Stefan Eßer <se@FreeBSD.org>

Fix parsing of #ifdef in calendar files

There was code to process an #ifndef tokens, but none for #ifdef.
The #ifdef token was mentioned as unsupported in the BUGS section,
but no reason was given and I do not see why it should stay omitted.

Misleading information in The BUGS section of the man-page regarding
the maximum number of #define and #include statements supported has
been removed. These limits might have applied to a prior version of
this program, but do not seem to apply to the current implementation.

I have not tried to test for the existence of the limits, but the
include file processing just recursively calls the parser (without
counting the recursion depth) and the stringlist functions do not
impose a limit on the number of entries.

Reported by: jhs@berklix.com
MFC after: 3 days


# d20d6550 25-Oct-2020 Warner Losh <imp@FreeBSD.org>

calendar: remove all datafiles except freebsd one

Move all the data files for the calendar(1) program, except
calendar.freebsd to the calendar-data package. When a file
can't be found, and /usr/local/share/calendar doesn't exist
provide a helpful hint to install this package.

Reviewed by: se@
Differential Revision: https://reviews.freebsd.org/D26926


# 34b38e12 23-Oct-2020 Stefan Eßer <se@FreeBSD.org>

Add search of LOCALBASE/share/calendar for calendars supplied by a port.

Calendar files in LOCALBASE override similarily named ones in the base
system. This could easily be changed if the base system calendars should
have precedence, but it could lead to a violation of POLA since then the
port's files were ignored unless those in base have been deleted.

There was no definition of _PATH_LOCALBASE in paths.h, but verbatim uses
of /usr/local existed for _PATH_DEFPATH. Use _PATH_LOCALBASE here to ease
a consistent modification of this prefix.

Reviewed by: imp, pfg
Differential Revision: https://reviews.freebsd.org/D26882


# fd1efedc 02-Mar-2020 Conrad Meyer <cem@FreeBSD.org>

Add extremely useful calendar(1) application to FreeBSD

It does extremely useful things like execute sendmail and spew dubiously
accurate factoids.

From the feedback, it seems like it is an essential utility in a modern unix
and not at all a useless bikeshed. How do those Linux people live without it?
Reverts r358561.


# 3c565de3 02-Mar-2020 Conrad Meyer <cem@FreeBSD.org>

Fix typo in r278616

FreeBSD isn't an encyclopedia.


# e67975d3 09-Sep-2019 Gleb Smirnoff <glebius@FreeBSD.org>

Fix 'calendar -a' in several ways.

o Do not run any iconv() processing in -a. The locale of root user is not
what is desired by most of the users who receive their calendar mail.
Just assume that users store their calendars in a format that is readable
to them. This fixes regression from r344340.
o fork() and setusercontext(LOGIN_SETALL) for every user. This makes LANG
set inside a calendar file mostly excessive, as we will pick up user's
login class LANG.
o This also executes complex function cal() that parses user owned files
with appropriate user privileges.
Previously it was run with privileges dropped only temporary for execution
of cal(), and fully dropped only before invoking sendmail (see r22473).

Reviewed by: bapt (older version of patch)


# adedf5ee 19-Feb-2019 Baptiste Daroussin <bapt@FreeBSD.org>

calendar: use iconv to respect the output encoding

calendar(1) can have input in various encoding, specifying
LANG=<locale_name> to enable calendar(1) to determine which one to use.

The problem is the content of the calendar itself is exposed as is making it
unreadable in many cases. For example french calendar which is encoded
ISO8859-1 is rendered badly in a fr_FR.UTF-8 environment.

Using iconv allows to solve this issue.
This will also allow to keep only 1 encoding in base for those files without
breaking user existing setup

Reported by: many
MFC after: 1 month
Differential Revision: https://reviews.freebsd.org/D19221


# a92970d8 23-Dec-2017 Eitan Adler <eadler@FreeBSD.org>

calendar: add missing header file

time.h is required for strftime and struct tm

Reviewed by: edje


# 8a16b7a1 20-Nov-2017 Pedro F. Giffuni <pfg@FreeBSD.org>

General further adoption of SPDX licensing ID tags.

Mainly focus on files that use BSD 3-Clause license.

The Software Package Data Exchange (SPDX) group provides a specification
to make it easier for automated tools to detect and summarize well known
opensource licenses. We are gradually adopting the specification, noting
that the tags are considered only advisory and do not, in any way,
superceed or replace the license texts.

Special thanks to Wind River for providing access to "The Duke of
Highlander" tool: an older (2014) run over FreeBSD tree was useful as a
starting point.


# fbbd9655 28-Feb-2017 Warner Losh <imp@FreeBSD.org>

Renumber copyright clause 4

Renumber cluase 4 to 3, per what everybody else did when BSD granted
them permission to remove clause 3. My insistance on keeping the same
numbering for legal reasons is too pedantic, so give up on that point.

Submitted by: Jan Schaumann <jschauma@stevens.edu>
Pull Request: https://github.com/freebsd/freebsd/pull/96


# 09a47cc7 30-Jul-2016 Marcelo Araujo <araujo@FreeBSD.org>

Use nitems() from sys/param.h.

Sponsored by: gandi.net (BSD Day Taiwan)
MFC after: 2 weeks.


# a43d43d5 29-Jul-2016 Baptiste Daroussin <bapt@FreeBSD.org>

Remove usage of _WITH_GETLINE from usr.bin


# 80c7cc1c 15-Apr-2016 Pedro F. Giffuni <pfg@FreeBSD.org>

Cleanup unnecessary semicolons from utilities we all love.


# cbc9c8d8 15-Jul-2015 Baptiste Daroussin <bapt@FreeBSD.org>

Fix trimming spaces writing at index -1 if an empty string is passed

Submitted by: Gennady Proskurin <gprspb@mail.ru>


# e4c6d6e2 18-Apr-2015 Eitan Adler <eadler@FreeBSD.org>

calendar: remove useless check
lineline checked for 0 in the while loop condition. There is no need to
check for it additionally in the body.

CID: 1288959
MFC After: 1 week


# e061f95e 04-Mar-2015 Baptiste Daroussin <bapt@FreeBSD.org>

Rework calendar(1) parser

Support includes surrounded by '"' or '<' '>'
Print warnings about bad syntax
Correctly navigate through include directories to find calendar files
Correctly support multiple includes

Tested by: gjb
MFC after: 1 week


# 5d32a871 19-Sep-2013 Diane Bruce <db@FreeBSD.org>

- calendar uses cpp internally, this diff removes this usage and
substitutes a limited subset cpp processor internally.

PR: src/178463
Approved by: re (gjb)


# 90c72ba9 12-Jun-2013 Greg Lehey <grog@FreeBSD.org>

Handle some expression regressions.
Explicitly use GNU cpp for preprocessing.
Remove explicit debugging code.
Change some variable names to be less confusing.
Improve some comments.
Improve indentation.

PR: 162211
168785
MFC after: 2 weeks


# bf70bece 19-Oct-2012 Ed Schouten <ed@FreeBSD.org>

More -Wmissing-variable-declarations fixes.

In addition to adding `static' where possible:

- bin/date: Move `retval' into extern.h to make it visible to date.c.
- bin/ed: Move globally used variables into ed.h.
- sbin/camcontrol: Move `verbose' into camcontrol.h and fix shadow warnings.
- usr.bin/calendar: Remove unneeded variables.
- usr.bin/chat: Make `line' local instead of global.
- usr.bin/elfdump: Comment out unneeded function.
- usr.bin/rlogin: Use _Noreturn instead of __dead2.
- usr.bin/tset: Pull `Ospeed' into extern.h.
- usr.sbin/mfiutil: Put global variables in mfiutil.h.
- usr.sbin/pkg: Remove unused `os_corres'.
- usr.sbin/quotaon, usr.sbin/repquota: Remove unused `qfname'.


# 415f0311 08-Nov-2011 Greg Lehey <grog@FreeBSD.org>

Tidy up command line processing:
- Add ? option to optstring.
- Sort options alphabetically.
- Vertical space.

Tidy up usage() function.

Bring man page in sync with source.

Ensure that debug code is only executed with the -d option.

Submitted by: Christiane Yeardley


# 0aa7541b 06-Jun-2011 Jaakko Heinonen <jh@FreeBSD.org>

Pass correct size to write(2).

PR: bin/155915
Submitted by: John Levine
MFC after: 2 weeks


# a7d5f7eb 19-Oct-2010 Jamie Gritton <jamie@FreeBSD.org>

A new jail(8) with a configuration file, to replace the work currently done
by /etc/rc.d/jail.


# 7e63c265 05-Jun-2010 Edwin Groothuis <edwin@FreeBSD.org>

Fix memory-leak at the processing of multiple calendars.

Found with: Coverity Prevent(tm)
CID: 7085


# 78c6c39d 05-Jun-2010 Edwin Groothuis <edwin@FreeBSD.org>

Properly check the return value of chdir, even if it is a "this
should not happen" case.

Found with: Coverity Prevent(tm)
CID: 4932


# e86a8937 06-May-2010 Andrey A. Chernov <ache@FreeBSD.org>

While I am here, add more missing (unsigned char) casts to ctype() macros


# b277fb56 06-May-2010 Andrey A. Chernov <ache@FreeBSD.org>

Fix recent space skipping:
1) add missing (unsigned char) cast to ctype() macro
2) fix off-by-one error causing last letter always doubled


# bb06482c 30-Mar-2010 Edwin Groothuis <edwin@FreeBSD.org>

On request of joel@:

- Remove the 3rd clause of the UC Berkeley copyrighted files.
- For the files added copyrighted by me, move the "All rights
reserved" to the next line.


# 2b84020d 29-Mar-2010 Edwin Groothuis <edwin@FreeBSD.org>

Long awaited update to the calendar system:

- Repeating events which span multiple years (because of -A, -B or
just the three days before the end of the year).

- Support for lunar events (full moon, new moon) and solar events
(equinox and solstice, chinese new year). Because of this, the
options -U (UTC offset) and -l (longitude) are available to
compensate if reality doesn't match the calculated values.

MFC after: 1 month


# fe0506d7 09-Mar-2010 Marcel Moolenaar <marcel@FreeBSD.org>

Create the altix project branch. The altix project will add support
for the SGI Altix 350 to FreeBSD/ia64. The hardware used for porting
is a two-module system, consisting of a base compute module and a
CPU expansion module. SGI's NUMAFlex architecture can be an excellent
platform to test CPU affinity and NUMA-aware features in FreeBSD.


# a752c193 17-Dec-2009 Ralf S. Engelschall <rse@FreeBSD.org>

rewind(3) is already declared to return 'void', so no need for an explicit cast


# d7f03759 19-Oct-2008 Ulf Lilleengen <lulf@FreeBSD.org>

- Import the HEAD csup code which is the basis for the cvsmode work.


# 0d724b87 05-Aug-2008 Edwin Groothuis <edwin@FreeBSD.org>

Move functions which are only locally used into their C files and
make them static.

usage() in calendar.c
event_*() in io.c

PR: bin/118644
Approved by: bde@ (mentor)


# 35304a16 05-Aug-2008 Edwin Groothuis <edwin@FreeBSD.org>

style(9)ify usr.bin/calendar

PR: bin/118644
Approved by: bde@ (mentor)
MFC after: 1 week


# 8ddfe1c3 30-Dec-2007 Greg Lehey <grog@FreeBSD.org>

style(9)


# cd59b2cd 30-Dec-2007 Greg Lehey <grog@FreeBSD.org>

If we can't open a calendar file, don't guess why. Check the error
return and print a useful message.

Prior to this commit, access problems could give rise to messages that
the file didn't exist.


# 0f10497b 29-Oct-2007 Kevin Lo <kevlo@FreeBSD.org>

Never use getenv("HOME") without checking for NULL and non-zero

Obtained from: OpenBSD


# f4025ee0 08-Jun-2007 Greg Lehey <grog@FreeBSD.org>

Sort events by date.
Correct long-standing off-by-one error in -W option.

Submitted by: edwin@

Shorten some long lines. These files are still not completely
style(9) compliant.


# e4cedda8 07-May-2007 David Malone <dwmalone@FreeBSD.org>

ANSIfy function definitions.
Move some extern declarations to a header file.
Remove an unneeded extern declaration for optarg.


# afb325f7 28-Jul-2002 Juli Mallett <jmallett@FreeBSD.org>

Search the include path for the argument to -f, to make lives easier for
those of us who want to figure out how old Jim Mock is, but only want to
type 'calendar -f calendar.freebsd'. This is done in a way that should
be totally backwards compatible with no noticable differences, at all.

Reviewed by: mux
MFC after: 4 weeks


# 9f5b04e9 10-Dec-2001 David Malone <dwmalone@FreeBSD.org>

Style improvements recommended by Bruce as a follow up to some
of the recent WARNS commits. The idea is:

1) FreeBSD id tags should follow vendor tags.
2) Vendor tags should not be compiled (though copyrights probably should).
3) There should be no blank line between including cdefs and __FBSDIF.


# 9e1e9c44 02-Dec-2001 Mark Murray <markm@FreeBSD.org>

WARNS=2 fixup (mostly. Some are Hard To Fix(tm), so NO_WERROR is set)
Use __FBSDID().
Sort some headers.


# 7bc6d015 09-Jul-2001 Brian Somers <brian@FreeBSD.org>

Fix the type of the NULL arg to execl()

Idea from: Theo de Raadt <deraadt@openbsd.org>


# 800f0ffb 21-Mar-2001 Andrey A. Chernov <ache@FreeBSD.org>

Don't attempt to parse %c, use nl_langinfo instead


# 55ff3bf4 28-Feb-2001 Warner Losh <imp@FreeBSD.org>

MAXPATHLEN includes the trailing NUL character, so there's no need to add 1
to it for the size of path.


# fd6fca87 09-Jan-2000 David E. O'Brien <obrien@FreeBSD.org>

Adapt to the new `ccp' now that the traditional-behaving /usr/bin/cpp
script is gone.

PR: 15932
Submitted by: Jos Backus <Jos.Backus@nl.origin-it.com>
Tested by: brian, Manfred Antar <mantar@pacbell.net>


# c3aac50f 27-Aug-1999 Peter Wemm <peter@FreeBSD.org>

$Id$ -> $FreeBSD$


# 450288f5 13-Oct-1998 Dag-Erling Smørgrav <des@FreeBSD.org>

Missed one in the previous commit.


# 4d2854f4 23-Jun-1997 Philippe Charnier <charnier@FreeBSD.org>

Use err(3). Abort if strdup() returns NULL.


# bb5359e9 16-Feb-1997 Mike Pritchard <mpp@FreeBSD.org>

Don't call sendmail with "-f root" when run with "-a". This
eliminates the "X-authentication-warning" header line that
has been coming out since I made it so that sendmail is
run totally as the user whose calendar file is currently
being processed.


# 3cdb4c34 10-Feb-1997 Mike Pritchard <mpp@FreeBSD.org>

Fix a couple of typos.

Submitted by: bde


# fab46a51 09-Feb-1997 Mike Pritchard <mpp@FreeBSD.org>

Really fix calendar to drop all permissions when
run with "calendar -a". Also don't ignore the return
values from the setuid/setgid calls.

Thanks to bde for making me this about this.


# 3b4984d0 05-Feb-1997 Mike Pritchard <mpp@FreeBSD.org>

Initialize the group list when we switch uids when run as
root with "calendar -a". Drop all privs when execing other
programs.

Obtained from: OpenBSD


# 9d0a521e 10-May-1996 Andrey A. Chernov <ache@FreeBSD.org>

Localize even more.
FIx Orthodox Easter calculation
Better debug output


# 7f7d4bbe 10-May-1996 Andrey A. Chernov <ache@FreeBSD.org>

Allow to configure national Easter names.
Speedup my national months/days handling code.


# ab5dc107 10-May-1996 Andrey A. Chernov <ache@FreeBSD.org>

Localize it
Handle Orthodox Eastern
-Wall cleanup


# 544b5cb2 05-Apr-1996 Mike Pritchard <mpp@FreeBSD.org>

Change calendar to report the actual date for variable day events.
E.g. for Easter, and entries like "04/SunFirst" calendar will
now report:

04/05* Good Friday (2 days before easter)
04/07* First Sunday...

instead of:

Easter-2 Good Friday...
04/SunFirst First Sunday...

I also modified the calendar files to use the variable day format
for a lot of events so that they will be reported correctly.
E.g. U.S. daylight savings time is now listed as:

04/SunFirst Daylight savings time...

There are still a lot of wrong dates in there for some events
that move from year to year, but I don't have a good calendar handy
right now that I can use for reference.


# c9c822e6 01-Feb-1996 Wolfram Schneider <wosch@FreeBSD.org>

- handle events that move around from year to year, i.e.,
``the last Monday in April'
- handle easter

new options
-f calendarfile
-A days
-B days

Calendar HOME directory ~/.calendar
don't sent mail if ~/.calendar/nomail exist