|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)start.c 4.5 (Berkeley) 5/15/86"; ! 3: #endif not lint ! 4: ! 5: #include "stdio.h" ! 6: #include "lrnref.h" ! 7: #include <sys/types.h> ! 8: #ifndef DIR ! 9: #include <sys/dir.h> ! 10: #endif ! 11: ! 12: start(lesson) ! 13: char *lesson; ! 14: { ! 15: struct direct dbuf; ! 16: register struct direct *ep = &dbuf; /* directory entry pointer */ ! 17: int c, n; ! 18: char where [100]; ! 19: ! 20: #ifdef BSD4_2 ! 21: DIR *dp; ! 22: #define OPENDIR(s) ((dp = opendir(s)) != NULL) ! 23: #define DIRLOOP(s) for (s = readdir(dp); s != NULL; s = readdir(dp)) ! 24: #define EPSTRLEN ep->d_namlen ! 25: #define CLOSEDIR closedir(dp) ! 26: #else ! 27: int f; ! 28: #define OPENDIR(s) ((f = open(s, 0)) >= 0) ! 29: #define DIRLOOP(s) while (read(f, s, sizeof *s) == sizeof *s) ! 30: #define EPSTRLEN strlen(ep->d_name) ! 31: #define CLOSEDIR close(f) ! 32: #endif ! 33: ! 34: if (!OPENDIR(".")) { /* clean up play directory */ ! 35: perror("Start: play directory"); ! 36: wrapup(1); ! 37: } ! 38: DIRLOOP(ep) { ! 39: if (ep->d_ino == 0) ! 40: continue; ! 41: n = EPSTRLEN; ! 42: if (ep->d_name[n-2] == '.' && ep->d_name[n-1] == 'c') ! 43: continue; ! 44: c = ep->d_name[0]; ! 45: if (c>='a' && c<= 'z') ! 46: unlink(ep->d_name); ! 47: } ! 48: CLOSEDIR; ! 49: if (ask) ! 50: return; ! 51: sprintf(where, "%s/%s/L%s", direct, sname, lesson); ! 52: if (access(where, 04)==0) /* there is a file */ ! 53: return; ! 54: perror(where); ! 55: fprintf(stderr, "Start: no lesson %s\n",lesson); ! 56: wrapup(1); ! 57: } ! 58: ! 59: fcopy(new,old) ! 60: char *new, *old; ! 61: { ! 62: char b[BUFSIZ]; ! 63: int n, fn, fo; ! 64: fn = creat(new, 0666); ! 65: fo = open(old,0); ! 66: if (fo<0) return; ! 67: if (fn<0) return; ! 68: while ( (n=read(fo, b, BUFSIZ)) > 0) ! 69: write(fn, b, n); ! 70: close(fn); ! 71: close(fo); ! 72: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.