version 1.13, 2001/09/03 15:53:00 |
version 1.19, 2001/11/19 19:02:13 |
|
|
#include <sys/types.h> |
#include <sys/types.h> |
#include <sys/uio.h> |
#include <sys/uio.h> |
#include <sys/wait.h> |
#include <sys/wait.h> |
#include <sys/file.h> |
|
|
|
#include <ctype.h> |
#include <ctype.h> |
#include <err.h> |
#include <err.h> |
#include <errno.h> |
#include <errno.h> |
|
#include <fcntl.h> |
#include <locale.h> |
#include <locale.h> |
#include <pwd.h> |
#include <pwd.h> |
#include <stdio.h> |
#include <stdio.h> |
|
|
}; |
}; |
|
|
|
|
int openf(char *path); |
|
|
|
void |
void |
cal() |
cal() |
{ |
{ |
register int printing; |
int printing; |
register char *p; |
char *p; |
FILE *fp; |
FILE *fp; |
int ch, l, i; |
int ch, l, i, bodun = 0, bodun_maybe = 0; |
int var; |
int var; |
char buf[2048 + 1]; |
char buf[2048 + 1], *prefix = NULL; |
struct event *events, *cur_evt, *ev1, *tmp; |
struct event *events, *cur_evt, *ev1, *tmp; |
struct match *m; |
struct match *m; |
|
|
|
|
if (strncmp(buf, "LANG=", 5) == 0) { |
if (strncmp(buf, "LANG=", 5) == 0) { |
(void) setlocale(LC_ALL, buf + 5); |
(void) setlocale(LC_ALL, buf + 5); |
setnnames(); |
setnnames(); |
|
if (!strcmp(buf + 5, "ru_RU.KOI8-R") || |
|
!strcmp(buf + 5, "uk_UA.KOI8-U") || |
|
!strcmp(buf + 5, "by_BY.KOI8-B")) { |
|
bodun_maybe++; |
|
bodun = 0; |
|
if (prefix) |
|
free(prefix); |
|
prefix = NULL; |
|
} else |
|
bodun_maybe = 0; |
continue; |
continue; |
} |
} |
|
if (bodun_maybe && strncmp(buf, "BODUN=", 6) == 0) { |
|
bodun++; |
|
if (prefix) |
|
free(prefix); |
|
if ((prefix = strdup(buf + 6)) == NULL) |
|
err(1, NULL); |
|
} |
/* User defined names for special events */ |
/* User defined names for special events */ |
if ((p = strchr(buf, '='))) { |
if ((p = strchr(buf, '='))) { |
for (i = 0; i < NUMEV; i++) { |
for (i = 0; i < NUMEV; i++) { |
|
|
continue; |
continue; |
} |
} |
if (buf[0] != '\t') { |
if (buf[0] != '\t') { |
printing = (m = isnow(buf)) ? 1 : 0; |
printing = (m = isnow(buf, bodun)) ? 1 : 0; |
if ((p = strchr(buf, '\t')) == NULL) { |
if ((p = strchr(buf, '\t')) == NULL) { |
printing = 0; |
printing = 0; |
continue; |
continue; |
|
|
cur_evt->desc = ev1->desc; |
cur_evt->desc = ev1->desc; |
cur_evt->ldesc = NULL; |
cur_evt->ldesc = NULL; |
} else { |
} else { |
if ((cur_evt->ldesc = strdup(p)) == NULL) |
if (m->bodun && prefix) { |
|
int l1 = strlen(prefix); |
|
int l2 = strlen(p); |
|
if ((cur_evt->ldesc = |
|
malloc(l1 + l2)) == NULL) |
|
err(1, "malloc"); |
|
sprintf(cur_evt->ldesc, |
|
"\t%s %s", prefix, p + 1); |
|
} else if ((cur_evt->ldesc = |
|
strdup(p)) == NULL) |
err(1, NULL); |
err(1, NULL); |
cur_evt->desc = &(cur_evt->ldesc); |
cur_evt->desc = &(cur_evt->ldesc); |
ev1 = cur_evt; |
ev1 = cur_evt; |
|
|
return (val); |
return (val); |
} |
} |
|
|
char path[MAXPATHLEN]; |
|
|
|
int |
|
openf(path) |
|
char *path; |
|
{ |
|
struct stat st; |
|
int fd; |
|
|
|
fd = open(path, O_RDONLY|O_NONBLOCK); |
|
if (fd == -1) |
|
return (-1); |
|
if (fstat(fd, &st) == -1) { |
|
close(fd); |
|
return (-1); |
|
} |
|
if ((st.st_mode & S_IFMT) != S_IFREG) { |
|
close (fd); |
|
return (-1); |
|
} |
|
|
|
fcntl(fd, F_SETFD, fcntl(fd, F_GETFD, 0) &~ O_NONBLOCK); |
|
return (fd); |
|
} |
|
|
|
FILE * |
FILE * |
opencal() |
opencal() |
{ |
{ |
|
|
int fdin; |
int fdin; |
|
|
/* open up calendar file as stdin */ |
/* open up calendar file as stdin */ |
if ((fdin = openf(calendarFile)) == -1) { |
if ((fdin = open(calendarFile, O_RDONLY)) == -1) { |
if (!doall) { |
if (!doall) { |
char *home = getenv("HOME"); |
char *home = getenv("HOME"); |
if (home == NULL || *home == '\0') |
if (home == NULL || *home == '\0') |
errx(1, "cannot get home directory"); |
errx(1, "cannot get home directory"); |
if (!(chdir(home) == 0 && |
if (!(chdir(home) == 0 && |
chdir(calendarHome) == 0 && |
chdir(calendarHome) == 0 && |
(fdin = openf(calendarFile)) != -1)) |
(fdin = open(calendarFile, O_RDONLY)) != -1)) |
errx(1, "no calendar file: ``%s'' or ``~/%s/%s", |
errx(1, "no calendar file: ``%s'' or ``~/%s/%s''", |
calendarFile, calendarHome, calendarFile); |
calendarFile, calendarHome, calendarFile); |
} |
} |
} |
} |