|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)util.c 1.3 (Berkeley/CCI) 5/31/88";
3: #endif
4:
5: #include "vdfmt.h"
6: #include "cmd.h"
7:
8: /*
9: */
10:
11: to_track(daddr)
12: dskadr daddr;
13: {
14: return ((daddr.cylinder * lab->d_ntracks) + daddr.track);
15: }
16:
17:
18: /*
19: */
20:
21: dskadr *from_track(trk)
22: int trk;
23: {
24: static dskadr temp;
25:
26: temp.cylinder = trk / lab->d_ntracks;
27: temp.track = trk % lab->d_ntracks;
28: temp.sector = 0;
29: return &temp;
30: }
31:
32:
33: /*
34: */
35:
36: to_sector(daddr)
37: dskadr daddr;
38: {
39: return ((to_track(daddr) * lab->d_nsectors) + daddr.sector);
40: }
41:
42:
43: /*
44: */
45:
46: dskadr *from_sector(sec)
47: unsigned int sec;
48: {
49: static dskadr temp;
50:
51: temp = *from_track((int)(sec / lab->d_nsectors));
52: temp.sector = sec % lab->d_nsectors;
53: return &temp;
54: }
55:
56:
57: /*
58: **
59: */
60:
61: print_unix_block(dskaddr)
62: dskadr dskaddr;
63: {
64: char fs;
65: int blk;
66: register struct partition *pp;
67:
68: indent();
69: blk = to_sector(dskaddr);
70: print("** Warning - Unable to relocate sector %d:\n",to_sector(dskaddr));
71: indent();
72: print("to map out using BADSECT use the following values:\n");
73: indent();
74: for(fs = 0; fs < lab->d_npartitions; fs++) {
75: int s, l;
76:
77: pp = &lab->d_partitions[fs];
78: s = pp->p_offset;
79: l = pp->p_size;
80: if (pp->p_fsize == 0)
81: pp->p_fsize = DEV_BSIZE;
82: if((blk < (s+l)) && (blk >= s)) {
83: print("On the `%c' Partition use filesystem block %d.\n",
84: fs+'a', (blk - s) * lab->d_secsize / pp->p_fsize);
85: }
86: }
87: exdent(3);
88: }
89:
90: dskadr *from_unix(par, block)
91: unsigned char par;
92: unsigned int block;
93: {
94: unsigned int sector;
95: register int fs;
96: register struct partition *pp;
97: static dskadr dskaddr;
98:
99: fs = tolower(par) - 'a';
100: if((fs < lab->d_npartitions) &&
101: (block <= (pp = &lab->d_partitions[fs])->p_size)) {
102: if (pp->p_fsize == 0)
103: pp->p_fsize = DEV_BSIZE;
104: dskaddr = *from_sector(pp->p_offset +
105: block * pp->p_fsize / lab->d_secsize);
106: } else {
107: dskaddr.cylinder = -1;
108: dskaddr.track = -1;
109: dskaddr.sector = -1;
110: }
111: return &dskaddr;
112: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.