1*29538Ssam #ifndef lint 2*29538Ssam static char sccsid[] = "@(#)util.c 1.1 (Berkeley/CCI) 07/05/86"; 3*29538Ssam #endif 4*29538Ssam 5*29538Ssam #include "vdfmt.h" 6*29538Ssam #include "cmd.h" 7*29538Ssam 8*29538Ssam /* 9*29538Ssam */ 10*29538Ssam 11*29538Ssam to_track(daddr) 12*29538Ssam dskadr daddr; 13*29538Ssam { 14*29538Ssam return ((daddr.cylinder * CURRENT->vc_ntrak) + daddr.track); 15*29538Ssam } 16*29538Ssam 17*29538Ssam 18*29538Ssam /* 19*29538Ssam */ 20*29538Ssam 21*29538Ssam dskadr *from_track(trk) 22*29538Ssam int trk; 23*29538Ssam { 24*29538Ssam static dskadr temp; 25*29538Ssam 26*29538Ssam temp.cylinder = trk / CURRENT->vc_ntrak; 27*29538Ssam temp.track = trk % CURRENT->vc_ntrak; 28*29538Ssam temp.sector = 0; 29*29538Ssam return &temp; 30*29538Ssam } 31*29538Ssam 32*29538Ssam 33*29538Ssam /* 34*29538Ssam */ 35*29538Ssam 36*29538Ssam to_sector(daddr) 37*29538Ssam dskadr daddr; 38*29538Ssam { 39*29538Ssam return ((to_track(daddr) * CURRENT->vc_nsec) + daddr.sector); 40*29538Ssam } 41*29538Ssam 42*29538Ssam 43*29538Ssam /* 44*29538Ssam */ 45*29538Ssam 46*29538Ssam dskadr *from_sector(sec) 47*29538Ssam unsigned int sec; 48*29538Ssam { 49*29538Ssam static dskadr temp; 50*29538Ssam 51*29538Ssam temp = *from_track((int)(sec / CURRENT->vc_nsec)); 52*29538Ssam temp.sector = sec % CURRENT->vc_nsec; 53*29538Ssam return &temp; 54*29538Ssam } 55*29538Ssam 56*29538Ssam 57*29538Ssam /* 58*29538Ssam ** 59*29538Ssam */ 60*29538Ssam 61*29538Ssam print_unix_block(dskaddr) 62*29538Ssam dskadr dskaddr; 63*29538Ssam { 64*29538Ssam char fs; 65*29538Ssam int blk; 66*29538Ssam int sec_per_blk=DEV_BSIZE / SECSIZ; 67*29538Ssam 68*29538Ssam indent(); 69*29538Ssam blk = to_sector(dskaddr) / sec_per_blk; 70*29538Ssam print("** Warning - Unable to relocate sector %d:\n",to_sector(dskaddr)); 71*29538Ssam #ifdef notdef 72*29538Ssam indent(); 73*29538Ssam print("to map out using BADSECT use the following values:\n"); 74*29538Ssam indent(); 75*29538Ssam for(fs = 0; fs < 8; fs++) { 76*29538Ssam int s, l; 77*29538Ssam 78*29538Ssam s = CURRENT->partition[fs].par_start; 79*29538Ssam l = CURRENT->partition[fs].par_len; 80*29538Ssam if((blk < (s+l)) && (blk >= s)) { 81*29538Ssam print("On the '%c' Partition use block %d.\n", 82*29538Ssam fs+'a', blk-s); 83*29538Ssam } 84*29538Ssam } 85*29538Ssam #endif 86*29538Ssam exdent(3); 87*29538Ssam } 88*29538Ssam 89*29538Ssam dskadr *from_unix(par, block) 90*29538Ssam unsigned char par; 91*29538Ssam unsigned int block; 92*29538Ssam { 93*29538Ssam unsigned int sector; 94*29538Ssam register int fs; 95*29538Ssam static dskadr dskaddr; 96*29538Ssam 97*29538Ssam #ifdef notdef 98*29538Ssam fs = tolower(par) - 'a'; 99*29538Ssam if((fs < 8) && (block <= CURRENT->partition[fs].par_len)) 100*29538Ssam dskaddr = *from_sector( 101*29538Ssam (CURRENT->partition[fs].par_start + block) * 102*29538Ssam DEV_BSIZE/SECSIZE); 103*29538Ssam else { 104*29538Ssam #endif 105*29538Ssam dskaddr.cylinder = -1; 106*29538Ssam dskaddr.track = -1; 107*29538Ssam dskaddr.sector = -1; 108*29538Ssam #ifdef notdef 109*29538Ssam } 110*29538Ssam #endif 111*29538Ssam return &dskaddr; 112*29538Ssam } 113*29538Ssam 114*29538Ssam 115*29538Ssam blkzero(addr, len) 116*29538Ssam register char *addr; 117*29538Ssam register int len; 118*29538Ssam { 119*29538Ssam while(len--) 120*29538Ssam *(addr++) = (char)0; 121*29538Ssam } 122*29538Ssam 123*29538Ssam 124*29538Ssam blkcopy(from, to, len) 125*29538Ssam register char *from; 126*29538Ssam register char *to; 127*29538Ssam register int len; 128*29538Ssam { 129*29538Ssam while(len--) 130*29538Ssam *(to++) = *(from++); 131*29538Ssam } 132*29538Ssam 133*29538Ssam 134*29538Ssam boolean blkcmp(a, b, len) 135*29538Ssam register char *a; 136*29538Ssam register char *b; 137*29538Ssam register int len; 138*29538Ssam { 139*29538Ssam while(len--) { 140*29538Ssam if(*(a++) != *(b++)) 141*29538Ssam return false; 142*29538Ssam } 143*29538Ssam return true; 144*29538Ssam } 145*29538Ssam 146