Research V7 development
[unix-history] / usr / src / cmd / standalone / maketape.c
CommitLineData
a570deab
KT
1#include <stdio.h>
2#define MAXB 30
3int mt;
4int fd;
5char buf[MAXB*512];
6char name[50];
7int blksz;
8
9main(argc, argv)
10int argc;
11char *argv[];
12{
13 int i, j, k;
14 FILE *mf;
15
16 if (argc != 3) {
17 fprintf(stderr, "Usage: maketape tapedrive makefile\n");
18 exit(0);
19 }
20 if ((mt = creat(argv[1], 0666)) < 0) {
21 perror(argv[1]);
22 exit(1);
23 }
24 if ((mf = fopen(argv[2], "r")) == NULL) {
25 perror(argv[2]);
26 exit(2);
27 }
28
29 j = 0;
30 k = 0;
31 for (;;) {
32 if ((i = fscanf(mf, "%s %d", name, &blksz))== EOF)
33 exit(0);
34 if (i != 2) {
35 fprintf(stderr, "Help! Scanf didn't read 2 things (%d)\n", i);
36 exit(1);
37 }
38 if (blksz <= 0 || blksz > MAXB) {
39 fprintf(stderr, "Block size %d is invalid\n", blksz);
40 continue;
41 }
42 if (strcmp(name, "*") == 0) {
43 close(mt);
44 mt = open(argv[1], 2);
45 j = 0;
46 k++;
47 continue;
48 }
49 fd = open(name, 0);
50 if (fd < 0) {
51 perror(name);
52 continue;
53 }
54 printf("%s: block %d, file %d\n", name, j, k);
55 while (read(fd, buf, 512*blksz) > 0) {
56 j++;
57 write(mt, buf, 512*blksz);
58 }
59 }
60}