|
|
1.1 ! root 1: #include "tp.h" ! 2: ! 3: main(argc,argv) ! 4: char **argv; ! 5: { ! 6: register char c,*ptr; ! 7: extern cmd(), cmr(),cmx(), cmt(); ! 8: ! 9: tname = tc; ! 10: command = cmr; ! 11: if ((narg = rnarg = argc) < 2) narg = 2; ! 12: else { ! 13: ptr = argv[1]; /* get first argument */ ! 14: parg = &argv[2]; /* pointer to second argument */ ! 15: while (c = *ptr++) switch(c) { ! 16: case '0': ! 17: case '1': ! 18: case '2': ! 19: case '3': ! 20: case '4': ! 21: case '5': ! 22: case '6': ! 23: case '7': ! 24: tc[8] = c; ! 25: mt[8] = c; ! 26: continue; ! 27: ! 28: case 'f': ! 29: tname = *parg++; ! 30: flags |= flm; ! 31: narg--; rnarg--; ! 32: continue; ! 33: case 'c': ! 34: flags |= flc; continue; ! 35: case 'd': ! 36: setcom(cmd); continue; ! 37: case 'i': ! 38: flags |= fli; continue; ! 39: case 'm': ! 40: tname = mt; ! 41: flags |= flm; ! 42: continue; ! 43: case 'r': ! 44: flags &= ~flu; setcom(cmr); continue; ! 45: case 's': ! 46: flags |= fls; continue; ! 47: case 't': ! 48: setcom(cmt); continue; ! 49: case 'u': ! 50: flags |= flu; setcom(cmr); continue; ! 51: case 'v': ! 52: flags |= flv; continue; ! 53: case 'w': ! 54: flags |= flw; continue; ! 55: case 'x': ! 56: setcom(cmx); continue; ! 57: default: ! 58: useerr(); ! 59: } ! 60: } ! 61: optap(); ! 62: top = nptr = nameblk = sbrk(0); ! 63: (*command)(); ! 64: } ! 65: ! 66: optap() ! 67: { ! 68: extern cmr(); ! 69: ! 70: if ((flags & flm) == 0) { /* DECTAPE */ ! 71: tapsiz = TCSIZ; ! 72: ndirent = TCDIRS; ! 73: fio =open(tc,2); ! 74: } else { /* MAGTAPE */ ! 75: tapsiz = MTSIZ; ! 76: ndirent = MDIRENT; ! 77: if(command == cmr) { ! 78: fio = open(tname,1); ! 79: if (fio < 0) fio = creat(tname,0666); ! 80: } else ! 81: fio = open(tname,0); ! 82: } ! 83: if (fio < 0) { ! 84: printf("Tape open error\n"); ! 85: done(); ! 86: } ! 87: ndentb = ndirent/TPB; ! 88: edir = &dir[ndirent]; ! 89: } ! 90: ! 91: setcom(newcom) ! 92: int (*newcom)(); ! 93: { ! 94: extern cmr(); ! 95: ! 96: if (command != cmr) useerr(); ! 97: command = newcom; ! 98: } ! 99: ! 100: useerr() ! 101: { ! 102: printf("Bad usage\n"); ! 103: done(); ! 104: } ! 105: ! 106: /*/* COMMANDS */ ! 107: ! 108: cmd() ! 109: { ! 110: extern delete(); ! 111: ! 112: if (flags & (flm|flc)) useerr(); ! 113: if (narg <= 2) useerr(); ! 114: rddir(); ! 115: gettape(delete); ! 116: wrdir(); ! 117: check(); ! 118: } ! 119: ! 120: cmr() ! 121: { ! 122: if (flags & (flc|flm)) clrdir(); ! 123: else rddir(); ! 124: getfiles(); ! 125: update(); ! 126: check(); ! 127: } ! 128: ! 129: cmt() ! 130: { ! 131: extern taboc(); ! 132: ! 133: if (flags & (flc|flw)) useerr(); ! 134: rddir(); ! 135: if (flags & flv) ! 136: printf(" mode uid gid tapa size date time name\n"); ! 137: gettape(taboc); ! 138: check(); ! 139: } ! 140: ! 141: cmx() ! 142: { ! 143: extern extract(); ! 144: ! 145: if (flags & (flc)) useerr(); ! 146: rddir(); ! 147: gettape(extract); ! 148: done(); ! 149: } ! 150: ! 151: check() ! 152: { ! 153: usage(); ! 154: done(); ! 155: } ! 156: ! 157: done() ! 158: { ! 159: printf("End\n"); ! 160: exit(0); ! 161: } ! 162: ! 163: encode(pname,dptr) /* pname points to the pathname ! 164: * nptr points to next location in nameblk ! 165: * dptr points to the dir entry */ ! 166: char *pname; ! 167: struct dent *dptr; ! 168: { ! 169: register char *np; ! 170: register n; ! 171: ! 172: dptr->d_namep = np = nptr; ! 173: if (np > top - NAMELEN) { ! 174: if(sbrk(BRKINCR) == (char *)-1) { ! 175: printf("Out of core\n"); ! 176: done(); ! 177: } else ! 178: top += BRKINCR; ! 179: } ! 180: if((n=strlen(pname)) > NAMELEN) { ! 181: printf("Pathname too long - %s\nFile ignored\n",pname); ! 182: clrent(dptr); ! 183: } ! 184: else { ! 185: nptr += n+1; ! 186: strcpy(np, pname); ! 187: } ! 188: } ! 189: ! 190: decode(pname,dptr) /* dptr points to the dir entry ! 191: * name is placed in pname[] */ ! 192: char *pname; ! 193: struct dent *dptr; ! 194: { ! 195: ! 196: strcpy(pname, dptr->d_namep); ! 197: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.