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