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