static int
xbsd_create_disklabel(void)
{
    char c;

#if defined(__alpha__)
    printf("%s contains no disklabel\n", disk_device);
#else
    printf("%s contains no disklabel\n",
           partname(disk_device, xbsd_part_index + 1, 0));
#endif

    while (1) {
        c = read_nonempty("Do you want to create a disklabel? (y/n) ");
        if ((c|0x20) == 'y') {
            if (xbsd_initlabel(
#if defined(__alpha__) || defined(__powerpc__) || defined(__hppa__) || \
	defined(__s390__) || defined(__s390x__)
                        NULL
#else
                        xbsd_part
#endif
                    ) == 1) {
                xbsd_print_disklabel(1);
                return 1;
            }
            return 0;
        }
        if ((c|0x20) == 'n')
            return 0;
    }
}
static int
xbsd_create_disklabel (void) {
	char c;

#if defined (__alpha__)
	fprintf (stderr, _("%s contains no disklabel.\n"), disk_device);
#else
	fprintf (stderr, _("%s contains no disklabel.\n"),
		 partname(disk_device, xbsd_part_index+1, 0));
#endif

	while (1) {
		c = read_char (_("Do you want to create a disklabel? (y/n) "));
		if (tolower(c) == 'y') {
			if (xbsd_initlabel (
#if defined (__alpha__) || defined (__powerpc__)
				NULL, &xbsd_dlabel, 0
#else
				xbsd_part, &xbsd_dlabel, xbsd_part_index
#endif
				) == 1) {
				xbsd_print_disklabel (1);
				return 1;
			} else
				return 0;
		} else if (c == 'n')
			return 0;
	}
}
int
btrydev (char * dev) {
    if (xbsd_readlabel (NULL, &xbsd_dlabel) == 0)
	return -1;
    printf(_("\nBSD label for device: %s\n"), dev);
    xbsd_print_disklabel (0);
    return 0;
}
static int
bsd_trydev(const char * dev)
{
    if (xbsd_readlabel(NULL) == 0)
        return -1;
    printf("\nBSD label for device: %s\n", dev);
    xbsd_print_disklabel(0);
    return 0;
}
static void
bsd_select(void)
{
#if !defined(__alpha__)
    int t, ss;
    struct partition *p;

    for (t = 0; t < 4; t++) {
        p = get_part_table(t);
        if (p && is_bsd_partition_type(p->sys_ind)) {
            xbsd_part = p;
            xbsd_part_index = t;
            ss = get_start_sect(xbsd_part);
            if (ss == 0) {
                printf("Partition %s has invalid starting sector 0\n",
                       partname(disk_device, t+1, 0));
                return;
            }
            printf("Reading disklabel of %s at sector %u\n",
                   partname(disk_device, t+1, 0), ss + BSD_LABELSECTOR);
            if (xbsd_readlabel(xbsd_part) == 0) {
                if (xbsd_create_disklabel() == 0)
                    return;
                break;
            }
        }
    }

    if (t == 4) {
        printf("There is no *BSD partition on %s\n", disk_device);
        return;
    }

#elif defined(__alpha__)

    if (xbsd_readlabel(NULL) == 0)
        if (xbsd_create_disklabel() == 0)
            exit(EXIT_SUCCESS);

#endif

    while (1) {
        bb_putchar('\n');
        switch (tolower(read_nonempty("BSD disklabel command (m for help): "))) {
        case 'd':
            xbsd_delete_part();
            break;
        case 'e':
            xbsd_edit_disklabel();
            break;
        case 'i':
            xbsd_write_bootstrap();
            break;
        case 'l':
            xbsd_list_types();
            break;
        case 'n':
            xbsd_new_part();
            break;
        case 'p':
            xbsd_print_disklabel(0);
            break;
        case 'q':
            if (ENABLE_FEATURE_CLEAN_UP)
                close_dev_fd();
            exit(EXIT_SUCCESS);
        case 'r':
            return;
        case 's':
            xbsd_print_disklabel(1);
            break;
        case 't':
            xbsd_change_fstype();
            break;
        case 'u':
            change_units();
            break;
        case 'w':
            xbsd_write_disklabel();
            break;
#if !defined(__alpha__)
        case 'x':
            xbsd_link_part();
            break;
#endif
        default:
            bsd_menu();
            break;
        }
    }
}