Interdata_v6/usr/source/wgong/tm.c
/*
* tm: map of tape records and filemarks
*/
char *tape "/dev/rmt0";
#define tdrive tape[8]
int maxtm 2;
int maxrec 0x7fffffff;
int maxfil 0x7fffffff;
int errflag;
int done;
int prev -1;
int nrec;
int nfil;
char buf[16*1024];
main(argc, argv)
char **argv;
{
register fd, len, rec;
while (--argc) {
if (**++argv != '-')
usage();
switch (argv[0][1]) {
case 't':
maxtm = atoi(&argv[0][2]);
break;
case 'r':
maxrec = atoi(&argv[0][2]);
break;
case 'e':
errflag++;
break;
case '0': case '1': case '2': case '3':
tdrive = argv[0][1];
break;
default:
usage();
}
}
if ((fd = open(tape, 0)) < 0) {
printf("Can't open %s\n", tape);
exit(1);
}
for (rec = 0; ; rec++) {
len = done? -2 : read(fd, buf, sizeof buf);
if (len != prev) {
if (prev == 0)
printf("tm:%d\n", nrec);
else if (prev > 0)
printf("%d:%d\n", prev, nrec);
prev = len;
nrec = 0;
}
if (done)
break;
if (len == -1) {
printf("** Read Error b%d\n", rec);
if (!errflag)
done++;
}
nrec++;
if (len == 0) {
rec = 0;
if (nrec >= maxtm)
done++;
}
else if (rec >= maxrec)
done++;
}
}
usage()
{
printf("Usage: tm [-drive] [-t<n>] [-r<n>] [-e]\n");
exit(1);
}