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