%
%	\DayOfWeek	expands to the day of the week ("Sunday", etc.)
%	\PhaseOfMoon	expands to the phase of the moon
%
%	Written by Martin Minow of DEC (minow%bolt.dec@decwrl.dec.com).
%
\def\DayOfWeek{%
%
% 	Calculate day of the week, return "Sunday", etc.
%
  \newcount\dow				% Gets day of the week
  \newcount\leap			% Leap year fingaler
  \newcount\x				% Temp register
  \newcount\y 				% Another temp register
%		leap = year + (month - 14)/12;
  \leap=\month \advance\leap by -14 \divide\leap by 12
  \advance\leap by \year
%		dow = (13 * (month + 10 - (month + 10)/13*12) - 1)/5
  \dow=\month \advance\dow by 10
  \y=\dow \divide\y by 13 \multiply\y by 12
  \advance\dow by -\y \multiply\dow by 13 \advance\dow by -1 \divide\dow by 5
%		dow += day + 77 + 5 * (leap % 100)/4
  \advance\dow by \day \advance\dow by 77
  \x=\leap \y=\x \divide\y by 100 \multiply\y by 100 \advance\x by -\y
  \multiply\x by 5 \divide\x by 4 \advance\dow by \x
%		dow += leap / 400
  \x=\leap \divide\x by 400 \advance\dow by \x
%		dow -= leap / 100 * 2;
%		dow = (dow % 7)
  \x=\leap \divide\x by 100 \multiply\x by 2 \advance\dow by -\x
  \x=\dow \divide\x by 7 \multiply\x by 7 \advance\dow by -\x
  \ifcase\dow Sunday\or Monday\or Tuesday\or Wednesday\or
	Thursday\or Friday\or Saturday\fi
}
%%
%%
%%
\def\PhaseOfMoon{%	Calculate the phase of the (civil) moon.
%
% The routine calculates the year's epact (the age of the moon on Jan 1.),
% adds this to the number of days in the year, and calculates the phase
% of the moon for this date.  It returns the phase as a string, e.g.,
% "new", "full", etc.
%
% In the algorithm:
%
%	diy	Is the day of the year - 1 (i.e., Jan 1 is day 0).
%
%	golden	Is the number of the year in the Mentonic cycle, used to
%		determine the position of the calender moon.
%
%	epact	Is the age of the calender moon (in days) at the beginning
%		of the year.  To calculate epact, two century-based
%		corrections are applied:
%		Gregorian:	(3 * cent)/4 - 12
%			is the number of years such as 1700, 1800 when
%			leap year was not held.
%		Clavian:	(((8 * cent) + 5) / 25) - 5
%			is a correction to the Mentonic cycle of about
%			8 days every 2500 years.  Note that this will
%			overflow 16 bits in the year 409600.  Beware.
%
% The algorithm is accurate for the Gregorian calender only.
%	
% The magic numbers used in the phase calculation are as follows:
%	 29.5		The moon's period in days.
%	177		29.5 scaled by 6
%	 22		(29.5 / 8) scaled by 6 (this gets the phase)
%	 11		((29.5 / 8) / 2) scaled by 6
%
% Theoretically, this should yield a number in the range 0 .. 7.  However,
% two days per year, things don't work out too well.
%
% Epact is calculated by the algorithm given in Knuth vol. 1 (calculation
% of Easter).  See also the article on Calenders in the Encyclopaedia
% Britannica and Knuth's algorithm in CACM April 1962, page 209.
%
  \newcount\cent		% Century number (1979 == 20)
  \newcount\epact		% Age of the moon on Jan. 1
  \newcount\diy			% Day in the year
  \newcount\golden		% Moon's golden number
  \newcount\x			% Temp
  \newcount\m			% Temp for modulus
  \diy=\day \advance\diy by \ifcase\month		% Jan 1 == 0
	-1\or -1\or 30\or 58\or 89\or 119\or 150\or	% Jan .. Jun
	180\or 211\or 241\or 272\or 303\or 333\fi	% Jul .. Dec
%		if ((month > 2) && ((year % 4 == 0) && 
%		    ((year % 400 == 0) || (year % 100 != 0))))
%			diy++;		/* Leapyear fixup	*/
  \ifnum \month>2
    \x=\year \m=\x \divide\m by 4 \multiply\m by 4 \advance\x by -\m
    \ifnum \x=0				% month > 2 and maybe leapyear
      \x=\year \m=\x \divide\m by 400 \multiply\m by 400 \advance\x by -\m
      \ifnum \x=0			% 2000 is a leap year
	\advance\diy by 1		% so it's one day later
      \else				% not 2000, check other '00's
	\x=\year \m=\x \divide\m by 100 \multiply\m by 100 \advance\x by -\m
	\ifnum \x>0			% not some other '00' year
	    \advance\diy by 1		% it's still one day later
	\fi				% not odd century
      \fi				% not 2000-type century
    \fi					% not leapish year
  \fi					% not march or later
%		cent = (year / 100) + 1;	/* Century number	*/
%		golden = (year % 19) + 1;	/* Golden number	*/
  \cent=\year \divide\cent by 100 \advance\cent by 1
  \golden=\year
  \m=\year \divide\m by 19 \multiply\m by 19 \advance\golden by -\m
  \advance\golden by 1
%		epact = ((11 * golden) + 20	/* Golden number	*/
%		+ (((8 * cent) + 5) / 25) - 5	/* 400 year cycle	*/
%		- (((3 * cent) / 4) - 12)) % 30;/* Leap year correction	*/
  \epact=11 \multiply\epact by \golden
  \advance\epact by 20
  \x=8 \multiply\x by \cent \advance\x by 5
  \divide\x by 25 \advance\x by -5
  \advance\epact by \x
  \x=3 \multiply\x by \cent \divide\x by 4 \advance\x by -12
  \advance\epact by -\x
  \m=\epact \divide\m by 30 \multiply\m by 30 \advance\epact by -\m
%	if (epact <= 0)
%		epact += 30;			/* Age range is 1 .. 30	*/
%	if ((epact == 25 && golden > 11) || epact == 24)
%		epact++;
  \ifnum \epact<0
    \advance\epact by 30
  \fi
  \ifnum \epact=25
    \ifnum \golden>11
      \advance \epact by 1
    \fi
  \else
    \ifnum \epact=24
      \advance \epact by 1
    \fi
  \fi
%
% Calculate the phase, using the magic numbers defined above.
% Note that phase may be equal to 8 (== 0) on two days of the year
% due to the way the algorithm was implemented.
%	phase = (((((diy + epact) * 6) + 11) % 177) / 22) & 7;
%
  \x=\diy \advance\x by \epact \multiply\x by 6 \advance\x by 11
  \m=\x \divide\m by 177 \multiply\m by 177 \advance\x by -\m
  \divide\x by 22
  \ifcase\x new\or waxing crescent\or in its first quarter\or
	waxing gibbous\or full\or waning gibbous\or
	in its last quarter\or waning crescent\or new\fi
}
