bin/118644: [patch] style(9)ify src/usr.bin/calendar
Edwin Groothuis
edwin at mavetju.org
Thu Dec 13 02:00:06 PST 2007
>Number: 118644
>Category: bin
>Synopsis: [patch] style(9)ify src/usr.bin/calendar
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Thu Dec 13 10:00:06 UTC 2007
>Closed-Date:
>Last-Modified:
>Originator: Edwin Groothuis
>Release: FreeBSD 6.2-RELEASE-p4 i386
>Organization:
-
>Environment:
System: FreeBSD k7.mavetju 6.2-RELEASE-p4 FreeBSD 6.2-RELEASE-p4 #0: Thu Apr 26 17:55:55 UTC 2007 root at i386-builder.daemonology.net:/usr/obj/usr/src/sys/SMP i386
On request of grog@, cleanup and style(9)ify src/usr.bin/calendar
while we are at it.
>Description:
>How-To-Repeat:
>Fix:
Index: calendar.c
===================================================================
RCS file: /home/ncvs/src/usr.bin/calendar/calendar.c,v
retrieving revision 1.19
diff -u -r1.19 calendar.c
--- calendar.c 7 May 2007 11:18:30 -0000 1.19
+++ calendar.c 13 Dec 2007 09:57:41 -0000
@@ -113,6 +113,7 @@
default:
usage();
}
+
argc -= optind;
argv += optind;
@@ -121,7 +122,7 @@
/* use current time */
if (f_time <= 0)
- (void)time(&f_time);
+ (void)time(&f_time);
settime(f_time);
@@ -143,11 +144,10 @@
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);
}
-
-
Index: calendar.h
===================================================================
RCS file: /home/ncvs/src/usr.bin/calendar/calendar.h,v
retrieving revision 1.12
diff -u -r1.12 calendar.h
--- calendar.h 9 Jun 2007 05:54:13 -0000 1.12
+++ calendar.h 13 Dec 2007 09:57:41 -0000
@@ -77,17 +77,3 @@
char *name;
int len;
};
-
-struct event *event_add(struct event *events, int month, int day, char *date,
- int var, char *txt);
-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;
- int var;
- char *date;
- char *text;
- struct event *next;
-};
Index: day.c
===================================================================
RCS file: /home/ncvs/src/usr.bin/calendar/day.c,v
retrieving revision 1.27
diff -u -r1.27 day.c
--- day.c 9 Jun 2007 05:54:13 -0000 1.27
+++ day.c 13 Dec 2007 09:57:41 -0000
@@ -174,36 +174,36 @@
time_t
Mktime (char *dp)
{
- time_t t;
- int d, m, y;
- struct tm tm;
-
- (void)time(&t);
- tp = localtime(&t);
-
- tm = tm0;
- tm.tm_mday = tp->tm_mday;
- tm.tm_mon = tp->tm_mon;
- tm.tm_year = tp->tm_year;
-
- switch (sscanf(dp, "%d.%d.%d", &d, &m, &y)) {
- case 3:
- if (y > 1900)
- y -= 1900;
- tm.tm_year = y;
- /* FALLTHROUGH */
- case 2:
- tm.tm_mon = m - 1;
- /* FALLTHROUGH */
- case 1:
- tm.tm_mday = d;
- }
+ time_t t;
+ int d, m, y;
+ struct tm tm;
+
+ (void)time(&t);
+ tp = localtime(&t);
+
+ tm = tm0;
+ tm.tm_mday = tp->tm_mday;
+ tm.tm_mon = tp->tm_mon;
+ tm.tm_year = tp->tm_year;
+
+ switch (sscanf(dp, "%d.%d.%d", &d, &m, &y)) {
+ case 3:
+ if (y > 1900)
+ y -= 1900;
+ tm.tm_year = y;
+ /* FALLTHROUGH */
+ case 2:
+ tm.tm_mon = m - 1;
+ /* FALLTHROUGH */
+ case 1:
+ tm.tm_mday = d;
+ }
#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));
}
/*
@@ -299,85 +299,87 @@
*/
if (flags & F_ISDAY) {
#ifdef DEBUG
- fprintf(stderr, "\nday: %d %s month %d\n", day, endp, month);
+ fprintf(stderr, "\nday: %d %s month %d\n", day, endp, month);
#endif
- *varp = 1;
- /* variable weekday, SundayLast, MondayFirst ... */
- if (day < 0 || day >= 10) {
-
- /* negative offset; last, -4 .. -1 */
- if (day < 0) {
- 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);
-
- /* (month length - day) / 7 + 1 */
- if (cumdays[month+1] - cumdays[month] >= v2
- && ((int)((cumdays[month+1] -
- cumdays[month] - v2) / 7) + 1) == -v1)
- /* bingo ! */
- day = v2;
-
- /* set to yesterday */
- else {
- day = tp->tm_mday - 1;
- if (day == 0)
- return (0);
- }
+ *varp = 1;
+ /* variable weekday, SundayLast, MondayFirst ... */
+ if (day < 0 || day >= 10) {
+
+ /* negative offset; last, -4 .. -1 */
+ if (day < 0) {
+ 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);
+
+ /* (month length - day) / 7 + 1 */
+ if (cumdays[month+1] - cumdays[month] >= v2
+ && ((int)((cumdays[month+1] -
+ cumdays[month] - v2) / 7) + 1) == -v1)
+ day = v2; /* bingo ! */
+
+ /* set to yesterday */
+ else {
+ day = tp->tm_mday - 1;
+ if (day == 0)
+ return (0);
+ }
+ }
+
+ /* first, second ... +1 ... +5 */
+ else {
+ /* offset: +1 (first Sunday) ... */
+ v1 = day/10;
+ day = day % 10;
+
+ /* day, eg '22th' */
+ v2 = tp->tm_mday + (((day - 1) - tp->tm_wday + 7) % 7);
+
+ /* Hurrah! matched */
+ if ( ((v2 - 1 + 7) / 7) == v1 )
+ day = v2;
+
+ else {
+ /* set to yesterday */
+ day = tp->tm_mday - 1;
+ if (day == 0)
+ return (0);
+ }
+ }
}
- /* first, second ... +1 ... +5 */
else {
- v1 = day/10; /* offset: +1 (first Sunday) ... */
- day = day % 10;
-
- /* day, eg '22th' */
- v2 = tp->tm_mday + (((day - 1) - tp->tm_wday + 7) % 7);
-
- /* Hurrah! matched */
- if ( ((v2 - 1 + 7) / 7) == v1 )
- day = v2;
-
- /* set to yesterday */
- else {
- day = tp->tm_mday - 1;
- if (day == 0)
- return (0);
- }
+ /* wired */
+ day = tp->tm_mday + (((day - 1) - tp->tm_wday + 7) % 7);
+ *varp = 1;
}
- }
-
- /* 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 */
- month = 1;
- }
- *monthp = month;
- *dayp = day;
- day = cumdays[month] + day;
- }
- else {
- for (v1 = 0; day > cumdays[v1]; v1++)
- ;
- *monthp = v1 - 1;
- *dayp = day - cumdays[v1 - 1];
- *varp = 1;
+ 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 {
+ for (v1 = 0; day > cumdays[v1]; v1++)
+ ;
+ *monthp = v1 - 1;
+ *dayp = day - cumdays[v1 - 1];
+ *varp = 1;
}
#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 */
@@ -451,38 +453,34 @@
{
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)) {
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);
Index: io.c
===================================================================
RCS file: /home/ncvs/src/usr.bin/calendar/io.c,v
retrieving revision 1.22
diff -u -r1.22 io.c
--- io.c 30 Oct 2007 03:44:09 -0000 1.22
+++ io.c 13 Dec 2007 09:57:42 -0000
@@ -67,9 +67,9 @@
#include "calendar.h"
-const char *calendarFile = "calendar"; /* default calendar file */
+const char *calendarFile = "calendar"; /* default calendar file */
const char *calendarHomes[] = { ".calendar", _PATH_INCLUDE }; /* HOME */
-const char *calendarNoMail = "nomail"; /* don't sent mail if this file exist */
+const char *calendarNoMail = "nomail"; /* don't sent mail if this file exist */
struct fixs neaster, npaskha;
@@ -83,6 +83,23 @@
{"'s Calendar\nPrecedence: bulk\n\n", 30},
};
+/*
+ * 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);
+struct event {
+ int month;
+ int day;
+ int var;
+ char *date;
+ char *text;
+ struct event *next;
+};
void
cal(void)
@@ -145,7 +162,8 @@
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 */
@@ -156,25 +174,32 @@
(void)strftime(dbuf, sizeof(dbuf),
d_first ? "%e %b" : "%b %e",
&tm);
- events = event_add(events, month, day, dbuf, var, p);
+ events = event_add(events, month, day, dbuf,
+ var, p);
}
+ } else {
+ if (printing)
+ event_continue(events, buf);
}
- 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 +222,13 @@
{
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 +249,28 @@
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;
+ /*
+ * 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])
@@ -239,10 +284,14 @@
fprintf(stderr,"event_print_allmonth: %d, day: %d\n",month,day);
#endif
+ /*
+ * 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)
+ if (month != e->month || day != e->day)
continue;
(void)fprintf(fp, "%s%c%s\n", e->date,
@@ -286,25 +335,25 @@
/* Day */
else if ((val = getday(start)) != 0) {
- *flags |= F_ISDAY;
+ *flags |= F_ISDAY;
- /* variable weekday */
- if ((var = getdayvar(start)) != 0) {
- if (var <=5 && var >= -4)
- val += var * 10;
+ /* variable weekday */
+ if ((var = getdayvar(start)) != 0) {
+ if (var <=5 && var >= -4)
+ val += var * 10;
#ifdef DEBUG
- printf("var: %d\n", var);
+ printf("var: %d\n", var);
#endif
- }
+ }
}
/* Easter */
else if ((val = geteaster(start, tp->tm_year + 1900)) != 0)
- *flags |= F_EASTER;
+ *flags |= F_EASTER;
/* Paskha */
else if ((val = getpaskha(start, tp->tm_year + 1900)) != 0)
- *flags |= F_EASTER;
+ *flags |= F_EASTER;
/* undefined rest */
else {
@@ -330,12 +379,12 @@
/* open up calendar file as stdin */
if (!freopen(calendarFile, "r", stdin)) {
if (doall) {
- if (chdir(calendarHomes[0]) != 0)
- return (NULL);
- if (stat(calendarNoMail, &sbuf) == 0)
- return (NULL);
- if (!freopen(calendarFile, "r", stdin))
- return (NULL);
+ if (chdir(calendarHomes[0]) != 0)
+ return (NULL);
+ if (stat(calendarNoMail, &sbuf) == 0)
+ return (NULL);
+ if (!freopen(calendarFile, "r", stdin))
+ return (NULL);
} else {
char *home = getenv("HOME");
if (home == NULL || *home == '\0')
@@ -343,13 +392,14 @@
chdir(home);
for (found = i = 0; i < sizeof(calendarHomes) /
sizeof(calendarHomes[0]); i++)
- if (chdir(calendarHomes[i]) == 0 &&
- freopen(calendarFile, "r", stdin)) {
- found = 1;
- break;
- }
+ if (chdir(calendarHomes[i]) == 0 &&
+ freopen(calendarFile, "r", stdin)) {
+ found = 1;
+ break;
+ }
if (!found)
- errx(1, "no calendar file: ``%s''", calendarFile);
+ errx(1,
+ "no calendar file: ``%s''", calendarFile);
}
}
if (pipe(pdes) < 0)
Index: ostern.c
===================================================================
RCS file: /home/ncvs/src/usr.bin/calendar/ostern.c,v
retrieving revision 1.12
diff -u -r1.12 ostern.c
--- ostern.c 7 May 2007 11:18:30 -0000 1.12
+++ ostern.c 13 Dec 2007 09:57:42 -0000
@@ -46,25 +46,25 @@
int
easter(int year) /* 0 ... abcd, NOT since 1900 */
{
- int G, /* Golden number - 1 */
- C, /* Century */
- H, /* 23 - epact % 30 */
- I, /* days from 21 March to Paschal full moon */
- J, /* weekday of full moon */
- L; /* days from 21 March to Sunday on of before full moon */
-
- 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;
-
- L = I - J;
-
- if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
- return 31 + 29 + 21 + L + 7;
- else
- return 31 + 28 + 21 + L + 7;
+ int G, /* Golden number - 1 */
+ C, /* Century */
+ H, /* 23 - epact % 30 */
+ I, /* days from 21 March to Paschal full moon */
+ J, /* weekday of full moon */
+ L; /* days from 21 March to Sunday on of before full moon */
+
+ 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;
+
+ L = I - J;
+
+ if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
+ return 31 + 29 + 21 + L + 7;
+ else
+ return 31 + 28 + 21 + L + 7;
}
/* return year day for Easter or easter depending days
@@ -81,13 +81,13 @@
#define EASTERNAMELEN (sizeof(EASTER) - 1)
if (strncasecmp(s, EASTER, EASTERNAMELEN) == 0)
- s += EASTERNAMELEN;
+ s += EASTERNAMELEN;
else if ( neaster.name != NULL
&& strncasecmp(s, neaster.name, neaster.len) == 0
)
- s += neaster.len;
+ s += neaster.len;
else
- return(0);
+ return(0);
#if DEBUG
printf("%s %d %d\n", s, year, EASTERNAMELEN);
@@ -100,11 +100,11 @@
case '-':
case '+':
- offset = atoi(s);
- break;
+ offset = atoi(s);
+ break;
default:
- offset = 0;
+ offset = 0;
}
return (easter(year) + offset);
Index: paskha.c
===================================================================
RCS file: /home/ncvs/src/usr.bin/calendar/paskha.c,v
retrieving revision 1.8
diff -u -r1.8 paskha.c
--- paskha.c 7 May 2007 11:18:30 -0000 1.8
+++ paskha.c 13 Dec 2007 09:57:42 -0000
@@ -65,14 +65,13 @@
int offset;
if (strncasecmp(s, PASKHA, PASKHALEN) == 0)
- s += PASKHALEN;
+ s += PASKHALEN;
else if ( npaskha.name != NULL
&& strncasecmp(s, npaskha.name, npaskha.len) == 0
)
- s += npaskha.len;
+ s += npaskha.len;
else
- return 0;
-
+ return 0;
/* Paskha+1 or Paskha-2
* ^ ^ */
@@ -81,12 +80,12 @@
case '-':
case '+':
- offset = atoi(s);
- break;
+ offset = atoi(s);
+ break;
default:
- offset = 0;
- break;
+ offset = 0;
+ break;
}
return (paskha(year) + offset + 13/* new style */);
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list