#! /bin/sh

# Set a default boot entry for GRUB
#   Copyright (C) 2004 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

# Initialize some variables.
PACKAGE=grub
VERSION=0.97

rootdir=
entry=

# Usage: usage
# Print the usage.
usage () {
    cat <<EOF
Usage: grub-set-default [OPTION] entry
Set the default boot entry for GRUB.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --root-directory=DIR    Use the directory DIR instead of the root directory

ENTRY is a number or the special keyword \`default\'.

Report bugs to <bug-grub@gnu.org>.
EOF
}

# Check the arguments.
for option in "$@"; do
    case "$option" in
    -h | --help)
	usage
	exit 0 ;;
    -v | --version)
	echo "grub-set-default (GNU GRUB ${VERSION})"
	exit 0 ;;
    --root-directory=*)
	rootdir=`echo "$option" | sed 's/--root-directory=//'` ;;
    -*)
	echo "Unrecognized option \`$option'" 1>&2
	usage
	exit 1
	;;
    *)
	if test "x$entry" != x; then
	    echo "More than one entries?" 1>&2
	    usage
	    exit 1
	fi
	# We don't care about what the user specified actually.
	entry="${option}" ;;
    esac
done

if test "x$entry" = x; then
    echo "entry not specified." 1>&2
    usage
    exit 1
fi

# Determine the GRUB directory. This is different among OSes.
grubdir=${rootdir}/boot/grub
if test -d ${grubdir}; then
    :
else
    grubdir=${rootdir}/grub
    if test -d ${grubdir}; then
	:
    else
	echo "No GRUB directory found under ${rootdir}/" 1>&2
	exit 1
    fi
fi

file=${grubdir}/default
if test -f ${file}; then
    chmod 0600 ${file}
    rm -f ${file}
fi
cat <<EOF > $file
$entry
#
#
#
#
#
#
#
#
#
#
# WARNING: If you want to edit this file directly, do not remove any line
# from this file, including this warning. Using \`grub-set-default\' is
# strongly recommended.
EOF

# Bye.
exit 0
