129538Ssam #ifndef lint 2*34558Skarels static char sccsid[] = "@(#)util.c 1.3 (Berkeley/CCI) 05/31/88"; 329538Ssam #endif 429538Ssam 529538Ssam #include "vdfmt.h" 629538Ssam #include "cmd.h" 729538Ssam 829538Ssam /* 929538Ssam */ 1029538Ssam to_track(daddr)1129538Ssamto_track(daddr) 1229538Ssam dskadr daddr; 1329538Ssam { 1432662Skarels return ((daddr.cylinder * lab->d_ntracks) + daddr.track); 1529538Ssam } 1629538Ssam 1729538Ssam 1829538Ssam /* 1929538Ssam */ 2029538Ssam from_track(trk)2129538Ssamdskadr *from_track(trk) 2229538Ssam int trk; 2329538Ssam { 2429538Ssam static dskadr temp; 2529538Ssam 2632662Skarels temp.cylinder = trk / lab->d_ntracks; 2732662Skarels temp.track = trk % lab->d_ntracks; 2829538Ssam temp.sector = 0; 2929538Ssam return &temp; 3029538Ssam } 3129538Ssam 3229538Ssam 3329538Ssam /* 3429538Ssam */ 3529538Ssam to_sector(daddr)3629538Ssamto_sector(daddr) 3729538Ssam dskadr daddr; 3829538Ssam { 3932662Skarels return ((to_track(daddr) * lab->d_nsectors) + daddr.sector); 4029538Ssam } 4129538Ssam 4229538Ssam 4329538Ssam /* 4429538Ssam */ 4529538Ssam from_sector(sec)4629538Ssamdskadr *from_sector(sec) 4729538Ssam unsigned int sec; 4829538Ssam { 4929538Ssam static dskadr temp; 5029538Ssam 5132662Skarels temp = *from_track((int)(sec / lab->d_nsectors)); 5232662Skarels temp.sector = sec % lab->d_nsectors; 5329538Ssam return &temp; 5429538Ssam } 5529538Ssam 5629538Ssam 5729538Ssam /* 5829538Ssam ** 5929538Ssam */ 6029538Ssam print_unix_block(dskaddr)6129538Ssamprint_unix_block(dskaddr) 6229538Ssam dskadr dskaddr; 6329538Ssam { 6429538Ssam char fs; 6529538Ssam int blk; 6632662Skarels register struct partition *pp; 6729538Ssam 6829538Ssam indent(); 6932662Skarels 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(); 7432662Skarels for(fs = 0; fs < lab->d_npartitions; fs++) { 7529538Ssam int s, l; 7629538Ssam 7732662Skarels pp = &lab->d_partitions[fs]; 7832662Skarels s = pp->p_offset; 7932662Skarels l = pp->p_size; 8032662Skarels if (pp->p_fsize == 0) 8132662Skarels pp->p_fsize = DEV_BSIZE; 8229538Ssam if((blk < (s+l)) && (blk >= s)) { 8332662Skarels print("On the `%c' Partition use filesystem block %d.\n", 8432662Skarels fs+'a', (blk - s) * lab->d_secsize / pp->p_fsize); 8529538Ssam } 8629538Ssam } 8729538Ssam exdent(3); 8829538Ssam } 8929538Ssam from_unix(par,block)9029538Ssamdskadr *from_unix(par, block) 9129538Ssam unsigned char par; 9229538Ssam unsigned int block; 9329538Ssam { 9429538Ssam unsigned int sector; 9529538Ssam register int fs; 9632662Skarels register struct partition *pp; 9729538Ssam static dskadr dskaddr; 9829538Ssam 9929538Ssam fs = tolower(par) - 'a'; 10032662Skarels if((fs < lab->d_npartitions) && 10132662Skarels (block <= (pp = &lab->d_partitions[fs])->p_size)) { 10232662Skarels if (pp->p_fsize == 0) 10332662Skarels pp->p_fsize = DEV_BSIZE; 10432662Skarels dskaddr = *from_sector(pp->p_offset + 10532662Skarels block * pp->p_fsize / lab->d_secsize); 10632662Skarels } else { 10729538Ssam dskaddr.cylinder = -1; 10829538Ssam dskaddr.track = -1; 10929538Ssam dskaddr.sector = -1; 11029538Ssam } 11129538Ssam return &dskaddr; 11229538Ssam } 113