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