xref: /original-bsd/usr.bin/learn/learn/learn.c (revision c3e32dec)
1 /*-
2  * Copyright (c) 1986, 1993
3  *	The Regents of the University of California.  All rights reserved.
4  *
5  * %sccs.include.proprietary.c%
6  */
7 
8 #ifndef lint
9 static char copyright[] =
10 "@(#) Copyright (c) 1986, 1993\n\
11 	The Regents of the University of California.  All rights reserved.\n";
12 #endif /* not lint */
13 
14 #ifndef lint
15 static char sccsid[] = "@(#)learn.c	8.1 (Berkeley) 06/06/93";
16 #endif /* not lint */
17 
18 #include <sys/signal.h>
19 #include <stdio.h>
20 #include "lrnref.h"
21 #include "pathnames.h"
22 
23 char	*direct	= _PATH_LEARN;
24 int	more;
25 char	*level;
26 int	speed;
27 char	*sname;
28 char	*todo;
29 FILE	*incopy	= NULL;
30 int	didok;
31 int	sequence	= 1;
32 int	comfile	= -1;
33 int	status;
34 int	wrong;
35 char	*pwline;
36 char	*dir;
37 FILE	*scrin;
38 int	logging	= 1;	/* set to 0 to turn off logging */
39 int	ask;
40 int	again;
41 int	skip;
42 int	teed;
43 int	total;
44 
45 extern void hangup(), intrpt();
46 
47 main(argc,argv)
48 int argc;
49 char *argv[];
50 {
51 	extern char * getlogin(), *malloc();
52 
53 	speed = 0;
54 	more = 1;
55 	pwline = getlogin();
56 #ifndef BSD4_2
57 	setbuf(stdout, malloc(BUFSIZ));
58 	setbuf(stderr, malloc(BUFSIZ));
59 #endif
60 	selsub(argc, argv);
61 	chgenv();
62 	signal(SIGHUP, hangup);
63 	signal(SIGINT, intrpt);
64 	while (more) {
65 		selunit();
66 		dounit();
67 		whatnow();
68 	}
69 	wrapup(0);
70 }
71 
72 void
73 hangup()
74 {
75 	wrapup(1);
76 }
77 
78 void
79 intrpt()
80 {
81 	char response[20], *p;
82 
83 	signal(SIGINT, hangup);
84 	write(2, "\nInterrupt.\nWant to go on?  ", 28);
85 	p = response;
86 	*p = 'n';
87 	while (read(0, p, 1) == 1 && *p != '\n')
88 		p++;
89 	if (response[0] != 'y')
90 		wrapup(0);
91 	ungetc('\n', stdin);
92 	signal(SIGINT, intrpt);
93 }
94