diff options
Diffstat (limited to 'release/sysinstall/devices.c')
| -rw-r--r-- | release/sysinstall/devices.c | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/release/sysinstall/devices.c b/release/sysinstall/devices.c new file mode 100644 index 000000000000..0f57283de80a --- /dev/null +++ b/release/sysinstall/devices.c @@ -0,0 +1,122 @@ +/* + * The new sysinstall program. + * + * This is probably the last program in the `sysinstall' line - the next + * generation being essentially a complete rewrite. + * + * $Id: install.c,v 1.2 1995/04/27 18:03:53 jkh Exp $ + * + * Copyright (c) 1995 + * Jordan Hubbard. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer, + * verbatim and that no modifications are made prior to this + * point in the file. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Jordan Hubbard + * for the FreeBSD Project. + * 4. The name of Jordan Hubbard or the FreeBSD project may not be used to + * endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +#include "sysinstall.h" +#include "libdisk.h" + +/* Get all device information for a given device class */ +Device * +device_get_all(DeviceType which, int *ndevs) +{ + char **names; + Device *devs = NULL; + + *ndevs = 0; + if (which == DEVICE_TYPE_DISK || which == DEVICE_TYPE_ANY) { + if ((names = Disk_Names()) != NULL) { + int i; + + for (i = 0; names[i]; i++) + ++*ndevs; + devs = safe_malloc(sizeof(Device) * (*ndevs + 1)); + for (i = 0; names[i]; i++) { + strcpy(devs[i].name, names[i]); + devs[i].type = DEVICE_TYPE_DISK; + } + devs[i].name[0] = '\0'; + free(names); + } + } + /* put detection for other classes here just as soon as I figure out how */ + return devs; +} + +void +device_print_chunk(struct chunk *c1, int offset, int *row) +{ + CHAR_N + + if (!c1) + return; + mvprintw(*row++, offset, "%10lu %10lu %10lu %-8s %d %-8s %4d %lx", + c1->offset, c1->size, c1->end, c1->name, c1->type, + chunk_n[c1->type], c1->subtype, c1->flags); + device_print_chunk(c1->part, offset + 2, row); + device_print_chunk(c1->next, offset, row); +} + +int +device_slice_disk(char *disk) +{ + struct disk *d; + char *p; + int row; + + d = Open_Disk(disk); + if (!d) + msgFatal("Couldn't open disk `%s'!", disk); + p = CheckRules(d); + if (p) { + msgConfirm(p); + free(p); + } + dialog_clear(); + while (1) { + clear(); + mvprintw(0, 0, "Disk name: %s, Flags: %lx", disk, d->flags); + mvprintw(1, 0, + "Real Geometry: %lu/%lu/%lu, BIOS Geometry: %lu/%lu/%lu [cyls/heads/sectors]", + d->real_cyl, d->real_hd, d->real_sect, + d->bios_cyl, d->bios_hd, d->bios_sect); + mvprintw(4, 0, "%10s %10s %10s %-8s %4s %-8s %4s %4s", + "Offset", "Size", "End", "Name", "PType", "Desc", + "Subtype", "Flags"); + row = 5; + device_print_chunk(d->chunks, 0, &row); + move(23, 0); + addstr("Done!"); + if (getch() == 'q') + return 0; + } + return 0; +} |
