BSD 3 development
[unix-history] / usr / src / cmd / learn / selsub.c
CommitLineData
42d6e430
BJ
1#include "stdio.h"
2#include "lrnref"
3
4selsub(argc,argv)
5char *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
87chknam(name)
88char *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}