xref: /original-bsd/usr.bin/lock/lock.c (revision d25e1985)
1 static char *sccsid = "@(#)lock.c	4.1 (Berkeley) 10/01/80";
2 #include <stdio.h>
3 #include <sys/types.h>
4 #include <stat.h>
5 #include <signal.h>
6 #include <sgtty.h>
7 
8 /*
9  * Lock a terminal up until the knowledgeable Joe returns.
10  */
11 char	masterp[] =	"hasta la vista\n";
12 struct	sgttyb tty, ntty;
13 char	s[BUFSIZ], s1[BUFSIZ];
14 
15 main(argc, argv)
16 	char **argv;
17 {
18 	register int t;
19 	struct stat statb;
20 
21 	for (t = 1; t <= 16; t++)
22 		if (t != SIGHUP)
23 		signal(t, SIG_IGN);
24 	if (argc > 0)
25 		argv[0] = 0;
26 	if (gtty(0, &tty))
27 		exit(1);
28 	ntty = tty; ntty.sg_flags &= ~ECHO;
29 	stty(0, &ntty);
30 	printf("Key: ");
31 	fgets(s, sizeof s, stdin);
32 	printf("\nAgain: ");
33 	fgets(s1, sizeof s1, stdin);
34 	putchar('\n');
35 	if (strcmp(s1, s)) {
36 		putchar(07);
37 		stty(0, &tty);
38 		exit(1);
39 	}
40 	s[0] = 0;
41 	for (;;) {
42 		fgets(s, sizeof s, stdin);
43 		if (strcmp(s1, s) == 0)
44 			break;
45 		if (strcmp(s, masterp) == 0)
46 			break;
47 		putchar(07);
48 		if (gtty(0, &ntty))
49 			exit(1);
50 	}
51 	stty(0, &tty);
52 }
53