xref: /original-bsd/usr.bin/learn/learn/learn.c (revision a141c157)
1 #ifndef lint
2 static char sccsid[] = "@(#)learn.c	4.4	(Berkeley)	05/15/86";
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(), *malloc();
37 
38 	speed = 0;
39 	more = 1;
40 	pwline = getlogin();
41 #ifndef BSD4_2
42 	setbuf(stdout, malloc(BUFSIZ));
43 	setbuf(stderr, malloc(BUFSIZ));
44 #endif
45 	selsub(argc, argv);
46 	chgenv();
47 	signal(SIGHUP, hangup);
48 	signal(SIGINT, intrpt);
49 	while (more) {
50 		selunit();
51 		dounit();
52 		whatnow();
53 	}
54 	wrapup(0);
55 }
56 
57 hangup()
58 {
59 	wrapup(1);
60 }
61 
62 intrpt()
63 {
64 	char response[20], *p;
65 
66 	signal(SIGINT, hangup);
67 	write(2, "\nInterrupt.\nWant to go on?  ", 28);
68 	p = response;
69 	*p = 'n';
70 	while (read(0, p, 1) == 1 && *p != '\n')
71 		p++;
72 	if (response[0] != 'y')
73 		wrapup(0);
74 	ungetc('\n', stdin);
75 	signal(SIGINT, intrpt);
76 }
77