X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/c27fc7dd968447fc78f7274603ce60b4a5666575..31cef89cb428866f787983e68246030321893df4:/usr/src/cmd/wall.c?ds=inline diff --git a/usr/src/cmd/wall.c b/usr/src/cmd/wall.c index 003ff7c0c8..0642a3c87b 100644 --- a/usr/src/cmd/wall.c +++ b/usr/src/cmd/wall.c @@ -1,17 +1,31 @@ +static char *sccsid = "@(#)wall.c 4.1 (Berkeley) 10/1/80"; +/* + * wall.c - Broadcast a message to all users. + * + * This program is not related to David Wall, whose Stanford Ph.D. thesis + * is entitled "Mechanisms for Broadcast and Selective Broadcast". + */ + #include #include -#define USERS 50 +#include +#define USERS 128 char mesg[3000]; -int msize; +int msize,sline; struct utmp utmp[USERS]; char *strcpy(); char *strcat(); +char who[9] = "???"; +long clock; +struct tm *localtime(); +struct tm *localclock; main(argc, argv) char *argv[]; { register i; + register char c; register struct utmp *p; FILE *f; @@ -19,10 +33,13 @@ char *argv[]; fprintf(stderr, "Cannot open /etc/utmp\n"); exit(1); } + clock = time( 0 ); + localclock = localtime( &clock ); fread((char *)utmp, sizeof(struct utmp), USERS, f); fclose(f); f = stdin; if(argc >= 2) { + /* take message from unix file instead of standard input */ if((f = fopen(argv[1], "r")) == NULL) { fprintf(stderr,"Cannot open %s\n", argv[1]); exit(1); @@ -30,6 +47,12 @@ char *argv[]; } while((i = getc(f)) != EOF) mesg[msize++] = i; fclose(f); + sline = ttyslot(2); /* 'utmp' slot no. of sender */ + if (sline) { + for (i=0;(c=utmp[sline].ut_name[i]) && iut_name[0] == 0) @@ -45,6 +68,8 @@ char *tty; { register i; char t[50], buf[BUFSIZ]; + register char *cp; + register int c, ch; FILE *f; i = fork(); @@ -62,7 +87,20 @@ char *tty; exit(1); } setbuf(f, buf); - fprintf(f, "Broadcast Message ...\n\n"); - fwrite(mesg, msize, 1, f); + fprintf(f, "\nBroadcast Message from %s (%s) at %d:%02d ...\r\n\n" + ,who, utmp[sline].ut_line + , localclock -> tm_hour , localclock -> tm_min ); + /* fwrite(mesg, msize, 1, f); */ + for (cp = mesg, c = msize; c-- > 0; cp++) { + ch = *cp; + if (ch == '\n') + putc('\r', f); + putc(ch, f); + } + + /* + * Bitchin'. + */ + exit(0); }