/usr/share/doc/util-linux
NameSizeModeActions
examples/-0755rm
releases/-0755rm
00-about-docs.txt2600644editdlrm
AUTHORS.gz151130644editdlrm
blkid.txt32580644editdlrm
cal.txt22620644editdlrm
changelog.Debian.gz26540644editdlrm
col.txt19130644editdlrm
copyright230450644editdlrm
deprecated.txt30860644editdlrm
getopt.txt9920644editdlrm
getopt_changelog.txt19270644editdlrm
howto-build-sys.txt31930644editdlrm
howto-compilation.txt29450644editdlrm
howto-contribute.txt.gz34370644editdlrm
howto-debug.txt24370644editdlrm
howto-man-page.txt1260644editdlrm
howto-pull-request.txt.gz42600644editdlrm
howto-tests.txt.gz17060644editdlrm
howto-usage-function.txt.gz23280644editdlrm
hwclock.txt1470644editdlrm
modems-with-agetty.txt26140644editdlrm
mount.txt5210644editdlrm
NEWS.Debian.gz18970644editdlrm
PAM-configuration.txt6710644editdlrm
parse-date.txt.gz81240644editdlrm
pg.txt4480644editdlrm
poeigl.txt.gz88670644editdlrm
README.Debian4810644editdlrm
release-schedule.txt13540644editdlrm
Edit: /usr/share/doc/util-linux/cal.txt (2262B)
The cal(1) date routines were written from scratch, basically from first principles. The algorithm for calculating the day of week from any Gregorian date was "reverse engineered". This was necessary as most of the documented algorithms have to do with date calculations for other calendars (e.g. julian) and are only accurate when converted to gregorian within a narrow range of dates. 1 Jan 1 is a Saturday because that's what cal says and I couldn't change that even if I was dumb enough to try. From this we can easily calculate the day of week for any date. The algorithm for a zero based day of week: calculate the number of days in all prior years (year-1)*365 add the number of leap years (days?) since year 1 (not including this year as that is covered later) add the day number within the year this compensates for the non-inclusive leap year calculation if the day in question occurs before the gregorian reformation (3 sep 1752 for our purposes), then simply return (value so far - 1 + SATURDAY's value of 6) modulo 7. if the day in question occurs during the reformation (3 sep 1752 to 13 sep 1752 inclusive) return THURSDAY. This is my idea of what happened then. It does not matter much as this program never tries to find day of week for any day that is not the first of a month. otherwise, after the reformation, use the same formula as the days before with the additional step of subtracting the number of days (11) that were adjusted out of the calendar just before taking the modulo. It must be noted that the number of leap years calculation is sensitive to the date for which the leap year is being calculated. A year that occurs before the reformation is determined to be a leap year if its modulo of 4 equals zero. But after the reformation, a year is only a leap year if its modulo of 4 equals zero and its modulo of 100 does not. Of course, there is an exception for these century years. If the modulo of 400 equals zero, then the year is a leap year anyway. This is, in fact, what the gregorian reformation was all about (a bit of error in the old algorithm that caused the calendar to be inaccurate.) Once we have the day in year for the first of the month in question, the rest is trivial.