home *** CD-ROM | disk | FTP | other *** search
- #!/usr/bin/perl
-
- # Keep this sort of configurable for the future.
- $GRUBDIR="/boot/grub";
-
- # Parse the menu file, and see if we can get a match for a maybe given arg.
- open(MENU, "<$GRUBDIR/menu.lst") || die "no menu.lst in $GRUBDIR";
- $gotit = 0;
- $titleno = -1;
- $global_default = undef;
- while(<MENU>) {
- m,\s*default\s+(.+), && $titleno == -1 && ($global_default = $1);
- next unless m,\s*title\s+(.*),i;
- $title_name = $1;
- $titleno++;
-
- if (@ARGV > 0) {
- # Argument may be entirely numerical, in which case it is an index,
- # or a perl RE that leads to the first title matching.
- if (( $ARGV[0] =~ m,[0-9]+, && $titleno eq $ARGV[0] ) ||
- ( $ARGV[0] !~ m,[0-9]+, && $title_name =~ m,$ARGV[0],i) ) {
- $gotit = 1;
- last;
- }
- } else {
- print "$titleno: $title_name\n";
- }
- }
- close(MENU);
-
- print "Warning: you haven't set a global default!\n" if !defined($global_default);
-
- # Without a command line argument, we have now listet the titles and are done.
- exit 0 if @ARGV < 1;
-
- # Else the user wants to write the default file. We have better found a match!
- if ($gotit > 0) {
- print "Warning: your global default is 'saved'; changing default permanently!"
- if $global_default eq "saved";
-
- print "Using entry #$titleno: $title_name\n";
-
- # set the magic one-time flag
- $titleno |= 0x4000;
-
- open(DEFFILE, ">$GRUBDIR/default") ||
- die "Cannot open default file for writing";
- $buf = $titleno . "\0" . "\n" x 9;
- syswrite(DEFFILE, $buf, 10);
- close(DEFFILE);
-
- exit 0;
- } else {
- print $ARGV[0] . " not found in $GRUBDIR/menu.lst\n";
- exit 1;
- }
-
-