1205821Sedwin/*-
215714Sache * Copyright (C) 1993-1996 by Andrey A. Chernov, Moscow, Russia.
315714Sache * All rights reserved.
415714Sache *
515714Sache * Redistribution and use in source and binary forms, with or without
615714Sache * modification, are permitted provided that the following conditions
715714Sache * are met:
815714Sache * 1. Redistributions of source code must retain the above copyright
915714Sache *    notice, this list of conditions and the following disclaimer.
1015714Sache * 2. Redistributions in binary form must reproduce the above copyright
1115714Sache *    notice, this list of conditions and the following disclaimer in the
1215714Sache *    documentation and/or other materials provided with the distribution.
1315714Sache *
1415714Sache * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
1515714Sache * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1615714Sache * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1715714Sache * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
1815714Sache * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1915714Sache * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2015714Sache * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2115714Sache * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2215714Sache * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2315714Sache * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2415714Sache * SUCH DAMAGE.
2515714Sache */
2615714Sache
2787235Smarkm#include <sys/cdefs.h>
2887235Smarkm__FBSDID("$FreeBSD$");
2987235Smarkm
3015737Sache#include <stdio.h>
3115714Sache#include <stdlib.h>
3215714Sache#include <string.h>
3315714Sache
3415720Sache#include "calendar.h"
3515720Sache
36181322Sedwin#define	PASKHA		"paskha"
37181322Sedwin#define	PASKHALEN	(sizeof(PASKHA) - 1)
3815714Sache
39218797Sosa/* return difference in days between Julian and Gregorian calendars */
40218797Sosaint
41218797Sosaj2g(int year)
42218797Sosa{
43218797Sosa	return (year < 1500) ?
44218797Sosa		0 :
45218797Sosa		10 + (year/100 - 16) - ((year/100 - 16) / 4);
46218797Sosa}
47218797Sosa
4815714Sache/* return year day for Orthodox Easter using Gauss formula */
49218473Sosa/* (new style result) */
5015714Sache
51205821Sedwinint
52169343Sdwmalonepaskha(int R) /*year*/
5315714Sache{
5415714Sache	int a, b, c, d, e;
5515714Sache	static int x = 15;
5615714Sache	static int y = 6;
57205821Sedwin	int *cumday;
5815714Sache
5915714Sache	a = R % 19;
6015714Sache	b = R % 4;
6115714Sache	c = R % 7;
62181322Sedwin	d = (19 * a + x) % 30;
63181322Sedwin	e = (2 * b + 4 * c + 6 * d + y) % 7;
64205821Sedwin	cumday = cumdaytab[isleap(R)];
65218797Sosa	return (((cumday[3] + 1) + 22) + (d + e) + j2g(R));
6615714Sache}
67