Annotation of src/usr.bin/calendar/calendar.h, Revision 1.16
1.16 ! millert 1: /* $OpenBSD: calendar.h,v 1.15 2015/12/07 18:46:35 espie Exp $ */
1.1 millert 2:
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.
1.9 millert 15: * 3. Neither the name of the University nor the names of its contributors
1.1 millert 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:
33: extern struct passwd *pw;
34: extern int doall;
1.15 espie 35: extern int daynames;
1.6 mickey 36: extern int bodun_always;
1.4 pjanzen 37: extern time_t f_time;
1.1 millert 38: extern struct tm *tp;
39: extern char *calendarFile;
1.5 pjanzen 40: extern char *calendarHome;
1.1 millert 41: extern char *optarg;
42:
1.3 pjanzen 43: struct fixs {
44: char *name;
45: int len;
46: };
47:
1.15 espie 48: #define PRINT_DATE_BASE_LEN 35
49:
1.3 pjanzen 50: struct event {
51: time_t when;
1.15 espie 52: char print_date[PRINT_DATE_BASE_LEN+1];
1.4 pjanzen 53: char **desc;
54: char *ldesc;
1.3 pjanzen 55: struct event *next;
56: };
57:
58: struct match {
1.4 pjanzen 59: time_t when;
1.15 espie 60: char print_date[PRINT_DATE_BASE_LEN];
1.7 mickey 61: int bodun;
1.4 pjanzen 62: int var;
63: struct match *next;
64: };
65:
66: struct specialev {
67: char *name;
68: int nlen;
69: char *uname;
70: int ulen;
1.8 millert 71: int (*getev)(int);
1.3 pjanzen 72: };
73:
1.8 millert 74: void cal(void);
75: void closecal(FILE *);
76: int getday(char *);
77: int getdayvar(char *);
78: int getfield(char *, char **, int *);
79: int getmonth(char *);
1.11 mickey 80: int pesach(int);
1.8 millert 81: int easter(int);
82: int paskha(int);
83: void insert(struct event **, struct event *);
84: struct match *isnow(char *, int);
85: FILE *opencal(void);
86: void settime(time_t *);
87: time_t Mktime(char *);
88: void usage(void);
89: int foy(int);
90: void variable_weekday(int *, int, int);
91: void setnnames(void);
1.1 millert 92:
93: /* some flags */
94: #define F_ISMONTH 0x01 /* month (Januar ...) */
95: #define F_ISDAY 0x02 /* day of week (Sun, Mon, ...) */
1.4 pjanzen 96: /*#define F_ISDAYVAR 0x04 variables day of week, like SundayLast */
97: #define F_SPECIAL 0x08 /* Events that occur once a year but don't track
98: * calendar time--e.g. Easter or easter depending
99: * days */
1.14 millert 100:
101: #define SECSPERDAY (24 * 60 * 60)
102: #define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
1.1 millert 103:
1.2 deraadt 104: extern int f_dayAfter; /* days after current date */
105: extern int f_dayBefore; /* days before current date */
1.4 pjanzen 106:
107: /* Special events; see also setnnames() in day.c */
108: /* '=' is not a valid character in a special event name */
1.11 mickey 109: #define PESACH "pesach"
110: #define PESACHLEN (sizeof(PESACH) - 1)
1.4 pjanzen 111: #define EASTER "easter"
112: #define EASTERNAMELEN (sizeof(EASTER) - 1)
113: #define PASKHA "paskha"
114: #define PASKHALEN (sizeof(PASKHA) - 1)
1.10 mickey 115:
116: /* calendars */
117: extern enum calendars { GREGORIAN = 0, JULIAN, LUNAR } calendar;
118: extern u_long julian;
1.4 pjanzen 119:
1.11 mickey 120: #define NUMEV 3 /* Total number of such special events */
1.4 pjanzen 121: extern struct specialev spev[NUMEV];
1.5 pjanzen 122:
123: /* For calendar -a, specify a maximum time (in seconds) to spend parsing
124: * each user's calendar files. This prevents them from hanging calendar
125: * (e.g. by using named pipes)
126: */
127: #define USERTIMEOUT 20