Added easterog() and easteroj() which compute orthodox easter for

Gregorian and Julian Calendar.
Suggested by: Andrey
This commit is contained in:
Wolfgang Helbig 1997-12-07 19:04:14 +00:00
parent ed1b05436a
commit 4000696ce7
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=31611
4 changed files with 56 additions and 26 deletions

View File

@ -1,4 +1,4 @@
# $Id$
# $Id: Makefile,v 1.1.1.1 1997/12/04 10:41:49 helbig Exp $
LIB= calendar
@ -6,7 +6,7 @@ SRCS= calendar.c easter.c
MAN3= calendar.3
MLINKS= calendar.3 easterg.3 calendar.3 easterj.3 \
MLINKS= calendar.3 easterg.3 calendar.3 easterog.3 calendar.3 easteroj.3 \
calendar.3 gdate.3 calendar.3 jdate.3 \
calendar.3 ndaysg.3 calendar.3 ndaysj.3 \
calendar.3 week.3 calendar.3 weekday.3

View File

@ -22,14 +22,15 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" $Id$
.\" $Id: calendar.3,v 1.1.1.1 1997/12/04 10:41:49 helbig Exp $
.\"
.Dd November 29, 1997
.Dt CALENDAR 3
.Os
.Sh NAME
.Nm easterg ,
.Nm easterj ,
.Nm easterog ,
.Nm easteroj ,
.Nm gdate ,
.Nm jdate ,
.Nm ndaysg ,
@ -42,7 +43,9 @@
.Ft date *
.Fn easterg "int year" "date *dt"
.Ft date *
.Fn easterj "int year" "date *dt"
.Fn easterog "int year" "date *dt"
.Ft date *
.Fn easteroj "int year" "date *dt"
.Ft date *
.Fn gdate "int nd" "date *dt"
.Ft date *
@ -64,18 +67,28 @@ Programs should be linked with
.Fl lcalendar .
The functions
.Fn easterg
.Fn easterg ,
.Fn easterog
and
.Fn easterj
.Fn easteroj
store the date of Easter Sunday into the structure pointed at by
.Fa dt
and return a pointer to this structure.
The function
.Fn easterg
assumes Gregorian Calendar (adopted by most western churches after 1582) and
.Fn easterj
assumes Julian Calendar (Western churches before 1582 and Greek Church
the functions
.Fn easterog
and
.Fn easteroj
compute the date of Easter Sunday according to the orthodox rules
(Western churches before 1582, Greek and Russian Orthodox Church
until today).
The result returned by
.Fn easterog
is the date in Gregorian Calendar, whereas
.Fn easteroj
returns the date in Julian Calendar.
The functions
.Fn gdate ,

View File

@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id$
* $Id: calendar.h,v 1.1.1.1 1997/12/04 10:41:49 helbig Exp $
*/
typedef struct date {
int y; /* year */
@ -32,7 +32,8 @@ typedef struct date {
} date;
date *easterg(int _year, date *_dt);
date *easterj(int _year, date *_dt);
date *easterog(int _year, date *_dt);
date *easteroj(int _year, date *_dt);
date *gdate(int _nd, date *_dt);
date *jdate(int _nd, date *_dt);
int ndaysg(date *_dt);

View File

@ -23,11 +23,13 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id$
* $Id: easter.c,v 1.1.1.1 1997/12/04 10:41:49 helbig Exp $
*/
#include "calendar.h"
static int easterodn(int y);
/* Compute Easter Sunday in Gregorian Calendar */
date *
easterg(int y, date *dt)
@ -47,11 +49,26 @@ easterg(int y, date *dt)
return (dt);
}
/* Compute Easter Sunday in Julian Calendar */
date *
easterj(int y, date * 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
@ -62,21 +79,20 @@ easterj(int y, date * dt)
/* 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];
/* Assign the easter limit of y to dt */
dt.d = mc[y % 19];
if (dt->d < 21)
dt->m = 4;
if (dt.d < 21)
dt.m = 4;
else
dt->m = 3;
dt.m = 3;
dt->y = y;
dt.y = y;
/* Compute the next sunday after the easter limit */
dn = ndaysj(dt);
dn += ns[weekday(dn)];
return (jdate(dn, dt));
/* Return the next sunday after the easter limit */
dn = ndaysj(&dt);
return (dn + ns[weekday(dn)]);
}