#!/bin/bash
#
# Pass arguments to sfdisk for a bochs disk-image.
# 
# $Author: bablokb $
# $Revision: 1.2 $
#
# License: GPL2
# -----------------------------------------------------------------------------

. `dirname $0`/bxtfuncs.inc

# usage message   -------------------------------------------------------------

usage() {
  echo -e "\n`basename $0`: pass arguments to sfdisk for a bochs-hd-image\n\
  \nusage: `basename $0` [options] image-name [sfdisk-arguments]\n\
  possible options:\n\
    -V       show version\n\
    -h       show this help\n\
    -q       run quiet (default)\n\
    -v       verbose messages\n\
    -s       only simulate\n\
    -o opts  options to sfdisk (opts must be quoted)\n\
"
  exit 3
}

# set system defaults   -------------------------------------------------------

setDefaults() {
  quiet=1; simulate=0
  sfdiskOpts=""
  sfdiskArgs=""
}

# parse arguments and set variables -------------------------------------------

parseArguments() {

  while getopts ":o:Vhqvs" opt; do
    case $opt in
      o) sfdiskOpts=$OPTARG;;
      V) showCopyright `basename $0` "pass arguments to sfdisk for a bochs-hd-image";;
      h) usage;;
      q) quiet=1;;
      v) quiet=0;;
      s) simulate=1;;
      ?) echo "error: illegal option: $OPTARG" >&2
           usage;;
    esac
  done
  if [ $# -lt $OPTIND ]; then
    echo "error: missing argument image-name" >&2
    usage
  fi
  imageName=${!OPTIND}
  shift $OPTIND
  sfdiskArgs="$@"
}

# check arguments   -----------------------------------------------------------

checkArguments() {
  if [ ! -f $imageName ]; then
    echo "error: image $imageName does not exist!" >&2
    exit 1
  fi
}

# pass arguments to sfdisk   --------------------------------------------------

executeSfdisk() {
  cmd="sfdisk $sfdiskOpts -C $cyl -H $heads -S $spt $imageName $sfdiskArgs"
  if ! do_cmd "$cmd"; then
    echo "error: error in sfdisk-command for $imageName" >&2
    exit 1
  fi
}

# main program   --------------------------------------------------------------

setDefaults
parseArguments "$@"
checkSfdisk
checkArguments
setGeometry $imageName
executeSfdisk
exit 0
