=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/calendar/io.c,v retrieving revision 1.13 retrieving revision 1.19 diff -u -r1.13 -r1.19 --- src/usr.bin/calendar/io.c 2001/09/03 15:53:00 1.13 +++ src/usr.bin/calendar/io.c 2001/11/19 19:02:13 1.19 @@ -1,4 +1,4 @@ -/* $OpenBSD: io.c,v 1.13 2001/09/03 15:53:00 pjanzen Exp $ */ +/* $OpenBSD: io.c,v 1.19 2001/11/19 19:02:13 mpech Exp $ */ /* * Copyright (c) 1989, 1993, 1994 @@ -43,7 +43,7 @@ #if 0 static const char sccsid[] = "@(#)calendar.c 8.3 (Berkeley) 3/25/94"; #else -static char rcsid[] = "$OpenBSD: io.c,v 1.13 2001/09/03 15:53:00 pjanzen Exp $"; +static char rcsid[] = "$OpenBSD: io.c,v 1.19 2001/11/19 19:02:13 mpech Exp $"; #endif #endif /* not lint */ @@ -53,11 +53,11 @@ #include #include #include -#include #include #include #include +#include #include #include #include @@ -81,17 +81,15 @@ }; -int openf(char *path); - void cal() { - register int printing; - register char *p; + int printing; + char *p; FILE *fp; - int ch, l, i; + int ch, l, i, bodun = 0, bodun_maybe = 0; int var; - char buf[2048 + 1]; + char buf[2048 + 1], *prefix = NULL; struct event *events, *cur_evt, *ev1, *tmp; struct match *m; @@ -112,8 +110,25 @@ if (strncmp(buf, "LANG=", 5) == 0) { (void) setlocale(LC_ALL, buf + 5); 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; } + 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 */ if ((p = strchr(buf, '='))) { for (i = 0; i < NUMEV; i++) { @@ -132,7 +147,7 @@ continue; } if (buf[0] != '\t') { - printing = (m = isnow(buf)) ? 1 : 0; + printing = (m = isnow(buf, bodun)) ? 1 : 0; if ((p = strchr(buf, '\t')) == NULL) { printing = 0; continue; @@ -160,7 +175,16 @@ cur_evt->desc = ev1->desc; cur_evt->ldesc = NULL; } 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); cur_evt->desc = &(cur_evt->ldesc); ev1 = cur_evt; @@ -289,31 +313,7 @@ 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 * opencal() { @@ -321,15 +321,15 @@ int fdin; /* open up calendar file as stdin */ - if ((fdin = openf(calendarFile)) == -1) { + if ((fdin = open(calendarFile, O_RDONLY)) == -1) { if (!doall) { char *home = getenv("HOME"); if (home == NULL || *home == '\0') errx(1, "cannot get home directory"); if (!(chdir(home) == 0 && chdir(calendarHome) == 0 && - (fdin = openf(calendarFile)) != -1)) - errx(1, "no calendar file: ``%s'' or ``~/%s/%s", + (fdin = open(calendarFile, O_RDONLY)) != -1)) + errx(1, "no calendar file: ``%s'' or ``~/%s/%s''", calendarFile, calendarHome, calendarFile); } }