Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/usr.bin/calendar/calendar.h
34677 views
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
32
#include <sys/types.h>
33
#include <sys/uio.h>
34
35
#define SECSPERDAY (24 * 60 * 60)
36
#define SECSPERHOUR (60 * 60)
37
#define SECSPERMINUTE (60)
38
#define MINSPERHOUR (60)
39
#define HOURSPERDAY (24)
40
#define FSECSPERDAY (24.0 * 60.0 * 60.0)
41
#define FSECSPERHOUR (60.0 * 60.0)
42
#define FSECSPERMINUTE (60.0)
43
#define FMINSPERHOUR (60.0)
44
#define FHOURSPERDAY (24.0)
45
46
#define DAYSPERYEAR 365
47
#define DAYSPERLEAPYEAR 366
48
49
/* Not yet categorized */
50
51
extern struct passwd *pw;
52
extern int doall;
53
extern time_t t1, t2;
54
extern const char *calendarFile;
55
extern int yrdays;
56
extern struct fixs neaster, npaskha, ncny, nfullmoon, nnewmoon;
57
extern struct fixs nmarequinox, nsepequinox, njunsolstice, ndecsolstice;
58
extern double UTCOffset;
59
extern int EastLongitude;
60
#ifdef WITH_ICONV
61
extern const char *outputEncoding;
62
#endif
63
64
#define isleap(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0)
65
66
/* Flags to determine the returned values by determinestyle() in parsedata.c */
67
#define F_NONE 0x00000
68
#define F_MONTH 0x00001
69
#define F_DAYOFWEEK 0x00002
70
#define F_DAYOFMONTH 0x00004
71
#define F_MODIFIERINDEX 0x00008
72
#define F_MODIFIEROFFSET 0x00010
73
#define F_SPECIALDAY 0x00020
74
#define F_ALLMONTH 0x00040
75
#define F_ALLDAY 0x00080
76
#define F_VARIABLE 0x00100
77
#define F_EASTER 0x00200
78
#define F_CNY 0x00400
79
#define F_PASKHA 0x00800
80
#define F_NEWMOON 0x01000
81
#define F_FULLMOON 0x02000
82
#define F_MAREQUINOX 0x04000
83
#define F_SEPEQUINOX 0x08000
84
#define F_JUNSOLSTICE 0x10000
85
#define F_DECSOLSTICE 0x20000
86
#define F_YEAR 0x40000
87
88
#define STRING_EASTER "Easter"
89
#define STRING_PASKHA "Paskha"
90
#define STRING_CNY "ChineseNewYear"
91
#define STRING_NEWMOON "NewMoon"
92
#define STRING_FULLMOON "FullMoon"
93
#define STRING_MAREQUINOX "MarEquinox"
94
#define STRING_SEPEQUINOX "SepEquinox"
95
#define STRING_JUNSOLSTICE "JunSolstice"
96
#define STRING_DECSOLSTICE "DecSolstice"
97
98
#define MAXCOUNT 125 /* Random number of maximum number of
99
* repeats of an event. Should be 52
100
* (number of weeks per year), if you
101
* want to show two years then it
102
* should be 104. If you are seeing
103
* more than this you are using this
104
* program wrong.
105
*/
106
107
/*
108
* All the astronomical calculations are carried out for the meridian 120
109
* degrees east of Greenwich.
110
*/
111
#define UTCOFFSET_CNY 8.0
112
113
extern int debug; /* show parsing of the input */
114
extern int year1, year2;
115
116
/* events.c */
117
/*
118
* Event sorting related functions:
119
* - Use event_add() to create a new event
120
* - Use event_continue() to add more text to the last added event
121
* - Use event_print_all() to display them in time chronological order
122
*/
123
struct event *event_add(int, int, int, int, char *, char *);
124
void event_continue(struct event *events, char *txt);
125
void event_print_all(FILE *fp);
126
struct event {
127
int year;
128
int month;
129
int day;
130
int var;
131
char *text;
132
char *extra;
133
struct event *next;
134
};
135
136
/* locale.c */
137
138
struct fixs {
139
char *name;
140
size_t len;
141
};
142
143
extern const char *days[];
144
extern const char *fdays[];
145
extern const char *fmonths[];
146
extern const char *months[];
147
extern const char *sequences[];
148
extern struct fixs fndays[8]; /* full national days names */
149
extern struct fixs fnmonths[13]; /* full national months names */
150
extern struct fixs ndays[8]; /* short national days names */
151
extern struct fixs nmonths[13]; /* short national month names */
152
extern struct fixs nsequences[10];
153
154
void setnnames(void);
155
void setnsequences(char *);
156
157
/* day.c */
158
extern const struct tm tm0;
159
extern char dayname[];
160
void settimes(time_t,int before, int after, int friday, struct tm *tp1, struct tm *tp2);
161
time_t Mktime(char *);
162
163
/* parsedata.c */
164
int parsedaymonth(char *, int *, int *, int *, int *, char **);
165
void dodebug(char *type);
166
167
/* io.c */
168
void cal(void);
169
void closecal(FILE *);
170
FILE *opencalin(void);
171
FILE *opencalout(void);
172
173
/* ostern.c / paskha.c */
174
int paskha(int);
175
int easter(int);
176
int j2g(int);
177
178
/* dates.c */
179
extern int cumdaytab[][14];
180
extern int monthdaytab[][14];
181
extern int debug_remember;
182
void generatedates(struct tm *tp1, struct tm *tp2);
183
void dumpdates(void);
184
int remember_ymd(int y, int m, int d);
185
int remember_yd(int y, int d, int *rm, int *rd);
186
int first_dayofweek_of_year(int y);
187
int first_dayofweek_of_month(int y, int m);
188
int walkthrough_dates(struct event **e);
189
void addtodate(struct event *e);
190
191
/* pom.c */
192
#define MAXMOONS 18
193
void pom(int year, double UTCoffset, int *fms, int *nms);
194
void fpom(int year, double utcoffset, double *ffms, double *fnms);
195
196
/* sunpos.c */
197
void equinoxsolstice(int year, double UTCoffset, int *equinoxdays, int *solsticedays);
198
void fequinoxsolstice(int year, double UTCoffset, double *equinoxdays, double *solsticedays);
199
int calculatesunlongitude30(int year, int degreeGMToffset, int *ichinesemonths);
200
201
#ifdef WITH_ICONV
202
void set_new_encoding(void);
203
#endif
204
205