AUSAM/source/mdec/mksatp.c
int buff[256+8] 0;
int k;
stop()
{
printf("%l blocks !!\n\n",k);
exit();
}
main(argc,argv)
int argc; char **argv;
{ int register i,j,l; char *cp; int tpofst,nrec;
if(argc!=3) err("arg count\n\n useage: mksatp bootprogram output-tape\n");
if((i=open(argv[1],0))<0) err("input??");
if((j=creat(argv[2],0666))<0) err("output??");
if(read(i,buff,sizeof buff)<0) err("read error");
if(buff[0]!=0407) err("not magic");
if((l=buff[1]+buff[2])>512) err("too big");
if(write(j,&buff[8],512)!=512) err("write error");
if(write(j,&buff[8],512)!=512) err("write error");
tpofst = 2;
for(;;) {
close(i);
printf(" next file system to be dumped ?? ");
if( (l=read(0,buff,sizeof buff))<=1 ) exit();;
cp = &buff; cp[l-1]=0;
if((i=open(buff,0))<0) continue;
printf(" how many blocks to be dumped ?? ");
if( (l=read(0,buff,sizeof buff))<=1 ) nrec = 0177777;
else {
nrec = l = 0;
while( (cp[l]<='9') && ( cp[l]>='0') ) nrec = nrec * 10 + cp[l++] - '0';
}
k = 0; printf("%5l blocks to be written at tape offset %5l -- ", nrec,tpofst);
signal(2,stop);
while( k != nrec ) { read(i,buff,512) ; write(j,buff,512); k++; }
signal(2,0);
printf("%5l blocks written\n",k);
tpofst =+ k;
}
}
err(s)
char *s;
{ printf("-- %s\n",s); exit(); }