From 0415965d8fd7420417895e189c9c79f67cfaf0a6 Mon Sep 17 00:00:00 2001 From: Greg Hudson Date: Tue, 27 Aug 1996 12:28:13 +0000 Subject: This file was deleted in the 8.0 source tree --- clients/zmailnotify/zmailwatch.c | 876 --------------------------------------- clients/zmailnotify/zmwnotify.c | 301 -------------- clients/zwrite/zwrite.c.orig | 514 ----------------------- 3 files changed, 1691 deletions(-) delete mode 100644 clients/zmailnotify/zmailwatch.c delete mode 100644 clients/zmailnotify/zmwnotify.c delete mode 100644 clients/zwrite/zwrite.c.orig (limited to 'clients') diff --git a/clients/zmailnotify/zmailwatch.c b/clients/zmailnotify/zmailwatch.c deleted file mode 100644 index dfe364b..0000000 --- a/clients/zmailnotify/zmailwatch.c +++ /dev/null @@ -1,876 +0,0 @@ -/* - * $Source$ - * $Header$ - */ - -#ifndef lint -static char *rcsid_mailwatch_c = "$Header$"; -#endif lint - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define NOTOK (-1) -#define OK 0 -#define DONE 1 - -#define DEF_INTERVAL 300 -#define DEF_DEBUG 0 - -int Pfd; -FILE *sfi; -FILE *sfo; -char Errmsg[128]; - -struct mailsav { - struct iovec m_iov[3]; - int m_iovcnt; - int m_seen; -} *Mailsav[64]; - -int MailIndex; -int MailSize; -int Debug = DEF_DEBUG; -int Interval = DEF_INTERVAL; -int List = 0; -int Shutdown = 0; - -int check_mail(), cleanup(); -uid_t getuid(); -char *strcpy(), *getenv(), index(); - -main(argc,argv) - int argc; - char *argv[]; -{ - char *str_index; - register int i; - int readfds = 0; - int maxfds = 0; - struct timeval timeout; - - for (i = 1; i < argc; i++) { - str_index = index(argv[i], '-'); - if (str_index == (char *)NULL) syntax(argv[0]); - if (strncmp(argv[i], "-d", 2) == 0) { - Debug = 1; - continue; - } - if (strncmp(argv[i], "-i", 2) == 0) { - if (++i >= argc) syntax(argv[0]); - Interval = atoi(argv[i]); - continue; - } - if (strncmp(argv[i], "-l", 2) == 0) { - List = 1; - continue; - } - if (strncmp(argv[i], "-help", 5) == 0) { - syntax(argv[0]); - } - syntax(argv[0]); - } - - if (!Debug && !List) background(); - - signal(SIGHUP, cleanup); - signal(SIGTERM, cleanup); - - check_mail(); - - if (List) { - exit(0); - } - - /* - * Initialize select's maximum file descriptor number to - * be one more than the file descriptor number of the - * Zephyr socket. - */ - maxfds = ZGetFD() + 1; - - /* - * Initialize the select timeout structure. - */ - timeout.tv_sec = Interval; - timeout.tv_usec = 0; - - while (1) { - /* - * Use select on the Zephyr port to determine if there - * is new mail. If not block untill timeout. Remember - * to reset the file descriptor before each select. - */ - readfds = 1 << ZGetFD(); - if (select(maxfds, &readfds, NULL, NULL, &timeout) == -1) - fatal("select failed on Zephyr socket"); - /* - * Check for mail. - */ - check_mail(host, user); - /* - * Shutdown if requested. - */ - if (Shutdown) { - exit(0); - } - } -} - -background() -{ - register int i; - - if (fork()) exit(0); - for (i = 0; i < 10; i++) close(i); - open("/", 0); - dup2(0, 1); - dup2(0, 2); - i = open("/dev/tty", 2); - if (i >= 0) { - ioctl(i, TIOCNOTTY, 0); - close(i); - } -} - -check_mail() -{ - static int LastNmsgs = -1; - static int LastNbytes = -1; - int nmsgs; - int nbytes; - static char tempname[40]; - static FILE *mbf = NULL; - register int mbfi; - register int i; - register int next_msg; - struct mailsav *ms; - struct mailsav *build_mailsav(); - - if (pop_init(host) == NOTOK) { - if (Debug) printf("zmailwatch(pop_init): %s\n", Errmsg); - error(Errmsg); - return(1); - } - - if (pop_command("USER %s", user) == NOTOK || - pop_command("RPOP %s", user) == NOTOK) { - error(Errmsg); - if (Debug) printf("zmailwatch(USER|RPOP): %s\n", Errmsg); - pop_command("QUIT"); - pop_close(); - return(1); - } - - if (pop_stat(&nmsgs, &nbytes) == NOTOK) { - error(Errmsg); - if (Debug) printf("zmailwatch(pop_stat): %s\n", Errmsg); - pop_command("QUIT"); - pop_close(); - return(1); - } - - if (nmsgs == 0) { - pop_command("QUIT"); - pop_close(); - return(0); - } - - if (mbf == NULL) { - strcpy(tempname, "/tmp/pmXXXXXX"); - mbfi = mkstemp(tempname); - if (mbfi < 0) { - if (Debug) printf("zmailwatch: mkstemp\n"); - pop_command("QUIT"); - pop_close(); - return(1); - } - mbf = fdopen(mbfi, "w+"); - } - - next_msg = 1; - if (nmsgs == LastNmsgs && nbytes == LastNbytes) { - if (get_message(1, mbf) != 0) return(1); - ms = build_mailsav(mbf); - if (mail_compare(ms, Mailsav[0]) == 0) { - pop_command("QUIT"); - pop_close(); - return(0); - } - else { - display_mail_header(ms, 0); - rewind(mbf); - next_msg = 2; - } - } - - for (i = next_msg; i <= nmsgs; i++) { - if (get_message(i, mbf) != 0) return(1); - ms = build_mailsav(mbf); - display_mail_header(ms, i-1); - rewind(mbf); - } - - LastNmsgs = nmsgs; - LastNbytes = nbytes; - - pop_command("QUIT"); - pop_close(); - if (Shutdown) { - fclose(mbf); - unlink(tempname); - } - - return(0); -} - -cleanup() -{ - Shutdown = 1; -} - -get_message(i, mbf) - int i; - FILE *mbf; -{ - int mbx_write(); - - if (pop_retr(i, mbx_write, mbf) != OK) { - error(Errmsg); - if (Debug) printf("zmailwatch(pop_retr): %s\n", Errmsg); - pop_command("QUIT"); - pop_close(); - return(1); - } - ftruncate(fileno(mbf), ftell(mbf)); - return(0); -} - -free_all_mailsav() -{ - register struct mailsav **msp; - register struct mailsav *ms; - register struct iovec *iov; - register int iovcnt; - - for (msp = Mailsav; ms = *msp; msp++) { - iov = ms->m_iov; - iovcnt = ms->m_iovcnt; - while (--iovcnt >= 0) { - free(iov->iov_base); - iov++; - } - free(ms); - *msp = NULL; - } -} - -free_mailsav(ms) - register struct mailsav *ms; -{ - register struct iovec *iov; - register int iovcnt; - - iov = ms->m_iov; - iovcnt = ms->m_iovcnt; - while (--iovcnt >= 0) { - free(iov->iov_base); - iov++; - } - free(ms); -} - -/* Pop stuff */ - -pop_close() -{ - if (sfi != NULL) fclose(sfi); - if (sfi != NULL) fclose(sfo); - close(Pfd); -} - -struct mailsav * -build_mailsav(mbf) - register FILE *mbf; -{ - char line[128]; - char from[80]; - char to[80]; - char subj[80]; - register struct mailsav *ms; - register int i; - register char *c; - register struct iovec *iov; - - ms = (struct mailsav *)malloc(sizeof (struct mailsav)); - ms->m_seen = 0; - - from[0] = 0; - to[0] = 0; - subj[0] = 0; - - rewind(mbf); - while (fgets(line, 128, mbf) != NULL) { - if (*line == '\n') break; - if (!strncmp(line, "From:", 5)) - strcpy(from, line); - else if (!strncmp(line, "To:", 3)) - strcpy(to, line); - else if (!strncmp(line, "Subject:", 8)) - strcpy(subj, line); - } - - /* add elipsis at end of "To:" field if it continues onto */ - /* more than one line */ - i = strlen(to) - 2; - c = &to[i]; - if (*c++ == ',') { - *c++ = ' '; - *c++ = '.'; - *c++ = '.'; - *c++ = '.'; - *c++ = '\n'; - *c = 0; - } - - i = 0; - if (from[0] != 0) { - iov = &ms->m_iov[i]; - iov->iov_len = strlen(from); - iov->iov_base = (char *)malloc(iov->iov_len); - bcopy(from, iov->iov_base, iov->iov_len); - iov->iov_base[--iov->iov_len] = 0; /* remove LF */ - i++; - } - - if (to[0] != 0) { - iov = &ms->m_iov[i]; - iov->iov_len = strlen(to); - iov->iov_base = (char *)malloc(iov->iov_len); - bcopy(to, iov->iov_base, iov->iov_len); - iov->iov_base[--iov->iov_len] = 0; /* remove LF */ - i++; - } - - if (subj[0] != 0) { - iov = &ms->m_iov[i]; - iov->iov_len = strlen(subj); - iov->iov_base = (char *)malloc(iov->iov_len); - bcopy(subj, iov->iov_base, iov->iov_len); - iov->iov_base[--iov->iov_len] = 0; /* remove LF */ - i++; - } - - ms->m_iovcnt = i; - return(ms); -} - -display_mail_header(ms, mi) - register struct mailsav *ms; - register int mi; -{ - /* This is a little tricky. If the current mail number (mi) is greater */ - /* than the last saved mail index (MailIndex), then this is new mail and */ - /* mi = MailIndex + 1. (MailIndex is incremented each time new mail is */ - /* saved.) Similarly, if mi is less than or equal to MailIndex and the */ - /* mail is different, then it is new mail, and MailIndex is set back to */ - /* mi. */ - - if (mi > MailIndex || mail_compare(ms, Mailsav[mi])) { - if (Mailsav[mi] != NULL) free_mailsav(Mailsav[mi]); - MailIndex = mi; - Mailsav[mi] = ms; - if (Debug) printf("zmailwatch: new mail\n"); - } - else { - free_mailsav(ms); - ms = Mailsav[mi]; - } - if (!ms->m_seen) { - if (notify_user(ms->m_iov, ms->m_iovcnt) == 0) ms->m_seen = 1; - } -} - -display_unseen() -{ - register int i; - register struct mailsav *ms; - - for (i = 0; i <= MailIndex; i++) { - ms = Mailsav[i]; - if (ms->m_seen == 0) { - if (notify_user(ms->m_iov, ms->m_iovcnt) != 0) return; - ms->m_seen = 1; - } - } -} - -mail_compare(m1, m2) - register struct mailsav *m1, *m2; -{ - register struct iovec *iov1, *iov2; - register int iovcnt; - - if (m1->m_iovcnt != m2->m_iovcnt) return(1); - iov1 = m1->m_iov; - iov2 = m2->m_iov; - iovcnt = m1->m_iovcnt; - while (--iovcnt >= 0) { - if (strcmp(iov1->iov_base, iov2->iov_base)) return(1); - iov1++; - iov2++; - } - return(0); -} - -error(msg) -{ - fprintf(stderr, "mailwatch: %s\n"); -} - -fatal(msg) -{ - error(msg); - exit(1); -} - -char * - get_errmsg() -{ - extern int errno, sys_nerr; - extern char *sys_errlist[]; - char *s; - - if (errno < sys_nerr) - s = sys_errlist[errno]; - else - s = "unknown error"; - return(s); -} - -/* - * Report the syntax for calling zmailwatch. - */ -syntax(call) - char *call; -{ - printf ("Usage: %s [-dl] [-i ] [-help]\n", call); - exit(0); -} - -/* - * These are the necessary KPOP routines snarfed from - * the GNU movemail program. - */ - -/* Interface from movemail to Athena's post-office protocol. - Copyright (C) 1986 Free Software Foundation, Inc. - -This file is part of GNU Emacs. - -GNU Emacs is distributed in the hope that it will be useful, -but without any warranty. No author or distributor -accepts responsibility to anyone for the consequences of using it -or for whether it serves any particular purpose or works at all, -unless he says so in writing. - -Everyone is granted permission to copy, modify and redistribute -GNU Emacs, but only under the conditions described in the -document "GNU Emacs copying permission notice". An exact copy -of the document is supposed to have been given to you along with -GNU Emacs so that you can know how you may redistribute it all. -It should be in a file named COPYING. Among other things, the -copyright notice and this notice must be preserved on all copies. */ - -#include -#include -#include -#include -#include -#include -#include "../src/config.h" -#ifdef KPOP -#include -#endif KPOP - -#ifdef USG -#include -/* Cancel substitutions made by config.h for Emacs. */ -#undef open -#undef read -#undef write -#endif /* USG */ - -#define NOTOK (-1) -#define OK 0 -#define DONE 1 - -char *progname; -FILE *sfi; -FILE *sfo; -char Errmsg[80]; -#ifdef KPOP -char *PrincipalHostname(), *index(); -#endif KPOP - -static int debug = 0; - -popmail(user, outfile) -char *user; -char *outfile; -{ - char *host; - int nmsgs, nbytes; - char response[128]; - register int i; - int mbfi; - FILE *mbf; - char *getenv(); - int mbx_write(); - char *get_errmsg(); -#ifdef HESIOD - struct hes_postoffice *p; -#endif HESIOD - - host = getenv("MAILHOST"); -#ifdef HESIOD - if (host == NULL) { - p = hes_getmailhost(user); - if (p != NULL && strcmp(p->po_type, "POP") == 0) - host = p->po_host; - else - fatal("no POP server listed in Hesiod"); - } -#endif HESIOD - if (host == NULL) { - fatal("no MAILHOST defined"); - } - - if (pop_init(host) == NOTOK) { - error(Errmsg); - return(1); - } - - if ((getline(response, sizeof response, sfi) != OK) || (*response != '+')){ - error(response); - return(1); - } - -#ifdef KPOP - if (pop_command("USER %s", user) == NOTOK || - pop_command("PASS %s", user) == NOTOK) { -#else !KPOP - if (pop_command("USER %s", user) == NOTOK || - pop_command("RPOP %s", user) == NOTOK) { -#endif KPOP - error(Errmsg); - pop_command("QUIT"); - return(1); - } - - if (pop_stat(&nmsgs, &nbytes) == NOTOK) { - error(Errmsg); - pop_command("QUIT"); - return(1); - } - - if (!nmsgs) - { - pop_command("QUIT"); - return(0); - } - - setuid (getuid()); - - mbfi = open (outfile, O_WRONLY | O_CREAT | O_EXCL, 0666); - if (mbfi < 0) - { - pop_command("QUIT"); - error("Error in open: %s, %s", get_errmsg(), outfile); - return(1); - } - - if ((mbf = fdopen(mbfi, "w")) == NULL) - { - pop_command("QUIT"); - error("Error in fdopen: %s", get_errmsg()); - close(mbfi); - unlink(outfile); - return(1); - } - - for (i = 1; i <= nmsgs; i++) { - mbx_delimit_begin(mbf); - if (pop_retr(i, mbx_write, mbf) != OK) { - error(Errmsg); - pop_command("QUIT"); - close(mbfi); - return(1); - } - mbx_delimit_end(mbf); - fflush(mbf); - } - - for (i = 1; i <= nmsgs; i++) { - if (pop_command("DELE %d", i) == NOTOK) { - error(Errmsg); - pop_command("QUIT"); - close(mbfi); - return(1); - } - } - - pop_command("QUIT"); - close(mbfi); - return(0); -} - -pop_init(host) -char *host; -{ - register struct hostent *hp; - register struct servent *sp; - int lport = IPPORT_RESERVED - 1; - struct sockaddr_in sin; - register int s; -#ifdef KPOP - KTEXT ticket = (KTEXT)NULL; - int rem; -#endif KPOP - char *get_errmsg(); - - hp = gethostbyname(host); - if (hp == NULL) { - sprintf(Errmsg, "MAILHOST unknown: %s", host); - return(NOTOK); - } - -#ifdef KPOP - sp = getservbyname("knetd", "tcp"); - if (sp == 0) { - strcpy(Errmsg, "tcp/knetd: unknown service"); - return(NOTOK); - } -#else !KPOP - sp = getservbyname("pop", "tcp"); - if (sp == 0) { - strcpy(Errmsg, "tcp/pop: unknown service"); - return(NOTOK); - } -#endif KPOP - - sin.sin_family = hp->h_addrtype; - bcopy(hp->h_addr, (char *)&sin.sin_addr, hp->h_length); - sin.sin_port = sp->s_port; -#ifdef KPOP - s = socket(AF_INET, SOCK_STREAM, 0); -#else !KPOP - s = rresvport(&lport); -#endif KPOP - if (s < 0) { - sprintf(Errmsg, "error creating socket: %s", get_errmsg()); - return(NOTOK); - } - - if (connect(s, (char *)&sin, sizeof sin) < 0) { - sprintf(Errmsg, "error during connect: %s", get_errmsg()); - close(s); - return(NOTOK); - } -#ifdef KPOP - ticket = (KTEXT)malloc( sizeof(KTEXT_ST) ); - rem=KSUCCESS; - rem = SendKerberosData(s, ticket, "pop", hp->h_name); - if (rem != KSUCCESS) { - sprintf(Errmsg, "kerberos error: %s",krb_err_txt[rem]); - close(s); - return(NOTOK); - } -#endif KPOP - - sfi = fdopen(s, "r"); - sfo = fdopen(s, "w"); - if (sfi == NULL || sfo == NULL) { - sprintf(Errmsg, "error in fdopen: %s", get_errmsg()); - close(s); - return(NOTOK); - } - - return(OK); -} - -pop_command(fmt, a, b, c, d) -char *fmt; -{ - char buf[4096]; - char errmsg[64]; - - sprintf(buf, fmt, a, b, c, d); - - if (debug) fprintf(stderr, "---> %s\n", buf); - if (putline(buf, Errmsg, sfo) == NOTOK) return(NOTOK); - - if (getline(buf, sizeof buf, sfi) != OK) { - strcpy(Errmsg, buf); - return(NOTOK); - } - - if (debug) fprintf(stderr, "<--- %s\n", buf); - if (*buf != '+') { - strcpy(Errmsg, buf); - return(NOTOK); - } else { - return(OK); - } -} - - -pop_stat(nmsgs, nbytes) -int *nmsgs, *nbytes; -{ - char buf[4096]; - - if (debug) fprintf(stderr, "---> STAT\n"); - if (putline("STAT", Errmsg, sfo) == NOTOK) return(NOTOK); - - if (getline(buf, sizeof buf, sfi) != OK) { - strcpy(Errmsg, buf); - return(NOTOK); - } - - if (debug) fprintf(stderr, "<--- %s\n", buf); - if (*buf != '+') { - strcpy(Errmsg, buf); - return(NOTOK); - } else { - sscanf(buf, "+OK %d %d", nmsgs, nbytes); - return(OK); - } -} - -pop_retr(msgno, action, arg) -int (*action)(); -{ - char buf[4096]; - - sprintf(buf, "RETR %d", msgno); - if (debug) fprintf(stderr, "%s\n", buf); - if (putline(buf, Errmsg, sfo) == NOTOK) return(NOTOK); - - if (getline(buf, sizeof buf, sfi) != OK) { - strcpy(Errmsg, buf); - return(NOTOK); - } - - while (1) { - switch (multiline(buf, sizeof buf, sfi)) { - case OK: - (*action)(buf, arg); - break; - case DONE: - return (OK); - case NOTOK: - strcpy(Errmsg, buf); - return (NOTOK); - } - } -} - -getline(buf, n, f) -char *buf; -register int n; -FILE *f; -{ - register char *p; - int c; - - p = buf; - while (--n > 0 && (c = fgetc(f)) != EOF) - if ((*p++ = c) == '\n') break; - - if (ferror(f)) { - strcpy(buf, "error on connection"); - return (NOTOK); - } - - if (c == EOF && p == buf) { - strcpy(buf, "connection closed by foreign host"); - return (DONE); - } - - *p = NULL; - if (*--p == '\n') *p = NULL; - if (*--p == '\r') *p = NULL; - return(OK); -} - -multiline(buf, n, f) -char *buf; -register int n; -FILE *f; -{ - if (getline(buf, n, f) != OK) return (NOTOK); - if (*buf == '.') { - if (*(buf+1) == NULL) { - return (DONE); - } else { - strcpy(buf, buf+1); - } - } - return(OK); -} - -char * -get_errmsg() -{ - extern int errno, sys_nerr; - extern char *sys_errlist[]; - char *s; - - if (errno < sys_nerr) - s = sys_errlist[errno]; - else - s = "unknown error"; - return(s); -} - -putline(buf, err, f) -char *buf; -char *err; -FILE *f; -{ - fprintf(f, "%s\r\n", buf); - fflush(f); - if (ferror(f)) { - strcpy(err, "lost connection"); - return(NOTOK); - } - return(OK); -} - -mbx_write(line, mbf) -char *line; -FILE *mbf; -{ - fputs(line, mbf); - fputc(0x0a, mbf); -} - -mbx_delimit_begin(mbf) -FILE *mbf; -{ - fputs("\f\n0,unseen,,\n", mbf); -} - -mbx_delimit_end(mbf) -FILE *mbf; -{ - putc('\037', mbf); -} diff --git a/clients/zmailnotify/zmwnotify.c b/clients/zmailnotify/zmwnotify.c deleted file mode 100644 index 6395fd9..0000000 --- a/clients/zmailnotify/zmwnotify.c +++ /dev/null @@ -1,301 +0,0 @@ -/* - * $Source$ - * $Header$ - */ - -#ifndef lint -static char *rcsid_mwnotify_c = "$Header$"; -#endif lint - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -extern char **environ; - -short cursor[] = {0x0000, 0x7ffe, 0x4fc2, 0x4ffe, 0x7ffe, - 0x7ffe, 0x781e, 0x7ffe , 0x7ffe, 0x0000}; - -#define NW_TOP 5 -#define DEFAULT_WINDOWS 16 -#define MAX_WINDOWS 32 - -WindowInfo Winfo; -FontInfo Finfo; -Font NoteFont; -int Timeout = 0; -int Bwidth = 2; -int Inner = 2; -int Volume = 0; -int Forepix = BlackPixel; -int Backpix = WhitePixel; -int Brdrpix = BlackPixel; -int Mouspix = BlackPixel; -int Offset = NW_TOP; -int VPos = NW_TOP; -int WindowMask = 0; -int WindowCount; -int WindowMax = DEFAULT_WINDOWS; - -struct wsav { - Window w_window; - struct iovec *w_iov; - int w_iovcnt; - int w_flags; -} Wsav[MAX_WINDOWS]; - -#define W_MAPPED 1 - -extern int errno; - -notify_user(iov, iovcnt) -register struct iovec *iov; -register int iovcnt; -{ - register int i; - register struct wsav *w; - - if (WindowCount == WindowMax) - return(1); - - w = &Wsav[WindowCount]; - w->w_flags = 0; - w->w_iov = (struct iovec *)malloc(sizeof (struct iovec) * iovcnt); - w->w_iovcnt = iovcnt; - for (i = iovcnt; --i >= 0; ) { - w->w_iov[i].iov_base = (char *)malloc(iov[i].iov_len+1); - bcopy(iov[i].iov_base, w->w_iov[i].iov_base, iov[i].iov_len+1); - w->w_iov[i].iov_len = iov[i].iov_len; - } - w->w_window = XNotifySetup(iov, iovcnt, &VPos); - WindowMask |= (1 << WindowCount); - WindowCount++; - return(0); -} - -XProcessEvent() -{ - XEvent rep; - register struct wsav *w; - register int i; - - do { - XNextEvent(&rep); - - /* find the window */ - w = Wsav; - for (i = 0; i < WindowMax; w++, i++) - if (rep.window == w->w_window) break; - if (i == WindowMax) return; - - /* process the event */ - switch (rep.type) { - case ButtonPressed: - for (; i >= 0; w--, i--) { - if (w->w_window != NULL) { - XDestroyWindow(w->w_window); - w->w_window = NULL; - free_iov(w->w_iov, w->w_iovcnt); - WindowMask &= ~(1 << i); - } - } - if (WindowMask == 0) { - VPos = Offset; - WindowCount = 0; - } - break; - - case ExposeWindow: - case ExposeRegion: - XClear(w->w_window); - display_notice(w->w_window, w->w_iov, w->w_iovcnt); - XFlush(); - break; - - } - } while (XPending() > 0); -} - -free_iov(iov, iovcnt) -register struct iovec *iov; -register int iovcnt; -{ - register struct iovec *iovbase = iov; - - while (--iovcnt >= 0) { - free(iov->iov_base); - iov++; - } - free(iovbase); -} - - -XNotifyInit(dname) -char *dname; -{ - struct passwd *pwent; - char *envbuf[2]; - char homebuf[280]; - int reverse = 0; - char *option; - char *font_name = "6x13"; - char *fore_color = NULL; - char *back_color = NULL; - char *brdr_color = NULL; - char *mous_color = NULL; - Color cdef; - char *getlogin(); - - if (!XOpenDisplay(dname)) - exit(0); - if (pwent = getpwnam(getlogin())) { - strcpy(homebuf, "HOME="); - strcat(homebuf, pwent->pw_dir); - envbuf[0] = homebuf; - envbuf[1] = NULL; - environ = envbuf; - if (option = XGetDefault("mailwatch", "BodyFont")) - font_name = option; - fore_color = XGetDefault("mailwatch", "Foreground"); - back_color = XGetDefault("mailwatch", "Background"); - brdr_color = XGetDefault("mailwatch", "Border"); - mous_color = XGetDefault("mailwatch", "Mouse"); - if (option = XGetDefault("mailwatch", "BorderWidth")) - Bwidth = atoi(option); - if (option = XGetDefault("mailwatch", "InternalBorder")) - Inner = atoi(option); - if (option = XGetDefault("mailwatch", "Timeout")) - Timeout = atoi(option); - if (option = XGetDefault("mailwatch", "Volume")) - Volume = atoi(option); - if (option = XGetDefault("mailwatch", "Offset")) - Offset = atoi(option); - if ((option = XGetDefault("mailwatch", "ReverseVideo")) && - strcmp(option, "on") == 0) - reverse = 1; - if (option = XGetDefault("mailwatch", "MaxNotices")) - WindowMax = atoi(option); - } - if (reverse) { - Brdrpix = Backpix; - Backpix = Forepix; - Forepix = Brdrpix; - Mouspix = Forepix; - } - - if ((NoteFont = XGetFont(font_name)) == NULL) - exit(0); - if (DisplayCells() > 2) { - if (back_color && XParseColor(back_color, &cdef) && - XGetHardwareColor(&cdef)) - Backpix = cdef.pixel; - if (fore_color && XParseColor(fore_color, &cdef) && - XGetHardwareColor(&cdef)) - Forepix = cdef.pixel; - if (brdr_color && XParseColor(brdr_color, &cdef) && - XGetHardwareColor(&cdef)) - Brdrpix = cdef.pixel; - if (mous_color && XParseColor(mous_color, &cdef) && - XGetHardwareColor(&cdef)) - Mouspix = cdef.pixel; - } - XQueryFont(NoteFont, &Finfo); - XQueryWindow (RootWindow, &Winfo); - VPos = Offset; - return(dpyno()); -} - -XNotifyClose() -{ - register int i; - register struct wsav *w; - - for (i = WindowMax, w = Wsav; --i >= 0; w++) - if (w->w_window != NULL) XDestroyWindow(w->w_window); - -} - -XDisplayNewWindows() -{ - register int i; - register struct wsav *w; - register int feepcount = 0; - - for (i = 0, w = Wsav; i < WindowMax; w++, i++) - if (w->w_window != NULL && !(w->w_flags & W_MAPPED)) { - XMapWindow(w->w_window); - feepcount++; - w->w_flags |= W_MAPPED; - } - XFlush(); - /* Now feep for each window, s l o w l y */ - while (--feepcount >= 0) { - XFeep(Volume); - XFlush(); - } -} - -XNotifySetup (iov, iovcnt, vpos) -struct iovec *iov; -int iovcnt; -register int *vpos; -{ - register int i; - register int n; - register int width; - register int height; - int vertical; - register Window w; - - width = 0; - for (i = iovcnt; --i >= 0; ) { - n = XQueryWidth (iov[i].iov_base, NoteFont); - if (n > width) width = n; - } - - width += Inner * 2; - height = iovcnt * Finfo.height + (Inner * 2); - vertical = *vpos; - *vpos += height + (Finfo.height / 2); - - w = XCreateWindow(RootWindow, (Winfo.width - width - (Bwidth * 2)) / 2, - vertical, width, height, Bwidth, - XMakeTile(Brdrpix), XMakeTile(Backpix)); - XStoreName(w, "mail-notice"); - XSelectInput(w, ButtonPressed|ButtonReleased|ExposeWindow|ExposeRegion); - XDefineCursor(w, XCreateCursor(16, 10, cursor, NULL, 7, 5, - Mouspix, Backpix, GXcopy)); - return(w); -} - -display_notice(w, iov, iovcnt) -Window w; -register struct iovec *iov; -register int iovcnt; -{ - register int in; - register int y; - register int height; - - in = Inner - 1; - if (in <= 0) in = 1; - - height = Finfo.height; - y = in; - while (--iovcnt >= 0) { - XText(w, in, y, iov->iov_base, iov->iov_len, - NoteFont, Forepix, Backpix); - y += height; - iov++; - } -} diff --git a/clients/zwrite/zwrite.c.orig b/clients/zwrite/zwrite.c.orig deleted file mode 100644 index c8ca4ce..0000000 --- a/clients/zwrite/zwrite.c.orig +++ /dev/null @@ -1,514 +0,0 @@ -/* This file is part of the Project Athena Zephyr Notification System. - * It contains code for the "zwrite" command. - * - * Created by: Robert French - * - * $Source$ - * $Author$ - * - * Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. - * For copying and distribution information, see the file - * "mit-copyright.h". - */ - -#include - -#include -#include -#include -#include -#include - -#ifndef lint -static char rcsid_zwrite_c[] = "$Id$"; -#endif /* lint */ - -#define DEFAULT_CLASS "MESSAGE" -#define DEFAULT_INSTANCE "PERSONAL" -#define URGENT_INSTANCE "URGENT" -#define DEFAULT_OPCODE "" -#define FILSRV_CLASS "FILSRV" - -#define MAXRECIPS 100 - -int nrecips, msgarg, verbose, quiet, nodot; -char *whoami, *inst, *class, *opcode, *recips[MAXRECIPS]; -int (*auth)(); -void un_tabify(); - -char *fix_filsrv_inst(); - -main(argc, argv) - int argc; - char *argv[]; -{ - int retval, arg, nocheck, nchars, msgsize, filsys, tabexpand; - char *message, *signature = NULL; - static char bfr[BUFSIZ], classbfr[BUFSIZ], instbfr[BUFSIZ], sigbfr[BUFSIZ]; - static char opbfr[BUFSIZ]; - static ZNotice_t notice; - - whoami = argv[0]; - - if ((retval = ZInitialize()) != ZERR_NONE) { - com_err(whoami, retval, "while initializing"); - exit(1); - } - - if (argc < 2) - usage(whoami); - - auth = ZAUTH; - verbose = quiet = msgarg = nrecips = nocheck = filsys = nodot = 0; - tabexpand = 1; - - if (class = ZGetVariable("zwrite-class")) { - (void) strcpy(classbfr, class); - class = classbfr; - } - else - class = DEFAULT_CLASS; - if (inst = ZGetVariable("zwrite-inst")) { - (void) strcpy(instbfr, inst); - inst = instbfr; - } - else - inst = DEFAULT_INSTANCE; - - if (opcode = ZGetVariable("zwrite-opcode")) - opcode = strcpy(opbfr, opcode); - else - opcode = DEFAULT_OPCODE; - - signature = ZGetVariable("zwrite-signature"); - if (signature) { - (void) strcpy(sigbfr, signature); - signature = sigbfr; - } - - arg = 1; - - for (;arg 2) - usage(whoami); - switch (argv[arg][1]) { - case 'a': /* Backwards compatibility */ - auth = ZAUTH; - break; - case 'o': - class = DEFAULT_CLASS; - inst = DEFAULT_INSTANCE; - opcode = DEFAULT_OPCODE; - break; - case 'd': - auth = ZNOAUTH; - break; - case 'v': - verbose = 1; - break; - case 'q': - quiet = 1; - break; - case 'n': - nocheck = 1; - break; - case 't': - tabexpand = 0; - break; - case 'u': - inst = URGENT_INSTANCE; - break; - case 'O': - if (arg == argc-1) - usage(whoami); - arg++; - opcode = argv[arg]; - break; - case 'i': - if (arg == argc-1 || filsys == 1) - usage(whoami); - arg++; - inst = argv[arg]; - filsys = -1; - break; - case 'c': - if (arg == argc-1 || filsys == 1) - usage(whoami); - arg++; - class = argv[arg]; - filsys = -1; - break; - case 'f': - if (arg == argc-1 || filsys == -1) - usage(whoami); - arg++; - class = FILSRV_CLASS; - inst = fix_filsrv_inst(argv[arg]); - filsys = 1; - nocheck = 1; /* implied -n (no ping) */ - break; - case 's': - if (arg == argc-1) - usage(whoami); - arg++; - signature = argv[arg]; - break; - case 'm': - if (arg == argc-1) - usage(whoami); - nocheck = 1; /* implied -n (no ping) */ - msgarg = arg+1; - break; - case 'l': /* literal */ - nodot = 1; - break; - default: - usage(whoami); - } - } - - if (!nrecips && !(strcmp(class, DEFAULT_CLASS) || - (strcmp(inst, DEFAULT_INSTANCE) && - strcmp(inst, URGENT_INSTANCE)))) { - /* must specify recipient if using default class and - (default instance or urgent instance) */ - fprintf(stderr, "No recipients specified.\n"); - usage(whoami); - } - - if (!signature) { - /* try to find name in the password file */ - register struct passwd *pwd; - register char *cp = sigbfr; - register char *cp2, *pp; - - pwd = getpwuid(getuid()); - if (pwd) { - cp2 = pwd->pw_gecos; - for (; *cp2 && *cp2 != ',' ; cp2++) { - if (*cp2 == '&') { - pp = pwd->pw_name; - *cp++ = islower(*pp) ? toupper(*pp) : *pp; - pp++; - while (*pp) - *cp++ = *pp++; - } else - *cp++ = *cp2; - } - signature = sigbfr; - } - } - - notice.z_kind = ACKED; - notice.z_port = 0; - notice.z_class = class; - notice.z_class_inst = inst; - notice.z_opcode = "PING"; - notice.z_sender = 0; - notice.z_message_len = 0; - notice.z_recipient = ""; - if (filsys == 1) - notice.z_default_format = "@bold(Filesystem Operation Message for $instance:)\nFrom: @bold($sender) at $time $date\n$message"; - else if (auth == ZAUTH) { - if (signature) - notice.z_default_format = "Class $class, Instance $instance:\nTo: @bold($recipient) at $time $date\nFrom: @bold($1) <$sender>\n\n$2"; - else - notice.z_default_format = "Class $class, Instance $instance:\nTo: @bold($recipient) at $time $date\n$message"; - } else { - if (signature) - notice.z_default_format = "@bold(UNAUTHENTIC) Class $class, Instance $instance at $time $date:\nFrom: @bold($1) <$sender>\n\n$2"; - else - notice.z_default_format = "@bold(UNAUTHENTIC) Class $class, Instance $instance at $time $date:\n$message"; - } - if (!nocheck && nrecips) - send_off(¬ice, 0); - - if (quiet) - notice.z_kind = UNACKED; /* change for real sending */ - - if (!msgarg && isatty(0)) - if (nodot) - printf("Type your message now. End with the end-of-file character.\n"); - else - printf("Type your message now. End with control-D or a dot on a line by itself.\n"); - - message = NULL; - msgsize = 0; - if (signature) { - message = malloc((unsigned)(strlen(signature)+2)); - (void) strcpy(message, signature); - msgsize = strlen(message); - message[msgsize++] = '\0'; - } else { - message = malloc(1); - message[msgsize++] = '\0'; - } - - if (msgarg) { - int size = msgsize; - for (arg=msgarg;argz_recipient = nrecips?recips[i]:""; - if (verbose && real) - printf("Sending %smessage, class %s, instance %s, to %s\n", - auth?"authenticated ":"", - class, inst, - nrecips?notice->z_recipient:"everyone"); - if ((retval = ZSendNotice(notice, auth)) != ZERR_NONE) { - (void) sprintf(bfr, "while sending notice to %s", - nrecips?notice->z_recipient:inst); - com_err(whoami, retval, bfr); - break; - } - if (quiet && real) { - if (nrecips) - continue; /* next! */ - else - break; /* no more */ - } - if ((retval = ZIfNotice(&retnotice, (struct sockaddr_in *) 0, - ZCompareUIDPred, - (char *)¬ice->z_uid)) != - ZERR_NONE) { - ZFreeNotice(&retnotice); - (void) sprintf(bfr, "while waiting for acknowledgement for %s", - nrecips?notice->z_recipient:inst); - com_err(whoami, retval, bfr); - continue; - } - if (retnotice.z_kind == SERVNAK) { - printf("Received authorization failure while sending to %s\n", - nrecips?notice->z_recipient:inst); - ZFreeNotice(&retnotice); - break; /* if auth fails, punt */ - } - if (retnotice.z_kind != SERVACK || !retnotice.z_message_len) { - printf("Detected server failure while receiving acknowledgement for %s\n", - nrecips?notice->z_recipient:inst); - ZFreeNotice(&retnotice); - continue; - } - if (!real || (!quiet && real)) - if (!strcmp(retnotice.z_message, ZSRVACK_SENT)) { - if (real) { - if (verbose) - printf("Successful\n"); - else - printf("%s: Message sent\n", - nrecips?notice->z_recipient:inst); - } - else - success = 1; - } - else - if (!strcmp(retnotice.z_message, - ZSRVACK_NOTSENT)) { - if (verbose && real) { - if (strcmp(class, DEFAULT_CLASS)) - printf("Not logged in or not subscribing to class %s, instance %s\n", - class, inst); - else - printf("Not logged in or not subscribing to messages\n"); - } - else - if (!nrecips) - printf("No one subscribing to class %s, instance %s\n", - class, inst); - else { - if (strcmp(class, DEFAULT_CLASS)) - printf("%s: Not logged in or not subscribing to class %s, instance %s\n", - notice->z_recipient, class, inst); - else - printf("%s: Not logged in or not subscribing to messages\n", - notice->z_recipient); - } - } - else - printf("Internal failure - illegal message field in server response\n"); - ZFreeNotice(&retnotice); - if (!nrecips) - break; - } - if (!real && !success) - exit(1); -} - -usage(s) - char *s; -{ - fprintf(stderr, - "Usage: %s [-a] [-o] [-d] [-v] [-q] [-n] [-t] [-u] [-l]\n\ -\t[-c class] [-i inst] [-O opcode] [-f fsname] [-s signature]\n\ -\t[user ...] [-m message]\n", s); - fprintf(stderr,"\t-f and -c are mutually exclusive\n\ -\t-f and -i are mutually exclusive\n\ -\trecipients must be specified unless -c or -f specifies a class\n\ -\tother than the default class or -i or -f specifies an instance\n\ -\tother than the default or urgent instance\n"); - exit(1); -} - -/* - if the -f option is specified, this routine is called to canonicalize - an instance of the form hostname[:pack]. It turns the hostname into the - name returned by gethostbyname(hostname) - */ - -char *fix_filsrv_inst(str) -char *str; -{ - static char fsinst[BUFSIZ]; - char *ptr; - struct hostent *hp; - - ptr = strchr(str,':'); - if (ptr) - *ptr = '\0'; - - hp = gethostbyname(str); - if (!hp) { - if (ptr) - *ptr = ':'; - return(str); - } - (void) strcpy(fsinst, hp->h_name); - if (ptr) { - (void) strcat(fsinst, ":"); - ptr++; - (void) strcat(fsinst, ptr); - } - return(fsinst); -} - -/* convert tabs in the buffer into appropriate # of spaces. - slightly tricky since the buffer can have NUL's in it. */ - -#ifndef TABSTOP -#define TABSTOP 8 /* #chars between tabstops */ -#endif /* ! TABSTOP */ - -void -un_tabify(bufp, sizep) -char **bufp; -register int *sizep; -{ - register char *cp, *cp2; - char *cp3; - register int i; - register int column; /* column of next character */ - register int size = *sizep; - - for (cp = *bufp, i = 0; size; size--, cp++) - if (*cp == '\t') - i++; /* count tabs in buffer */ - - if (!i) - return; /* no tabs == no work */ - - /* To avoid allocation churning, allocate enough extra space to convert - every tab into TABSTOP spaces */ - /* only add (TABSTOP-1)x because we re-use the cell holding the - tab itself */ - cp = malloc((unsigned)(*sizep + (i * (TABSTOP-1)))); - if (!cp) /* XXX */ - return; /* punt expanding if memory fails */ - cp3 = cp; - /* Copy buffer, converting tabs to spaces as we go */ - for (cp2 = *bufp, column = 1, size = *sizep; size; cp2++, size--) { - switch (*cp2) { - case '\n': - case '\0': - /* newline or null: reset column */ - column = 1; - *cp++ = *cp2; /* copy the newline */ - break; - default: - /* copy the character */ - *cp = *cp2; - cp++; - column++; - break; - case '\t': - /* it's a tab, compute how many spaces to expand into. */ - i = TABSTOP - ((column - 1) % TABSTOP); - for (; i > 0; i--) { - *cp++ = ' '; /* fill in the spaces */ - column++; - (*sizep)++; /* increment the size */ - } - (*sizep)--; /* remove one (we replaced the tab) */ - break; - } - } - free(*bufp); /* free the old buf */ - *bufp = cp3; - return; -} -- cgit v1.2.3