|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T t
Length: 2365 (0x93d) Types: TextFile Names: »ttybiff.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z« └─⟦e5a54fb17⟧ └─⟦this⟧ »pp-5.0/Uip/rcvalert/ttybiff.c«
/* ttybiff.c: tty alert program using the UDP syntax stuff */ # ifndef lint static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Uip/rcvalert/RCS/ttybiff.c,v 5.0 90/09/20 16:33:53 pp Exp Locker: pp $"; # endif /* * $Header: /cs/research/pp/hubris/pp-beta/Uip/rcvalert/RCS/ttybiff.c,v 5.0 90/09/20 16:33:53 pp Exp Locker: pp $ * * $Log: ttybiff.c,v $ * Revision 5.0 90/09/20 16:33:53 pp * rcsforce : 5.0 public release * */ #include <stdio.h> #include <isode/manifest.h> #include <sys/types.h> #include <sys/file.h> #include <sys/stat.h> #include <utmp.h> #include <sys/time.h> #include <pwd.h> #include <ctype.h> #include "data.h" char username[40]; char hostname[128]; char homedir[512]; char *filename = ".alert"; short port = 0; char *extra = "NEW: "; char *format = "%extra(%size) %20from %subject << %50body"; int width = 80; int debug = 0; int stdoutonly = 0; char *myname; extern char *index (); main (argc, argv) int argc; char *argv[]; { extern char *optarg; extern int optind; int opt; int sd; myname = argv[0]; while((opt = getopt(argc, argv, "f:p:u:s")) != EOF) switch (opt) { case 's': stdoutonly = 1; break; case 'f': filename = optarg; break; case 'p': port = atoi(optarg); break; case 'u': (void) strcpy (username, optarg); break; default: fprintf (stderr, "Usage: %s [-f file] [-p port] [-u user]", myname); break; } argc -= optind; argv += optind; init_stuff (); sd = udp_start (port, filename, homedir); for (;;) { fd_set rfds; char buffer[BUFSIZ]; int n; FD_ZERO (&rfds); FD_SET (sd, &rfds); if(select (sd + 1, &rfds, NULLFD, NULLFD, (struct timeval *)0) <= 0) continue; n = sizeof (buffer) - 1; if (FD_ISSET (sd, &rfds) && getdata (sd, buffer, &n, username)) { buffer[n] = 0; if (stdoutonly || (notify_normal (buffer, username) == NOTOK && isatty (1))) printf ("\n\r%s%c\n\r", buffer, '\007'); } } } init_stuff () { struct passwd *pwd; char *cp, *getenv (); if ((pwd = getpwuid (getuid())) == NULL) { fprintf (stderr, "No user name\n"); exit(-1); } if (username[0] == NULL) (void) strcpy (username, pwd -> pw_name); if ((cp = getenv ("HOME")) != NULL && *cp) (void) strcpy (homedir, cp); else (void) strcpy (homedir, pwd -> pw_dir); }