less -> more
[unix-history] / usr / src / usr.bin / mesg / mesg.c
CommitLineData
56b5a10f
KB
1/*
2 * Copyright (c) 1987 Regents of the University of California.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms are permitted
5e8b0e60
KB
6 * provided that the above copyright notice and this paragraph are
7 * duplicated in all such forms and that any documentation,
8 * advertising materials, and other materials related to such
9 * distribution and use acknowledge that the software was developed
10 * by the University of California, Berkeley. The name of the
11 * University may not be used to endorse or promote products derived
12 * from this software without specific prior written permission.
13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
56b5a10f
KB
16 */
17
18#ifndef lint
19char copyright[] =
20"@(#) Copyright (c) 1987 Regents of the University of California.\n\
21 All rights reserved.\n";
22#endif /* not lint */
23
24#ifndef lint
5e8b0e60 25static char sccsid[] = "@(#)mesg.c 4.5 (Berkeley) %G%";
56b5a10f
KB
26#endif /* not lint */
27
69d8f2f4
BJ
28/*
29 * mesg -- set current tty to accept or
30 * forbid write permission.
31 *
32 * mesg [y] [n]
33 * y allow messages
34 * n forbid messages
35 */
36
69d8f2f4
BJ
37#include <sys/types.h>
38#include <sys/stat.h>
56b5a10f 39#include <stdio.h>
69d8f2f4 40
56b5a10f 41static char *tty;
69d8f2f4
BJ
42
43main(argc, argv)
56b5a10f
KB
44 int argc;
45 char **argv;
69d8f2f4 46{
56b5a10f
KB
47 struct stat sbuf;
48 char *ttyname();
69d8f2f4 49
56b5a10f
KB
50 if (!(tty = ttyname(2))) {
51 fputs("mesg: not a device in /dev.\n", stderr);
52 exit(-1);
53 }
54 if (stat(tty, &sbuf) < 0) {
55 perror("mesg");
56 exit(-1);
57 }
58 if (argc < 2) {
59 if (sbuf.st_mode & 020) {
60 fputs("is y\n", stderr);
61 exit(0);
69d8f2f4 62 }
56b5a10f
KB
63 fputs("is n\n", stderr);
64 exit(1);
65 }
66#define OTHER_WRITE 020
67 switch(*argv[1]) {
68 case 'y':
69 newmode(sbuf.st_mode | OTHER_WRITE);
70 exit(0);
71 case 'n':
72 newmode(sbuf.st_mode &~ OTHER_WRITE);
73 exit(1);
74 default:
75 fputs("usage: mesg [y] [n]\n", stderr);
76 exit(-1);
77 }
78 /*NOTREACHED*/
69d8f2f4
BJ
79}
80
56b5a10f 81static
69d8f2f4 82newmode(m)
56b5a10f 83 u_short m;
69d8f2f4 84{
56b5a10f
KB
85 if (chmod(tty, m) < 0) {
86 perror("mesg");
87 exit(-1);
88 }
69d8f2f4 89}