2 * ----------------------------------------------------------------------------
3 * "THE BEER-WARE LICENSE" (Revision 42):
4 * <phk@FreeBSD.org> wrote this file. As long as you retain this notice you
5 * can do whatever you want with this stuff. If we meet some day, and you think
6 * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
7 * ----------------------------------------------------------------------------
10 #include <sys/cdefs.h>
11 __FBSDID("$FreeBSD$");
20 #include <readline/readline.h>
21 #include <readline/history.h>
23 #include <sys/types.h>
29 250,51,192,142,208,188,0,124,139,244,80,7,80,31,251,252,191,0,6,185,0,1,
30 242,165,234,29,6,0,0,190,190,7,179,4,128,60,128,116,14,128,60,0,117,28,
31 131,198,16,254,203,117,239,205,24,139,20,139,76,2,139,238,131,198,16,254,
32 203,116,26,128,60,0,116,244,190,139,6,172,60,0,116,11,86,187,7,0,180,14,
33 205,16,94,235,240,235,254,191,5,0,187,0,124,184,1,2,87,205,19,95,115,12,
34 51,192,205,19,79,117,237,190,163,6,235,211,190,194,6,191,254,125,129,61,
35 85,170,117,199,139,245,234,0,124,0,0,73,110,118,97,108,105,100,32,112,97,
36 114,116,105,116,105,111,110,32,116,97,98,108,101,0,69,114,114,111,114,32,
37 108,111,97,100,105,110,103,32,111,112,101,114,97,116,105,110,103,32,115,
38 121,115,116,101,109,0,77,105,115,115,105,110,103,32,111,112,101,114,97,
39 116,105,110,103,32,115,121,115,116,101,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
40 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
41 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
42 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
43 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
44 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
45 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,
46 1,1,0,4,15,63,60,63,0,0,0,241,239,0,0,0,0,1,61,5,15,63,243,48,240,0,0,144,
47 208,2,0,0,0,1,244,165,15,63,170,192,192,3,0,144,208,2,0,0,0,0,0,0,0,0,0,
48 0,0,0,0,0,0,0,0,85,170
52 51,192,142,192,142,216,142,208,188,0,124,252,139,244,191,0,6,185,0,1,242,
53 165,234,96,6,0,0,139,213,88,162,72,7,60,53,116,28,180,16,246,228,5,174,
54 4,150,246,68,4,255,116,62,198,4,128,232,218,0,138,116,1,139,76,2,235,8,
55 232,207,0,185,1,0,50,209,187,0,124,184,1,2,205,19,114,30,129,191,254,1,
56 85,170,117,22,234,0,124,0,0,128,250,129,116,2,178,128,139,234,66,128,242,
57 179,136,22,58,7,191,190,7,185,4,0,198,6,45,7,49,50,246,136,45,138,69,4,
58 60,0,116,35,60,5,116,31,254,198,190,42,7,232,113,0,190,72,7,70,70,139,28,
59 10,255,116,5,50,125,4,117,243,141,183,114,7,232,90,0,131,199,16,254,6,45,
60 7,226,203,128,62,117,4,2,116,11,190,59,7,10,246,117,10,205,24,235,172,190,
61 42,7,232,57,0,232,54,0,50,228,205,26,139,218,131,195,96,180,1,205,22,180,
62 0,117,11,205,26,59,211,114,242,160,72,7,235,10,205,22,138,196,60,28,116,
63 243,4,246,60,49,114,214,60,53,119,210,80,190,40,7,187,27,6,83,252,172,80,
64 36,127,180,14,205,16,88,168,128,116,242,195,86,184,1,3,187,0,6,185,1,0,
65 50,246,205,19,94,198,6,72,7,63,195,13,138,13,10,70,48,32,46,32,46,32,46,
66 160,100,105,115,107,32,49,13,10,10,68,101,102,97,117,108,116,58,32,70,63,
67 160,0,1,0,4,0,6,3,7,7,10,10,99,14,100,14,101,20,128,20,129,25,130,30,147,
68 36,165,39,159,43,117,47,82,47,219,50,64,55,242,61,0,100,111,243,72,80,70,
69 211,79,115,178,85,110,105,248,78,111,118,101,108,236,77,105,110,105,248,
70 76,105,110,117,248,65,109,111,101,98,225,66,83,196,66,83,68,233,80,67,73,
71 216,67,80,205,86,101,110,105,248,68,111,115,115,101,227,63,191,0,0,0,0,
72 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
73 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
79 scan_block(int fd
, daddr_t block
)
83 if (-1 == lseek(fd
, (off_t
)block
* 512, SEEK_SET
))
85 if (512 != read(fd
, foo
, 512))
91 Scan_Disk(struct disk
*d
)
97 strcpy(device
, _PATH_DEV
);
98 strcat(device
, d
->name
);
100 fd
= open(device
, O_RDWR
);
102 warn("open(%s) failed", device
);
105 for (i
= -1, l
= 0; ; l
++) {
106 j
= scan_block(fd
, l
);
109 printf("%c: %lu.",j
? 'B' : 'G', l
);
112 printf(".%lu\nB: %lu.", l
- 1, l
);
115 printf(".%lu\nG: %lu.", l
- 1, l
);
125 main(int argc
, char **argv
)
128 char myprompt
[BUFSIZ
];
133 char **cp
, *cmds
[200];
137 fprintf(stderr
, "Usage:\n\t%s diskname\n", argv
[0]);
140 d
= Open_Disk(argv
[1]);
142 err(1, "Couldn't open disk %s", argv
[1]);
144 sprintf(myprompt
, "%s %s> ", argv
[0], argv
[1]);
146 printf("--==##==--\n");
156 q
= p
= readline(myprompt
);
158 printf("%s", myprompt
);
160 q
= p
= fgets(input
, sizeof(input
), stdin
);
164 for (cp
= cmds
; (*cp
= strsep(&p
, " \t\n")) != NULL
;)
170 if (!strcasecmp(*cmds
, "quit"))
172 if (!strcasecmp(*cmds
, "exit"))
174 if (!strcasecmp(*cmds
, "q"))
176 if (!strcasecmp(*cmds
, "x"))
178 if (!strcasecmp(*cmds
, "dwim") && ncmd
== 6) {
179 printf("dwim = %p\n",
181 (struct chunk
*)strtol(cmds
[1], 0, 0),
182 strtol(cmds
[2], 0, 0),
183 strtol(cmds
[3], 0, 0),
184 strtol(cmds
[4], 0, 0),
185 strtol(cmds
[5], 0, 0)));
188 if (!strcasecmp(*cmds
, "delete") && ncmd
== 2) {
189 printf("delete = %d\n",
191 (struct chunk
*)strtol(cmds
[1], 0, 0)));
195 if (!strcasecmp(*cmds
, "allfreebsd")) {
199 if (!strcasecmp(*cmds
, "dedicate")) {
203 if (!strcasecmp(*cmds
, "sanitize")) {
204 Sanitize_Bios_Geom(d
);
207 if (!strcasecmp(*cmds
, "bios") && ncmd
== 4) {
208 Set_Bios_Geom(d
, strtol(cmds
[1], 0, 0),
209 strtol(cmds
[2], 0, 0),
210 strtol(cmds
[3], 0, 0));
214 if (!strcasecmp(*cmds
, "list")) {
217 for (i
= 0; cp
[i
]; i
++) {
218 printf(" %s", cp
[i
]);
225 if (!strcasecmp(*cmds
, "create") && ncmd
== 7) {
227 if (!strcasecmp(*cmds
,"create") && ncmd
== 6) {
230 printf("Create=%d\n",
232 strtol(cmds
[1], 0, 0),
233 strtol(cmds
[2], 0, 0),
234 strtol(cmds
[3], 0, 0),
235 strtol(cmds
[4], 0, 0),
237 strtol(cmds
[5], 0, 0), cmds
[6]));
239 strtol(cmds
[5], 0, 0), NULL
));
243 if (!strcasecmp(*cmds
,"read")) {
246 d
= Open_Disk(cmds
[1]);
248 d
= Open_Disk(argv
[1]);
255 if (!strcasecmp(*cmds
,"scan")) {
260 if (!strcasecmp(*cmds
,"bteasy")) {
261 Set_Boot_Mgr(d
, bteasy17
, sizeof (bteasy17
));
264 if (!strcasecmp(*cmds
, "mbr")) {
265 Set_Boot_Mgr(d
, mbrboot
, sizeof (mbrboot
));
269 #if 0 /* XXX boot1 undefined, fix me */
270 if (!strcasecmp(*cmds
, "boot")) {
271 Set_Boot_Blocks(d
, boot1
, boot2
);
275 if (!strcasecmp(*cmds
, "write")) {
279 d
= Open_Disk(argv
[1]);
282 if (strcasecmp(*cmds
, "help"))
283 printf("\007ERROR\n");
285 printf("\tallfreebsd\n");
286 printf("\tdedicate\n");
287 printf("\tbios cyl hd sect\n");
290 printf("\tbteasy17\n");
293 printf("\tcollapse [pointer]\n");
296 printf("\tcreate offset size enum subtype flags name\n");
298 printf("\tcreate offset size enum subtype flags\n");
300 printf("\t\tsubtype(part): swap=1, ffs=7\n");
301 printf("\tdelete pointer\n");
307 printf("\tphys cyl hd sect\n");
310 printf("\tread [disk]\n");
313 printf("\nENUM:\n\t");
315 for (i
= 0; chunk_n
[i
]; i
++)
316 printf("%d = %s%s", i
, chunk_n
[i
],
317 i
== 4 ? "\n\t" : " ");