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: releng/10.3/usr.bin/calendar/paskha.c 218797 2011-02-18 13:41:45Z osa $"); 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