Commit | Line | Data |
---|---|---|
aaa7ced1 BJ |
1 | #include "stdio.h" |
2 | #include "lrnref" | |
3 | ||
4 | selsub(argc,argv) | |
5 | char *argv[]; | |
6 | { | |
7 | char ans1[100], *cp; | |
8 | static char ans2[30]; | |
9 | static char dirname[20]; | |
10 | static char subname[20]; | |
11 | ||
12 | if (argc > 1 && argv[1][0] == '-') { | |
13 | direct = argv[1]+1; | |
14 | argc--; | |
15 | argv++; | |
16 | } | |
17 | chknam(direct); | |
18 | if (chdir(direct) != 0) { | |
19 | fprintf(stderr, "can't cd to %s\,", direct); | |
20 | exit(1); | |
21 | } | |
22 | sname = argc > 1 ? argv[1] : 0; | |
23 | if (argc > 2) | |
24 | strcpy (level=ans2, argv[2]); | |
25 | else | |
26 | level = 0; | |
27 | if (argc > 3 ) | |
28 | speed = atoi(argv[3]); | |
29 | if (!sname) { | |
30 | printf("These are the available courses -\n"); | |
31 | list("Linfo"); | |
32 | printf("If you want more information about the courses,\n"); | |
33 | printf("or if you have never used 'learn' before,\n"); | |
34 | printf("type 'return'; otherwise type the name of\n"); | |
35 | printf("the course you want, followed by 'return'.\n"); | |
36 | fflush(stdout); | |
37 | gets(sname=subname); | |
38 | if (sname[0] == '\0') { | |
39 | list("Xinfo"); | |
40 | do { | |
41 | printf("\nWhich subject? "); | |
42 | fflush(stdout); | |
43 | gets(sname=subname); | |
44 | } while (sname[0] == '\0'); | |
45 | } | |
46 | } | |
47 | chknam(sname); | |
48 | if (!level) { | |
49 | printf("If you were in the middle of this subject\n"); | |
50 | printf("and want to start where you left off, type\n"); | |
51 | printf("the last lesson number the computer printed.\n"); | |
52 | printf("To start at the beginning, just hit return.\n"); | |
53 | fflush(stdout); | |
54 | gets(ans2); | |
55 | if (ans2[0]==0) | |
56 | strcpy(ans2,"0"); | |
57 | for (cp=ans2; *cp; cp++) | |
58 | if (*cp == '(' || *cp == ' ') | |
59 | *cp= 0; | |
60 | level=ans2; | |
61 | } | |
62 | ||
63 | /* make new directory for user to play in */ | |
64 | if (chdir("play") != 0) { | |
65 | fprintf(stderr, "can't cd to playpen\n"); | |
66 | exit(1); | |
67 | } | |
68 | sprintf(dir=dirname, "pl%da", getpid()); | |
69 | sprintf(ans1, "mkdir %s", dir); | |
70 | system(ans1); | |
71 | if (chdir(dir) < 0) { | |
72 | fprintf(stderr, "Couldn't create working directory.\nBye.\n"); | |
73 | exit(1); | |
74 | } | |
75 | /* after this point, we have a working directory. */ | |
76 | /* have to call wrapup to clean up */ | |
77 | if (access(sprintf(ans1, "%s/%s/Init", direct, sname), 04)==0) | |
78 | if (system(sprintf(ans1, "%s/%s/Init %s", direct,sname, level)) != 0) { | |
79 | printf("Leaving learn.\n"); | |
80 | wrapup(1); | |
81 | } | |
82 | if (level[0] == '-') /* no lesson names start with - */ | |
83 | ask = 1; | |
84 | start(level); | |
85 | } | |
86 | ||
87 | chknam(name) | |
88 | char *name; | |
89 | { | |
90 | if (access(name, 05) < 0) { | |
91 | printf("Sorry, there is no subject or lesson named %s.\nBye.\n", name); | |
92 | exit(1); | |
93 | } | |
94 | } |