Commit | Line | Data |
---|---|---|
1d80d110 BJ |
1 | #include <stdio.h> |
2 | #include <utmp.h> | |
3 | #include <time.h> | |
4 | #define USERS 50 | |
5 | ||
6 | char mesg[3000]; | |
7 | int msize,sline; | |
8 | struct utmp utmp[USERS]; | |
9 | char *strcpy(); | |
10 | char *strcat(); | |
11 | char who[9] = "???"; | |
12 | long clock; | |
13 | struct tm *localtime(); | |
14 | struct tm *localclock; | |
15 | ||
16 | main(argc, argv) | |
17 | char *argv[]; | |
18 | { | |
19 | register i; | |
20 | register char c; | |
21 | register struct utmp *p; | |
22 | FILE *f; | |
23 | ||
24 | if((f = fopen("/etc/utmp", "r")) == NULL) { | |
25 | fprintf(stderr, "Cannot open /etc/utmp\n"); | |
26 | exit(1); | |
27 | } | |
28 | clock = time( 0 ); | |
29 | localclock = localtime( &clock ); | |
30 | fread((char *)utmp, sizeof(struct utmp), USERS, f); | |
31 | fclose(f); | |
32 | f = stdin; | |
33 | if(argc >= 2) { | |
34 | /* take message from unix file instead of standard input */ | |
35 | if((f = fopen(argv[1], "r")) == NULL) { | |
36 | fprintf(stderr,"Cannot open %s\n", argv[1]); | |
37 | exit(1); | |
38 | } | |
39 | } | |
40 | while((i = getc(f)) != EOF) mesg[msize++] = i; | |
41 | fclose(f); | |
42 | sline = ttyslot(2); /* 'utmp' slot no. of sender */ | |
43 | if (sline) { | |
44 | for (i=0;c=utmp[sline].ut_name[i];i++) | |
45 | who[i]=c; | |
46 | who[i] = '\0'; /* sender initials */ | |
47 | } | |
48 | for(i=0; i<USERS; i++) { | |
49 | p = &utmp[i]; | |
50 | if(p->ut_name[0] == 0) | |
51 | continue; | |
52 | sleep(1); | |
53 | sendmes(p->ut_line); | |
54 | } | |
55 | exit(0); | |
56 | } | |
57 | ||
58 | sendmes(tty) | |
59 | char *tty; | |
60 | { | |
61 | register i; | |
62 | char t[50], buf[BUFSIZ]; | |
63 | register char *cp; | |
64 | register int c, ch; | |
65 | FILE *f; | |
66 | ||
67 | i = fork(); | |
68 | if(i == -1) { | |
69 | fprintf(stderr, "Try again\n"); | |
70 | return; | |
71 | } | |
72 | if(i) | |
73 | return; | |
74 | strcpy(t, "/dev/"); | |
75 | strcat(t, tty); | |
76 | ||
77 | if((f = fopen(t, "w")) == NULL) { | |
78 | fprintf(stderr,"cannot open %s\n", t); | |
79 | exit(1); | |
80 | } | |
81 | setbuf(f, buf); | |
82 | fprintf(f, "\n\a\a\aBroadcast Message from %s (%s) at %d:%02d ...\r\n\n" | |
83 | ,who, utmp[sline].ut_line | |
84 | , localclock -> tm_hour , localclock -> tm_min ); | |
85 | /* fwrite(mesg, msize, 1, f); */ | |
86 | for (cp = mesg, c = msize; c-- > 0; cp++) { | |
87 | ch = *cp; | |
88 | if (ch == '\n') | |
89 | putc('\r', f); | |
90 | putc(ch, f); | |
91 | } | |
92 | ||
93 | /* | |
94 | * Bitchin'. | |
95 | */ | |
96 | ||
97 | exit(0); | |
98 | } |