#!/bin/sh
#-------------------------------------------------------------------------+
# Copyright (C) 2015 Matt Churchyard (churchers@gmail.com)
# All rights reserved
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted providing that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.

# load a configuration file
# this reads the specfied file into the global VM_CONFIG variable.
# we have very basic parsing that uses # for comments and requires
# all variables to be at the beginning of the line in lowercase.
# Note also that a # within double quotes will still be treated
# as the start of a comment.
#
# @param string _file full path of the file to read
# @modifies VM_CONFIG
#
__config_load(){
	local _file="$1"

	# read config file
	# we kick out any lines that don't start with a letter,
	# scrap anything after a # character, and remove double-quotes
	VM_CONFIG=$(grep '^[a-z]' "${_file}" 2>/dev/null | awk -F# '{print $1}' | tr -d '"')
}

# get a configuration value from the current config file
#
# @param string _var the variable to put value into
# @param string _key the name of the config key to retrieve
#
__config_get(){
	local _c_var="$1"
	local _c_key="$2"
	local _c_line
	local IFS=$'\n'

	for _c_line in ${VM_CONFIG}; do
		if [ "${_c_key}" = "${_c_line%%=*}" ]; then
			setvar "${_c_var}" "${_c_line#*=}"
			return 0
		fi
	done

	# not found
	setvar "${_c_var}" ""
	return 1
}
