xref: /csrg-svn/sys/tahoe/stand/vdformat/util.c (revision 32662)
129538Ssam #ifndef lint
2*32662Skarels static char sccsid[] = "@(#)util.c	1.2 (Berkeley/CCI) 11/23/87";
329538Ssam #endif
429538Ssam 
529538Ssam #include	"vdfmt.h"
629538Ssam #include	"cmd.h"
729538Ssam 
829538Ssam /*
929538Ssam */
1029538Ssam 
1129538Ssam to_track(daddr)
1229538Ssam dskadr	daddr;
1329538Ssam {
14*32662Skarels 	return ((daddr.cylinder * lab->d_ntracks) + daddr.track);
1529538Ssam }
1629538Ssam 
1729538Ssam 
1829538Ssam /*
1929538Ssam */
2029538Ssam 
2129538Ssam dskadr *from_track(trk)
2229538Ssam int	trk;
2329538Ssam {
2429538Ssam 	static dskadr	temp;
2529538Ssam 
26*32662Skarels 	temp.cylinder = trk / lab->d_ntracks;
27*32662Skarels 	temp.track = trk % lab->d_ntracks;
2829538Ssam 	temp.sector = 0;
2929538Ssam 	return &temp;
3029538Ssam }
3129538Ssam 
3229538Ssam 
3329538Ssam /*
3429538Ssam */
3529538Ssam 
3629538Ssam to_sector(daddr)
3729538Ssam dskadr	daddr;
3829538Ssam {
39*32662Skarels 	return ((to_track(daddr) * lab->d_nsectors) + daddr.sector);
4029538Ssam }
4129538Ssam 
4229538Ssam 
4329538Ssam /*
4429538Ssam */
4529538Ssam 
4629538Ssam dskadr *from_sector(sec)
4729538Ssam unsigned int	sec;
4829538Ssam {
4929538Ssam 	static dskadr	temp;
5029538Ssam 
51*32662Skarels 	temp = *from_track((int)(sec / lab->d_nsectors));
52*32662Skarels 	temp.sector = sec % lab->d_nsectors;
5329538Ssam 	return &temp;
5429538Ssam }
5529538Ssam 
5629538Ssam 
5729538Ssam /*
5829538Ssam **
5929538Ssam */
6029538Ssam 
6129538Ssam print_unix_block(dskaddr)
6229538Ssam dskadr	dskaddr;
6329538Ssam {
6429538Ssam 	char	fs;
6529538Ssam 	int	blk;
66*32662Skarels 	register struct partition *pp;
6729538Ssam 
6829538Ssam 	indent();
69*32662Skarels 	blk = to_sector(dskaddr);
7029538Ssam 	print("** Warning - Unable to relocate sector %d:\n",to_sector(dskaddr));
7129538Ssam 	indent();
7229538Ssam 	print("to map out using BADSECT use the following values:\n");
7329538Ssam 	indent();
74*32662Skarels 	for(fs = 0; fs < lab->d_npartitions; fs++) {
7529538Ssam 		int	s, l;
7629538Ssam 
77*32662Skarels 		pp = &lab->d_partitions[fs];
78*32662Skarels 		s = pp->p_offset;
79*32662Skarels 		l = pp->p_size;
80*32662Skarels 		if (pp->p_fsize == 0)
81*32662Skarels 			pp->p_fsize = DEV_BSIZE;
8229538Ssam 		if((blk < (s+l)) && (blk >= s)) {
83*32662Skarels 			print("On the `%c' Partition use filesystem block %d.\n",
84*32662Skarels 			    fs+'a', (blk - s) * lab->d_secsize / pp->p_fsize);
8529538Ssam 		}
8629538Ssam 	}
8729538Ssam 	exdent(3);
8829538Ssam }
8929538Ssam 
9029538Ssam dskadr	*from_unix(par, block)
9129538Ssam unsigned char	par;
9229538Ssam unsigned int	block;
9329538Ssam {
9429538Ssam 	unsigned int	sector;
9529538Ssam 	register int	fs;
96*32662Skarels 	register struct partition *pp;
9729538Ssam 	static dskadr		dskaddr;
9829538Ssam 
9929538Ssam 	fs =  tolower(par) - 'a';
100*32662Skarels 	if((fs < lab->d_npartitions) &&
101*32662Skarels 	    (block <= (pp = &lab->d_partitions[fs])->p_size)) {
102*32662Skarels 		if (pp->p_fsize == 0)
103*32662Skarels 			pp->p_fsize = DEV_BSIZE;
104*32662Skarels 		dskaddr = *from_sector(pp->p_offset +
105*32662Skarels 		    block * pp->p_fsize / lab->d_secsize);
106*32662Skarels 	} else {
10729538Ssam 		dskaddr.cylinder = -1;
10829538Ssam 		dskaddr.track = -1;
10929538Ssam 		dskaddr.sector = -1;
11029538Ssam 	}
11129538Ssam 	return &dskaddr;
11229538Ssam }
11329538Ssam 
11429538Ssam 
11529538Ssam blkzero(addr, len)
11629538Ssam register char	*addr;
11729538Ssam register int	len;
11829538Ssam {
11929538Ssam 	while(len--)
12029538Ssam 		*(addr++) = (char)0;
12129538Ssam }
12229538Ssam 
12329538Ssam 
12429538Ssam blkcopy(from, to, len)
12529538Ssam register char	*from;
12629538Ssam register char	*to;
12729538Ssam register int	len;
12829538Ssam {
12929538Ssam 	while(len--)
13029538Ssam 		*(to++) = *(from++);
13129538Ssam }
13229538Ssam 
13329538Ssam 
13429538Ssam boolean blkcmp(a, b, len)
13529538Ssam register char	*a;
13629538Ssam register char	*b;
13729538Ssam register int	len;
13829538Ssam {
13929538Ssam 	while(len--) {
14029538Ssam 		if(*(a++) != *(b++))
14129538Ssam 			return false;
14229538Ssam 	}
14329538Ssam 	return true;
14429538Ssam }
145