1#!/usr/local/bin/perl
2# Show a form for creating a new slice
3
4use strict;
5use warnings;
6require './bsdfdisk-lib.pl';
7our (%in, %text, $module_name);
8&ReadParse();
9
10# Get the disk
11my @disks = &list_disks_partitions();
12my ($disk) = grep { $_->{'device'} eq $in{'device'} } @disks;
13$disk || &error($text{'disk_egone'});
14
15&ui_print_header($disk->{'desc'}, $text{'nslice_title'}, "");
16
17print &ui_form_start("create_slice.cgi", "post");
18print &ui_hidden("device", $in{'device'});
19print &ui_table_start($text{'nslice_header'}, undef, 2);
20
21# Slice number (first free)
22my %used = map { $_->{'number'}, $_ } @{$disk->{'slices'}};
23my $n = 1;
24while($used{$n}) {
25	$n++;
26	}
27print &ui_table_row($text{'nslice_number'},
28	&ui_textbox("number", $n, 6));
29
30# Disk size in blocks
31print &ui_table_row($text{'nslice_diskblocks'},
32	$disk->{'blocks'});
33
34# Start and end blocks (defaults to last slice+1)
35my ($start, $end) = (63, $disk->{'blocks'});
36foreach my $s (sort { $a->{'startblock'} cmp $b->{'startblock'} }
37		    @{$disk->{'slices'}}) {
38	$start = $s->{'startblock'} + $s->{'blocks'} + 1;
39	}
40print &ui_table_row($text{'nslice_start'},
41	&ui_textbox("start", $start, 10));
42print &ui_table_row($text{'nslice_end'},
43	&ui_textbox("end", $end, 10));
44
45# Slice type
46print &ui_table_row($text{'nslice_type'},
47	&ui_select("type", 'a5',
48	   [ sort { $a->[1] cmp $b->[1] }
49		  map { [ $_, &fdisk::tag_name($_) ] }
50		      &fdisk::list_tags() ]));
51
52# Also create partition?
53print &ui_table_row($text{'nslice_makepart'},
54	&ui_yesno_radio("makepart", 1));
55
56print &ui_table_end();
57print &ui_form_end([ [ undef, $text{'create'} ] ]);
58
59&ui_print_footer("edit_disk.cgi?device=$in{'device'}",
60		 $text{'disk_return'});
61