Here is an new version of the 5 patches with changes to two files:

calendars/calendar.christian
advent.c

The file, calendar.christian, Advent entries are changed
from:

  11/SunLast      First Sunday of Advent (4th Sunday before Christmas)
  12/SunFirst     First Sunday of Advent (4th Sunday before Christmas)

to:

  Advent  First Sunday of Advent (4th Sunday before Christmas)

The file, advent.c, the calculation is changed from:

        /* find 4 weeks (28 days) before the Sunday before Christmas */
        yearday = yearday - 28;

to:

        /* If  Christmas is not Sunday subtract 3 weeks otherwise subtract 4 */
        if ( dayofweek > 0 )
                yearday = yearday - 21;
        else
                yearday = yearday - 28;

Here are all 5 of the patch files:

--- calendar-7.2/calendars/calendar.christian.orig      1998-11-07 
20:38:00.000000000 -0800
+++ calendar-7.2/calendars/calendar.christian   2022-12-05 08:49:24.668905247 
-0800
@@ -21,8 +21,7 @@
 Easter+56      Trinity Sunday (7 days after Pentecost)
 Easter+60      Corpus Christi (11 days after Pentecost)
 10/18  Feast Day of St. Luke
-11/SunLast     First Sunday of Advent (4th Sunday before Christmas)
-12/SunFirst    First Sunday of Advent (4th Sunday before Christmas)
+Advent First Sunday of Advent (4th Sunday before Christmas)
 12/06  St. Nicholas' Day
 12/25  Christmas

--- calendar-7.2/Makefile.orig  2016-09-10 23:40:57.000000000 -0700
+++ calendar-7.2/Makefile       2022-12-02 17:28:49.720561727 -0800
@@ -1,7 +1,7 @@
 #      $OpenBSD: Makefile,v 1.11 2016/09/11 06:40:57 natano Exp $

 PROG=  calendar
-SRCS=   calendar.c io.c day.c pesach.c ostern.c paskha.c
+SRCS=   calendar.c io.c day.c pesach.c ostern.c paskha.c advent.c
 INTER= de_DE.UTF-8 hr_HR.UTF-8 ru_RU.UTF-8 fr_FR.UTF-8

 beforeinstall:

--- calendar-7.2/calendar.h.orig        2022-12-02 12:24:15.858386699 -0800
+++ calendar-7.2/calendar.h     2022-12-02 13:21:12.184331976 -0800
@@ -80,6 +80,7 @@ int    getmonth(char *);
 int     pesach(int);
 int     easter(int);
 int     paskha(int);
+int     advent(int);
 void    insert(struct event **, struct event *);
 struct match   *isnow(char *, int);
 FILE   *opencal(void);
@@ -113,12 +114,14 @@ extern int f_Setday;      /* calendar invoked
 #define EASTERNAMELEN (sizeof(EASTER) - 1)
 #define PASKHA "paskha"
 #define PASKHALEN (sizeof(PASKHA) - 1)
+#define ADVENT "advent"
+#define ADVENTLEN (sizeof(ADVENT) - 1)

 /* calendars */
 extern enum calendars { GREGORIAN = 0, JULIAN, LUNAR } calendar;
 extern u_long julian;

-#define NUMEV 3        /* Total number of such special events */
+#define NUMEV 4        /* Total number of such special events */
 extern struct specialev spev[NUMEV];

 /* For calendar -a, specify a maximum time (in seconds) to spend parsing

--- calendar-7.2/day.c.orig     2019-08-12 13:03:28.000000000 -0700
+++ calendar-7.2/day.c  2022-12-02 13:25:46.483327583 -0800
@@ -143,6 +143,9 @@ setnnames(void)
        spev[2].name = strdup(PASKHA);
        spev[2].nlen = PASKHALEN;
        spev[2].getev = paskha;
+       spev[3].name = strdup(ADVENT);
+       spev[3].nlen = ADVENTLEN;
+       spev[3].getev = advent;
        for (i = 0; i < NUMEV; i++) {
                if (spev[i].name == NULL)
                        err(1, NULL);

--- calendar-7.2/advent.c.orig  2022-12-05 08:40:50.753913479 -0800
+++ calendar-7.2/advent.c       2022-12-05 08:56:11.084898737 -0800
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2022 by Richard Narron <rich...@aaazen.com>, California
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <stdio.h>
+
+#include "calendar.h"
+
+/* return year day for Advent, the 4th Sunday before Christmas */
+
+int
+advent(int year)
+{
+       int dayofweek = 0;
+       int nextyear  = 0;
+       int yearday   = 0;
+
+       /* Christmas and the next New years are the same day of the week */
+       nextyear = year + 1;
+       dayofweek = foy(nextyear);
+
+        /* find Christmas day of year */
+       if isleap(year)
+               yearday = 360;
+       else
+               yearday = 359;
+
+        /* find the year day of the Sunday on or before Christmas */
+       yearday = yearday - dayofweek;
+
+       /* If  Christmas is not Sunday subtract 3 weeks otherwise subtract 4 */
+       if ( dayofweek > 0 )
+               yearday = yearday - 21;
+       else
+               yearday = yearday - 28;
+
+       return (yearday);
+}

Reply via email to