Annotation of src/usr.bin/calendar/paskha.c, Revision 1.1
1.1 ! millert 1: /* $OpenBSD: $ */
! 2:
! 3: /*
! 4: * Copyright (C) 1993-1996 by Andrey A. Chernov, Moscow, Russia.
! 5: * All rights reserved.
! 6: *
! 7: * Redistribution and use in source and binary forms, with or without
! 8: * modification, are permitted provided that the following conditions
! 9: * are met:
! 10: * 1. Redistributions of source code must retain the above copyright
! 11: * notice, this list of conditions and the following disclaimer.
! 12: * 2. Redistributions in binary form must reproduce the above copyright
! 13: * notice, this list of conditions and the following disclaimer in the
! 14: * documentation and/or other materials provided with the distribution.
! 15: *
! 16: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
! 17: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 18: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 19: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
! 20: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 21: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 22: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 23: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 24: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 25: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 26: * SUCH DAMAGE.
! 27: */
! 28:
! 29: #ifndef lint
! 30: static char rcsid[] = "$OpenBSD: $";
! 31: #endif /* not lint */
! 32:
! 33: #include <stdio.h>
! 34: #include <stdlib.h>
! 35: #include <string.h>
! 36: #include <time.h>
! 37:
! 38: #include "calendar.h"
! 39:
! 40: #define PASKHA "paskha"
! 41: #define PASKHALEN (sizeof(PASKHA) - 1)
! 42:
! 43: /* return year day for Orthodox Easter using Gauss formula */
! 44: /* (old style result) */
! 45:
! 46: static int
! 47: paskha (R)
! 48: int R; /*year*/
! 49: {
! 50: int a, b, c, d, e;
! 51: static int x = 15;
! 52: static int y = 6;
! 53: extern int *cumdays;
! 54:
! 55: a = R % 19;
! 56: b = R % 4;
! 57: c = R % 7;
! 58: d = (19*a + x) % 30;
! 59: e = (2*b + 4*c + 6*d + y) % 7;
! 60: return (((cumdays[3] + 1) + 22) + (d + e));
! 61: }
! 62:
! 63: /* return year day for Orthodox Easter depending days */
! 64:
! 65: int
! 66: getpaskha(s, year)
! 67: char *s;
! 68: int year;
! 69: {
! 70: int offset;
! 71: extern struct fixs npaskha;
! 72:
! 73: if (strncasecmp(s, PASKHA, PASKHALEN) == 0)
! 74: s += PASKHALEN;
! 75: else if ( npaskha.name != NULL
! 76: && strncasecmp(s, npaskha.name, npaskha.len) == 0
! 77: )
! 78: s += npaskha.len;
! 79: else
! 80: return 0;
! 81:
! 82:
! 83: /* Paskha+1 or Paskha-2
! 84: * ^ ^ */
! 85:
! 86: switch(*s) {
! 87:
! 88: case '-':
! 89: case '+':
! 90: offset = atoi(s);
! 91: break;
! 92:
! 93: default:
! 94: offset = 0;
! 95: break;
! 96: }
! 97:
! 98: return (paskha(year) + offset + 13/* new style */);
! 99: }