style(9)ify usr.bin/calendar

PR:		bin/118644
Approved by:	bde@ (mentor)
MFC after:	1 week
This commit is contained in:
Edwin Groothuis 2008-08-05 08:11:54 +00:00
parent 7f05f04afd
commit 35304a1641
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=181322
6 changed files with 317 additions and 283 deletions

View File

@ -71,9 +71,9 @@ main(int argc, char *argv[])
{
int ch;
(void) setlocale(LC_ALL, "");
(void)setlocale(LC_ALL, "");
while ((ch = getopt(argc, argv, "-af:t:A:B:F:W:")) != -1)
while ((ch = getopt(argc, argv, "-A:aB:F:f:t:W:")) != -1)
switch (ch) {
case '-': /* backward contemptible */
case 'a':
@ -84,13 +84,12 @@ main(int argc, char *argv[])
doall = 1;
break;
case 'f': /* other calendar file */
calendarFile = optarg;
break;
case 't': /* other date, undocumented, for tests */
f_time = Mktime (optarg);
f_time = Mktime(optarg);
break;
case 'W': /* we don't need no steenking Fridays */
@ -113,6 +112,7 @@ main(int argc, char *argv[])
default:
usage();
}
argc -= optind;
argv += optind;
@ -143,11 +143,10 @@ main(int argc, char *argv[])
void
usage(void)
{
(void)fprintf(stderr, "%s\n%s\n",
fprintf(stderr, "%s\n%s\n",
"usage: calendar [-a] [-A days] [-B days] [-F friday] "
"[-f calendarfile]",
" [-t dd[.mm[.year]]] [-W days]");
exit(1);
}

View File

@ -64,25 +64,24 @@ void setnnames(void);
#define isleap(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0)
/* some flags */
#define F_ISMONTH 0x01 /* month (Januar ...) */
#define F_ISMONTH 0x01 /* month (January ...) */
#define F_ISDAY 0x02 /* day of week (Sun, Mon, ...) */
#define F_ISDAYVAR 0x04 /* variables day of week, like SundayLast */
#define F_EASTER 0x08 /* Easter or easter depending days */
extern int f_dayAfter; /* days after current date */
extern int f_dayBefore; /* days bevore current date */
extern int f_dayBefore; /* days before current date */
extern int Friday; /* day before weekend */
struct fixs {
char *name;
int len;
};
struct event *event_add(struct event *events, int month, int day, char *date,
int var, char *txt);
/*
* Event sorting related functions:
* - Use event_add() to create a new event
* - Use event_continue() to add more text to the last added event
* - Use event_print_all() to display them in time chronological order
*/
struct event *event_add(struct event *, int, int, char *, int, char *);
void event_continue(struct event *events, char *txt);
void event_print_all(FILE *fp, struct event *events);
/* Stored calendar event */
struct event {
int month;
int day;
@ -91,3 +90,8 @@ struct event {
char *text;
struct event *next;
};
struct fixs {
char *name;
int len;
};

View File

@ -55,8 +55,8 @@ char dayname[10];
/* 1-based month, 0-based days, cumulative */
int daytab[][14] = {
{ 0, -1, 30, 58, 89, 119, 150, 180, 211, 242, 272, 303, 333, 364 },
{ 0, -1, 30, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 },
{0, -1, 30, 58, 89, 119, 150, 180, 211, 242, 272, 303, 333, 364},
{0, -1, 30, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365},
};
static char const *days[] = {
@ -143,7 +143,7 @@ settime(time_t now)
char *oldl, *lbufp;
tp = localtime(&now);
if ( isleap(tp->tm_year + 1900) ) {
if (isleap(tp->tm_year + 1900)) {
yrdays = 366;
cumdays = daytab[1];
} else {
@ -159,9 +159,9 @@ settime(time_t now)
lbufp = setlocale(LC_TIME, NULL);
if (lbufp != NULL && (oldl = strdup(lbufp)) == NULL)
errx(1, "cannot allocate memory");
(void) setlocale(LC_TIME, "C");
(void)setlocale(LC_TIME, "C");
header[5].iov_len = strftime(dayname, sizeof(dayname), "%A", tp);
(void) setlocale(LC_TIME, (oldl != NULL ? oldl : ""));
(void)setlocale(LC_TIME, (oldl != NULL ? oldl : ""));
if (oldl != NULL)
free(oldl);
@ -172,7 +172,7 @@ settime(time_t now)
* Day: two digits, Month: two digits, Year: digits
*/
time_t
Mktime (char *dp)
Mktime(char *dp)
{
time_t t;
int d, m, y;
@ -200,10 +200,10 @@ Mktime (char *dp)
}
#ifdef DEBUG
fprintf(stderr, "Mktime: %d %d %s\n", (int)mktime(&tm), (int)t,
asctime(&tm));
fprintf(stderr, "Mktime: %d %d %s\n",
(int)mktime(&tm), (int)t, asctime(&tm));
#endif
return(mktime(&tm));
return (mktime(&tm));
}
/*
@ -308,18 +308,18 @@ isnow(char *endp, int *monthp, int *dayp, int *varp)
/* negative offset; last, -4 .. -1 */
if (day < 0) {
v1 = day/10 - 1; /* offset -4 ... -1 */
v1 = day / 10 - 1; /* offset -4 ... -1 */
day = 10 + (day % 10); /* day 1 ... 7 */
/* day, eg '22nd' */
v2 = tp->tm_mday + (((day - 1) - tp->tm_wday + 7) % 7);
v2 = tp->tm_mday +
(((day - 1) - tp->tm_wday + 7) % 7);
/* (month length - day) / 7 + 1 */
if (cumdays[month+1] - cumdays[month] >= v2
&& ((int)((cumdays[month+1] -
if (cumdays[month + 1] - cumdays[month] >= v2
&& ((int)((cumdays[month + 1] -
cumdays[month] - v2) / 7) + 1) == -v1)
/* bingo ! */
day = v2;
day = v2; /* bingo ! */
/* set to yesterday */
else {
@ -331,43 +331,44 @@ isnow(char *endp, int *monthp, int *dayp, int *varp)
/* first, second ... +1 ... +5 */
else {
v1 = day/10; /* offset: +1 (first Sunday) ... */
/* offset: +1 (first Sunday) ... */
v1 = day / 10;
day = day % 10;
/* day, eg '22th' */
v2 = tp->tm_mday + (((day - 1) - tp->tm_wday + 7) % 7);
v2 = tp->tm_mday +
(((day - 1) - tp->tm_wday + 7) % 7);
/* Hurrah! matched */
if ( ((v2 - 1 + 7) / 7) == v1 )
if (((v2 - 1 + 7) / 7) == v1 )
day = v2;
/* set to yesterday */
else {
/* set to yesterday */
day = tp->tm_mday - 1;
if (day == 0)
return (0);
}
}
}
} else {
/* wired */
else {
day = tp->tm_mday + (((day - 1) - tp->tm_wday + 7) % 7);
*varp = 1;
}
}
if (!(flags & F_EASTER)) {
if (day + cumdays[month] > cumdays[month + 1]) { /* off end of month */
day -= (cumdays[month + 1] - cumdays[month]); /* adjust */
if (++month > 12) /* next year */
if (day + cumdays[month] > cumdays[month + 1]) {
/* off end of month, adjust */
day -= (cumdays[month + 1] - cumdays[month]);
/* next year */
if (++month > 12)
month = 1;
}
*monthp = month;
*dayp = day;
day = cumdays[month] + day;
}
else {
} else {
for (v1 = 0; day > cumdays[v1]; v1++)
;
*monthp = v1 - 1;
@ -376,8 +377,8 @@ isnow(char *endp, int *monthp, int *dayp, int *varp)
}
#ifdef DEBUG
fprintf(stderr, "day2: day %d(%d-%d) yday %d\n", *dayp, day,
cumdays[month], tp->tm_yday);
fprintf(stderr, "day2: day %d(%d-%d) yday %d\n",
*dayp, day, cumdays[month], tp->tm_yday);
#endif
/* When days before or days after is specified */
@ -395,7 +396,7 @@ isnow(char *endp, int *monthp, int *dayp, int *varp)
/* previous year */
if (tp->tm_yday - f_dayBefore < 0) {
int before = yrdays + (tp->tm_yday - f_dayBefore );
int before = yrdays + (tp->tm_yday - f_dayBefore);
if (day >= before)
return (1);
}
@ -451,39 +452,35 @@ getdayvar(char *s)
{
int offs;
offs = strlen(s);
/* Sun+1 or Wednesday-2
* ^ ^ */
/* fprintf(stderr, "x: %s %s %d\n", s, s + offs - 2, offs); */
switch(*(s + offs - 2)) {
switch (*(s + offs - 2)) {
case '-':
return(-(atoi(s + offs - 1)));
return (-(atoi(s + offs - 1)));
case '+':
return(atoi(s + offs - 1));
return (atoi(s + offs - 1));
}
/*
* some aliases: last, first, second, third, fourth
*/
/* last */
if (offs > 4 && !strcasecmp(s + offs - 4, "last"))
return(-1);
return (-1);
else if (offs > 5 && !strcasecmp(s + offs - 5, "first"))
return(+1);
return (+1);
else if (offs > 6 && !strcasecmp(s + offs - 6, "second"))
return(+2);
return (+2);
else if (offs > 5 && !strcasecmp(s + offs - 5, "third"))
return(+3);
return (+3);
else if (offs > 6 && !strcasecmp(s + offs - 6, "fourth"))
return(+4);
return (+4);
/* no offset detected */
return(0);
return (0);
}

View File

@ -68,9 +68,11 @@ __FBSDID("$FreeBSD$");
const char *calendarFile = "calendar"; /* default calendar file */
const char *calendarHomes[] = { ".calendar", _PATH_INCLUDE }; /* HOME */
const char *calendarHomes[] = {".calendar", _PATH_INCLUDE}; /* HOME */
const char *calendarNoMail = "nomail"; /* don't sent mail if this file exist */
char path[MAXPATHLEN];
struct fixs neaster, npaskha;
struct iovec header[] = {
@ -83,7 +85,6 @@ struct iovec header[] = {
{"'s Calendar\nPrecedence: bulk\n\n", 30},
};
void
cal(void)
{
@ -113,7 +114,7 @@ cal(void)
if (buf[0] == '\0')
continue;
if (strncmp(buf, "LANG=", 5) == 0) {
(void) setlocale(LC_ALL, buf + 5);
(void)setlocale(LC_ALL, buf + 5);
d_first = (*nl_langinfo(D_MD_ORDER) == 'd');
setnnames();
continue;
@ -145,7 +146,8 @@ cal(void)
char dbuf[80];
if (d_first < 0)
d_first = (*nl_langinfo(D_MD_ORDER) == 'd');
d_first =
(*nl_langinfo(D_MD_ORDER) == 'd');
tm.tm_sec = 0; /* unused */
tm.tm_min = 0; /* unused */
tm.tm_hour = 0; /* unused */
@ -154,27 +156,33 @@ cal(void)
tm.tm_mday = day;
tm.tm_year = tp->tm_year; /* unused */
(void)strftime(dbuf, sizeof(dbuf),
d_first ? "%e %b" : "%b %e",
&tm);
events = event_add(events, month, day, dbuf, var, p);
d_first ? "%e %b" : "%b %e", &tm);
events = event_add(events, month, day, dbuf,
var, p);
}
}
else if (printing)
} else {
if (printing)
event_continue(events, buf);
}
}
event_print_all(fp, events);
closecal(fp);
}
/*
* Functions to handle buffered calendar events.
*/
struct event *
event_add(struct event *events, int month, int day, char *date, int var, char *txt)
event_add(struct event *events, int month, int day,
char *date, int var, char *txt)
{
struct event *e;
/*
* Creating a new event:
* - Create a new event
* - Copy the machine readable day and month
* - Copy the human readable and language specific date
* - Copy the text of the event
*/
e = (struct event *)calloc(1, sizeof(struct event));
if (e == NULL)
errx(1, "event_add: cannot allocate memory");
@ -197,6 +205,13 @@ event_continue(struct event *e, char *txt)
{
char *text;
/*
* Adding text to the event:
* - Save a copy of the old text (unknown length, so strdup())
* - Allocate enough space for old text + \n + new text + 0
* - Store the old text + \n + new text
* - Destroy the saved copy.
*/
text = strdup(e->text);
if (text == NULL)
errx(1, "event_continue: cannot allocate memory");
@ -217,15 +232,30 @@ void
event_print_all(FILE *fp, struct event *events)
{
struct event *e, *e_next;
int daycount = f_dayAfter + f_dayBefore;
int daycounter;
int day, month;
for (daycounter = 0; daycounter <= daycount; daycounter++) {
/*
* Print all events:
* - We know the number of days to be counted (f_dayAfter + f_dayBefore)
* - We know the current day of the year ("now" - f_dayBefore + counter)
* - We know the number of days in the year (yrdays, set in settime())
* - So we know the date on which the current daycounter is on the
* calendar in days and months.
* - Go through the list of events, and print all matching dates
*/
for (daycounter = 0; daycounter <= f_dayAfter + f_dayBefore;
daycounter++) {
day = tp->tm_yday - f_dayBefore + daycounter;
if (day < 0) day += yrdays;
if (day >= yrdays) day -= yrdays;
if (day < 0)
day += yrdays;
if (day >= yrdays)
day -= yrdays;
/*
* When we know the day of the year, we can determine the day
* of the month and the month.
*/
month = 1;
while (month <= 12) {
if (day <= cumdays[month])
@ -236,10 +266,15 @@ event_print_all(FILE *fp, struct event *events)
day -= cumdays[month];
#ifdef DEBUG
fprintf(stderr,"event_print_allmonth: %d, day: %d\n",month,day);
fprintf(stderr, "event_print_allmonth: %d, day: %d\n",
month, day);
#endif
for (e = events; e != NULL; e = e_next ) {
/*
* Go through all events and print the text of the matching
* dates
*/
for (e = events; e != NULL; e = e_next) {
e_next = e->next;
if (month != e->month || day != e->day)
@ -258,10 +293,11 @@ getfield(char *p, char **endp, int *flags)
char *start, savech;
for (; !isdigit((unsigned char)*p) && !isalpha((unsigned char)*p)
&& *p != '*'; ++p);
&& *p != '*'; ++p)
;
if (*p == '*') { /* `*' is current month */
*flags |= F_ISMONTH;
*endp = p+1;
*endp = p + 1;
return (tp->tm_mon + 1);
}
if (isdigit((unsigned char)*p)) {
@ -275,7 +311,8 @@ getfield(char *p, char **endp, int *flags)
/* Sunday-1 */
if (*p == '+' || *p == '-')
for(; isdigit((unsigned char)*++p););
for(; isdigit((unsigned char)*++p);)
;
savech = *p;
*p = '\0';
@ -290,7 +327,7 @@ getfield(char *p, char **endp, int *flags)
/* variable weekday */
if ((var = getdayvar(start)) != 0) {
if (var <=5 && var >= -4)
if (var <= 5 && var >= -4)
val += var * 10;
#ifdef DEBUG
printf("var: %d\n", var);
@ -312,13 +349,12 @@ getfield(char *p, char **endp, int *flags)
return (0);
}
for (*p = savech; !isdigit((unsigned char)*p)
&& !isalpha((unsigned char)*p) && *p != '*'; ++p);
&& !isalpha((unsigned char)*p) && *p != '*'; ++p)
;
*endp = p;
return (val);
}
char path[MAXPATHLEN];
FILE *
opencal(void)
{
@ -349,7 +385,8 @@ opencal(void)
break;
}
if (!found)
errx(1, "can't open calendar file \"%s\": %s (%d)",
errx(1,
"can't open calendar file \"%s\": %s (%d)",
calendarFile, strerror(errno), errno);
}
}

View File

@ -55,9 +55,9 @@ easter(int year) /* 0 ... abcd, NOT since 1900 */
G = year % 19;
C = year / 100;
H = (C - C/4 - (8*C+13)/25 + 19*G + 15) % 30;
I = H - (H/28)*(1 - (H/28)*(29/(H + 1))*((21 - G)/11));
J = (year + year/4 + I + 2 - C + C/4) % 7;
H = (C - C / 4 - (8 * C + 13) / 25 + 19 * G + 15) % 30;
I = H - (H / 28) * (1 - (H / 28) * (29 / (H + 1)) * ((21 - G) / 11));
J = (year + year / 4 + I + 2 - C + C / 4) % 7;
L = I - J;
@ -82,12 +82,11 @@ geteaster(char *s, int year)
if (strncasecmp(s, EASTER, EASTERNAMELEN) == 0)
s += EASTERNAMELEN;
else if ( neaster.name != NULL
&& strncasecmp(s, neaster.name, neaster.len) == 0
)
else if (neaster.name != NULL
&& strncasecmp(s, neaster.name, neaster.len) == 0)
s += neaster.len;
else
return(0);
return (0);
#if DEBUG
printf("%s %d %d\n", s, year, EASTERNAMELEN);
@ -96,7 +95,7 @@ geteaster(char *s, int year)
/* Easter+1 or Easter-2
* ^ ^ */
switch(*s) {
switch (*s) {
case '-':
case '+':

View File

@ -37,7 +37,7 @@ __FBSDID("$FreeBSD$");
#define PASKHA "paskha"
#define PASKHALEN (sizeof(PASKHA) - 1)
static int paskha (int);
static int paskha(int);
/* return year day for Orthodox Easter using Gauss formula */
/* (old style result) */
@ -52,8 +52,8 @@ paskha(int R) /*year*/
a = R % 19;
b = R % 4;
c = R % 7;
d = (19*a + x) % 30;
e = (2*b + 4*c + 6*d + y) % 7;
d = (19 * a + x) % 30;
e = (2 * b + 4 * c + 6 * d + y) % 7;
return (((cumdays[3] + 1) + 22) + (d + e));
}
@ -66,18 +66,16 @@ getpaskha(char *s, int year)
if (strncasecmp(s, PASKHA, PASKHALEN) == 0)
s += PASKHALEN;
else if ( npaskha.name != NULL
&& strncasecmp(s, npaskha.name, npaskha.len) == 0
)
else if (npaskha.name != NULL
&& strncasecmp(s, npaskha.name, npaskha.len) == 0)
s += npaskha.len;
else
return 0;
/* Paskha+1 or Paskha-2
* ^ ^ */
switch(*s) {
switch (*s) {
case '-':
case '+':
@ -89,5 +87,5 @@ getpaskha(char *s, int year)
break;
}
return (paskha(year) + offset + 13/* new style */);
return (paskha(year) + offset + 13 /* new style */);
}