xref: /original-bsd/usr.bin/learn/learn/learn.c (revision 92d3de31)
1 #ifndef lint
2 static char sccsid[] = "@(#)learn.c	4.2	(Berkeley)	04/27/83";
3 #endif not lint
4 
5 #include "stdio.h"
6 #include "lrnref.h"
7 #include "signal.h"
8 
9 char	*direct	= "/usr/lib/learn";	/* CHANGE THIS ON YOUR SYSTEM */
10 int	more;
11 char	*level;
12 int	speed;
13 char	*sname;
14 char	*todo;
15 FILE	*incopy	= NULL;
16 int	didok;
17 int	sequence	= 1;
18 int	comfile	= -1;
19 int	status;
20 int	wrong;
21 char	*pwline;
22 char	*dir;
23 FILE	*scrin;
24 int	logging	= 1;	/* set to 0 to turn off logging */
25 int	ask;
26 int	again;
27 int	skip;
28 int	teed;
29 int	total;
30 
31 main(argc,argv)
32 int argc;
33 char *argv[];
34 {
35 	extern hangup(), intrpt();
36 	extern char * getlogin();
37 	char *malloc();
38 
39 	speed = 0;
40 	more = 1;
41 	pwline = getlogin();
42 	setbuf(stdout, malloc(BUFSIZ));
43 	setbuf(stderr, malloc(BUFSIZ));
44 	selsub(argc, argv);
45 	chgenv();
46 	signal(SIGHUP, hangup);
47 	signal(SIGINT, intrpt);
48 	while (more) {
49 		selunit();
50 		dounit();
51 		whatnow();
52 	}
53 	wrapup(0);
54 }
55 
56 hangup()
57 {
58 	wrapup(1);
59 }
60 
61 intrpt()
62 {
63 	char response[20], *p;
64 
65 	signal(SIGINT, hangup);
66 	write(2, "\nInterrupt.\nWant to go on?  ", 28);
67 	p = response;
68 	*p = 'n';
69 	while (read(0, p, 1) == 1 && *p != '\n')
70 		p++;
71 	if (response[0] != 'y')
72 		wrapup(0);
73 	ungetc('\n', stdin);
74 	signal(SIGINT, intrpt);
75 }
76