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