#!/usr/bin/perl

use CGI ':all';
use CGI::Carp;

my $default_append = "ramdisk_size=128000 root=/dev/ram3";
my $default_acpi = "acpi=ht";
my $default_vga = "vga=788";

my $cgi_name = "/" . ($0 =~ m|([^/]+)$|)[0];

print
  header(),
  start_html(-TITLE => 'hd_grub configuration');

if (param()) {
    print_menu_lst();
} else {
    print_form();
}

print end_html;


sub menu_lst {
    my ($hd, $hd_linux, $partition_number, $directory) = @_;

    my $grub_partition_number = $partition_number - 1;

    <<EOF;
timeout 0
default 0

title Mandriva Install

root ($hd,$grub_partition_number)
kernel $directory/isolinux/alt0/vmlinuz $default_append $default_acpi $default_vga automatic=method:disk,partition:$hd_linux$partition_number,directory:$directory
initrd $directory/isolinux/alt0/all.rdz
EOF

}

sub print_menu_lst {
    my $directory = param('directory');
    $directory =~ s!^/!!;
    print
      ol(li(qq(Select the text below and save it in a file "menu.lst")),
	 li(qq(Create a floppy from $directory/images/hd_grub.img (eg: <tt>dd if=hd_grub.img of=/dev/fd0</tt>))),
	 li(qq(Copy the file "menu.lst" to the floppy, overwriting the existing one)),
	 ),
      p(),
      start_form(-name => 'form', -action => $cgi_name, -method => 'get'),
      textarea(-default => menu_lst(param('hd'), param('hd_linux'), param('partition_number'), "/$directory"),
	       -rows => 15, -columns => 120,
	      ),
      end_form(),
}

sub print_form {
    print
      p(),
      start_form(-name => 'form', -action => $cgi_name, -method => 'get'),
      ul("Please choose the partition where Mandrivalinux is copied.",
	 li(popup_menu(-name => "hd", -default => 'hd0', 
		       -values => [ 'hd0' .. 'hd3' ],
		       -labels => { hd0 => '1st BIOS hard drive (usually hda or sda)',
				    hd1 => '2nd BIOS hard drive',
				    hd2 => '3rd BIOS hard drive',
				    hd3 => '4th BIOS hard drive',
				  })),
	 li(popup_menu(-name => "hd_linux", -default => 'hda', 
		       -values => [ 'hda' .. 'hdd', 'sda' .. 'sdc', 'hde' .. 'hdh' ],
		       -labels => { 
				    hda => '1st IDE hard drive (hda)',
				    hdb => '2nd IDE hard drive (hdb)',
				    hdc => '3rd IDE hard drive (hdc)',
				    hdd => '4th IDE hard drive (hdd)',
				    hde => '5th IDE hard drive (hde)',
				    hdf => '6th IDE hard drive (hdf)',
				    hdg => '7th IDE hard drive (hdg)',
				    hdh => '8th IDE hard drive (hdh)',
				    sda => '1st SCSI hard drive (sda)',
				    sdb => '2nd SCSI hard drive (sdb)',
				    sdc => '3rd SCSI hard drive (sdc)',
				  })),
	 li(popup_menu(-name => "partition_number", -default => '0', 
		       -values => [ 1 .. 15 ],
		       -labels => { 1 => '1st primary partition (hda1, sda1 or ...)',
				    2 => '2nd primary partition',
				    3 => '3rd primary partition',
				    4 => '4th primary partition',
				    5 => '5th partition (hda5, sda5 or ...) (first logical partition)',
				    map { $_ => $_ . 'th partition' } 6 .. 15
				  })),
       ),
      p(),
      ul("Please enter the directory containing the Mandrivalinux Distribution (relative to the partition chosen above)",
	 li(textfield(-name => 'directory', -default => '/cooker/i586', size => 40)),
	 ),
      p(submit(-name => 'Go')),
      end_form();
}