BSD 4 release
[unix-history] / usr / src / cmd / wall.c
index e174cc9..0642a3c 100644 (file)
@@ -1,6 +1,15 @@
+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 <stdio.h>
 #include <utmp.h>
 #include <stdio.h>
 #include <utmp.h>
-#define        USERS   50
+#include <time.h>
+#define        USERS   128
 
 char   mesg[3000];
 int    msize,sline;
 
 char   mesg[3000];
 int    msize,sline;
@@ -8,6 +17,9 @@ struct utmp utmp[USERS];
 char   *strcpy();
 char   *strcat();
 char who[9] = "???";
 char   *strcpy();
 char   *strcat();
 char who[9] = "???";
+long   clock;
+struct tm *localtime();
+struct tm *localclock;
 
 main(argc, argv)
 char *argv[];
 
 main(argc, argv)
 char *argv[];
@@ -21,6 +33,8 @@ char *argv[];
                fprintf(stderr, "Cannot open /etc/utmp\n");
                exit(1);
        }
                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;
        fread((char *)utmp, sizeof(struct utmp), USERS, f);
        fclose(f);
        f = stdin;
@@ -35,7 +49,7 @@ char *argv[];
        fclose(f);
        sline = ttyslot(2); /* 'utmp' slot no. of sender */
        if (sline) {
        fclose(f);
        sline = ttyslot(2); /* 'utmp' slot no. of sender */
        if (sline) {
-               for (i=0;c=utmp[sline].ut_name[i];i++)
+               for (i=0;(c=utmp[sline].ut_name[i]) && i<sizeof(utmp[0].ut_name);i++)
                        who[i]=c;
                who[i] = '\0'; /* sender initials */
                }
                        who[i]=c;
                who[i] = '\0'; /* sender initials */
                }
@@ -54,6 +68,8 @@ char *tty;
 {
        register i;
        char t[50], buf[BUFSIZ];
 {
        register i;
        char t[50], buf[BUFSIZ];
+       register char *cp;
+       register int c, ch;
        FILE *f;
 
        i = fork();
        FILE *f;
 
        i = fork();
@@ -71,8 +87,20 @@ char *tty;
                exit(1);
        }
        setbuf(f, buf);
                exit(1);
        }
        setbuf(f, buf);
-       fprintf(f, "\a\a\aBroadcast Message from %s (%s) ...\n\n",who,
-               utmp[sline].ut_line);
-       fwrite(mesg, msize, 1, f);
+       fprintf(f, "\n\a\a\aBroadcast 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);
 }
        exit(0);
 }