|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)selsub.c 4.2 (Berkeley) 4/25/83"; ! 3: #endif not lint ! 4: ! 5: #include "stdio.h" ! 6: #include "sys/types.h" ! 7: #include "sys/stat.h" ! 8: #include "lrnref.h" ! 9: ! 10: selsub(argc,argv) ! 11: char *argv[]; ! 12: { ! 13: char ans1[100]; ! 14: static char ans2[30]; ! 15: static char dirname[20]; ! 16: static char subname[20]; ! 17: struct stat statbuf; ! 18: ! 19: if (argc > 1 && argv[1][0] == '-') { ! 20: direct = argv[1]+1; ! 21: argc--; ! 22: argv++; ! 23: } ! 24: if (chdir(direct) != 0) { ! 25: perror(direct); ! 26: fprintf(stderr, "Selsub: couldn't cd to non-standard directory\n"); ! 27: exit(1); ! 28: } ! 29: sname = argc > 1 ? argv[1] : 0; ! 30: if (argc > 2) { ! 31: strcpy (level=ans2, argv[2]); ! 32: if (strcmp(level, "-") == 0) /* no lesson name is - */ ! 33: ask = 1; ! 34: else ! 35: again = 1; /* treat as if "again lesson" */ ! 36: } ! 37: else ! 38: level = 0; ! 39: if (argc > 3 ) ! 40: speed = atoi(argv[3]); ! 41: if (!sname) { ! 42: printf("These are the available courses -\n"); ! 43: list("Linfo"); ! 44: printf("If you want more information about the courses,\n"); ! 45: printf("or if you have never used 'learn' before,\n"); ! 46: printf("press RETURN; otherwise type the name of\n"); ! 47: printf("the course you want, followed by RETURN.\n"); ! 48: fflush(stdout); ! 49: gets(sname=subname); ! 50: if (sname[0] == '\0') { ! 51: list("Xinfo"); ! 52: do { ! 53: printf("\nWhich subject? "); ! 54: fflush(stdout); ! 55: gets(sname=subname); ! 56: } while (sname[0] == '\0'); ! 57: } ! 58: } ! 59: chknam(sname); ! 60: stat(sname, &statbuf); ! 61: total = statbuf.st_size / 16 - 2; /* size/dirsize-(.+..) */ ! 62: if (!level) { ! 63: printf("If you were in the middle of this subject\n"); ! 64: printf("and want to start where you left off, type\n"); ! 65: printf("the last lesson number the computer printed.\n"); ! 66: printf("If you don't know the number, type in a word\n"); ! 67: printf("you think might appear in the lesson you want,\n"); ! 68: printf("and I will look for the first lesson containing it.\n"); ! 69: printf("To start at the beginning, just hit RETURN.\n"); ! 70: fflush(stdout); ! 71: gets(ans2); ! 72: if (ans2[0]==0) ! 73: strcpy(ans2,"0"); ! 74: level=ans2; ! 75: } ! 76: ! 77: /* make new directory for user to play in */ ! 78: if (chdir("/tmp") != 0) { ! 79: perror("/tmp"); ! 80: fprintf(stderr, "Selsub: couldn't cd to public directory\n"); ! 81: exit(1); ! 82: } ! 83: sprintf(dir=dirname, "pl%da", getpid()); ! 84: sprintf(ans1, "mkdir %s", dir); ! 85: system(ans1); ! 86: if (chdir(dir) < 0) { ! 87: perror(dir); ! 88: fprintf(stderr, "Selsub: couldn't make play directory with %s.\nBye.\n", ans1); ! 89: exit(1); ! 90: } ! 91: /* after this point, we have a working directory. */ ! 92: /* have to call wrapup to clean up */ ! 93: if (access(sprintf(ans1, "%s/%s/Init", direct, sname), 04)==0) ! 94: if (system(sprintf(ans1, "%s/%s/Init %s", direct, sname, level)) != 0) { ! 95: printf("Leaving learn.\n"); ! 96: wrapup(1); ! 97: } ! 98: } ! 99: ! 100: chknam(name) ! 101: char *name; ! 102: { ! 103: if (access(name, 05) < 0) { ! 104: printf("Sorry, there is no subject or lesson named %s.\nBye.\n", name); ! 105: exit(1); ! 106: } ! 107: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.