1/*- 2 * SPDX-License-Identifier: BSD-3-Clause 3 * 4 * Copyright (c) 1989, 1993, 1994 5 * The Regents of the University of California. 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 * 3. Neither the name of the University nor the names of its contributors 16 * may be used to endorse or promote products derived from this software 17 * without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 * 31 * $FreeBSD$ 32 */ 33 34#include <sys/types.h> 35#include <sys/uio.h> 36 37#define SECSPERDAY (24 * 60 * 60) 38#define SECSPERHOUR (60 * 60) 39#define SECSPERMINUTE (60) 40#define MINSPERHOUR (60) 41#define HOURSPERDAY (24) 42#define FSECSPERDAY (24.0 * 60.0 * 60.0) 43#define FSECSPERHOUR (60.0 * 60.0) 44#define FSECSPERMINUTE (60.0) 45#define FMINSPERHOUR (60.0) 46#define FHOURSPERDAY (24.0) 47 48#define DAYSPERYEAR 365 49#define DAYSPERLEAPYEAR 366 50 51/* Not yet categorized */ 52 53extern struct passwd *pw; 54extern int doall; 55extern time_t t1, t2; 56extern const char *calendarFile; 57extern int yrdays; 58extern struct fixs neaster, npaskha, ncny, nfullmoon, nnewmoon; 59extern struct fixs nmarequinox, nsepequinox, njunsolstice, ndecsolstice; 60extern double UTCOffset; 61extern int EastLongitude; 62#ifdef WITH_ICONV 63extern const char *outputEncoding; 64#endif 65 66#define isleap(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0) 67 68/* Flags to determine the returned values by determinestyle() in parsedata.c */ 69#define F_NONE 0x00000 70#define F_MONTH 0x00001 71#define F_DAYOFWEEK 0x00002 72#define F_DAYOFMONTH 0x00004 73#define F_MODIFIERINDEX 0x00008 74#define F_MODIFIEROFFSET 0x00010 75#define F_SPECIALDAY 0x00020 76#define F_ALLMONTH 0x00040 77#define F_ALLDAY 0x00080 78#define F_VARIABLE 0x00100 79#define F_EASTER 0x00200 80#define F_CNY 0x00400 81#define F_PASKHA 0x00800 82#define F_NEWMOON 0x01000 83#define F_FULLMOON 0x02000 84#define F_MAREQUINOX 0x04000 85#define F_SEPEQUINOX 0x08000 86#define F_JUNSOLSTICE 0x10000 87#define F_DECSOLSTICE 0x20000 88#define F_YEAR 0x40000 89 90#define STRING_EASTER "Easter" 91#define STRING_PASKHA "Paskha" 92#define STRING_CNY "ChineseNewYear" 93#define STRING_NEWMOON "NewMoon" 94#define STRING_FULLMOON "FullMoon" 95#define STRING_MAREQUINOX "MarEquinox" 96#define STRING_SEPEQUINOX "SepEquinox" 97#define STRING_JUNSOLSTICE "JunSolstice" 98#define STRING_DECSOLSTICE "DecSolstice" 99 100#define MAXCOUNT 125 /* Random number of maximum number of 101 * repeats of an event. Should be 52 102 * (number of weeks per year), if you 103 * want to show two years then it 104 * should be 104. If you are seeing 105 * more than this you are using this 106 * program wrong. 107 */ 108 109/* 110 * All the astronomical calculations are carried out for the meridian 120 111 * degrees east of Greenwich. 112 */ 113#define UTCOFFSET_CNY 8.0 114 115extern int debug; /* show parsing of the input */ 116extern int year1, year2; 117 118/* events.c */ 119/* 120 * Event sorting related functions: 121 * - Use event_add() to create a new event 122 * - Use event_continue() to add more text to the last added event 123 * - Use event_print_all() to display them in time chronological order 124 */ 125struct event *event_add(int, int, int, char *, int, char *, char *); 126void event_continue(struct event *events, char *txt); 127void event_print_all(FILE *fp); 128struct event { 129 int year; 130 int month; 131 int day; 132 int var; 133 char *date; 134 char *text; 135 char *extra; 136 struct event *next; 137}; 138 139/* locale.c */ 140 141struct fixs { 142 char *name; 143 size_t len; 144}; 145 146extern const char *days[]; 147extern const char *fdays[]; 148extern const char *fmonths[]; 149extern const char *months[]; 150extern const char *sequences[]; 151extern struct fixs fndays[8]; /* full national days names */ 152extern struct fixs fnmonths[13]; /* full national months names */ 153extern struct fixs ndays[8]; /* short national days names */ 154extern struct fixs nmonths[13]; /* short national month names */ 155extern struct fixs nsequences[10]; 156 157void setnnames(void); 158void setnsequences(char *); 159 160/* day.c */ 161extern const struct tm tm0; 162extern char dayname[]; 163void settimes(time_t,int before, int after, int friday, struct tm *tp1, struct tm *tp2); 164time_t Mktime(char *); 165 166/* parsedata.c */ 167int parsedaymonth(char *, int *, int *, int *, int *, char **); 168void dodebug(char *type); 169 170/* io.c */ 171void cal(void); 172void closecal(FILE *); 173FILE *opencalin(void); 174FILE *opencalout(void); 175 176/* ostern.c / paskha.c */ 177int paskha(int); 178int easter(int); 179int j2g(int); 180 181/* dates.c */ 182extern int cumdaytab[][14]; 183extern int monthdaytab[][14]; 184extern int debug_remember; 185void generatedates(struct tm *tp1, struct tm *tp2); 186void dumpdates(void); 187int remember_ymd(int y, int m, int d); 188int remember_yd(int y, int d, int *rm, int *rd); 189int first_dayofweek_of_year(int y); 190int first_dayofweek_of_month(int y, int m); 191int walkthrough_dates(struct event **e); 192void addtodate(struct event *e, int year, int month, int day); 193 194/* pom.c */ 195#define MAXMOONS 18 196void pom(int year, double UTCoffset, int *fms, int *nms); 197void fpom(int year, double utcoffset, double *ffms, double *fnms); 198 199/* sunpos.c */ 200void equinoxsolstice(int year, double UTCoffset, int *equinoxdays, int *solsticedays); 201void fequinoxsolstice(int year, double UTCoffset, double *equinoxdays, double *solsticedays); 202int calculatesunlongitude30(int year, int degreeGMToffset, int *ichinesemonths); 203 204#ifdef WITH_ICONV 205void set_new_encoding(void); 206#endif 207