AUSAM/source/S/taprd.c
#include <local-system>
#include <stat16.h>
/*
* this creation just reads raw tape file specified as
* 1st argument. it then reports on record size etc. on
* double tapemark it stops.
*/
#define NERR 10 /* NERR consecutive ==> giveup */
char buf[44*512];
int flag 0;
int err 0;
catch()
{
flag = 1;
}
main(argc, argv)
int argc;
char **argv;
{
char register *iold, *i, *nrec;
int infd;
struct statbuf sbuf;
signal(1, catch);
if((signal(2, 1)&01) == 0)
signal(2, catch);
if((signal(3, 1)&01) == 0)
signal(3, catch);
#ifdef BASSER
nice(10);
#endif BASSER
if(argc != 2)
{
printf("Usage: taprd file\n");
return 1;
}
if((infd = open(argv[1], 0)) < 0)
{
perror(argv[1]);
return 1;
}
fstat(infd, &sbuf);
if((sbuf.sb_flags&IFTYP) != IFCHR)
{
printf("%s not a raw device !!\n", argv[1]);
return 1;
}
nrec = 0;
iold = read(infd, buf, sizeof buf);
for(; ; )
{
nrec++;
i = read(infd, buf, sizeof buf);
if(i == iold && i == 0)
goto fini; /* considered end-of-tape */
if((i == iold) && (i==017777) && (nrec==NERR) )
{
printf("%d consecutive errors: EOT assumed\n",NERR);
return 1;
}
if((i == iold) && !flag)
continue;
if(iold)
{
if(iold != 0177777)
{
printf("%6.6l. * %6.6o(%6.6l.)\n",
nrec, iold, iold);
}
else
{
printf("%6.6l. * ERR \n", nrec);
err++;
if(nrec > 1)
return err;
}
}
else
{
printf("\tTM\n");
}
nrec = 0;
iold = i;
if(flag)
{
printf("Interrupted\n");
return 1;
}
}
fini:
printf("\tEOT\n");
return err;
}