#!/bin/bash

##################################################
# add_module_param $kernelmodule $value
# remembers parameters for the given kernel module 
# e.g. add_module_param rtl8193too debug=1
##################################################
add_module_param() {
    echo "options $1 $2" >> /etc/modprobe.d/options
}

##################################################
# mod_opt $kernelmodule
# get module parameter from kernel command line
##################################################
mod_opt()
{
     local module=$1
     local name=${module%%.ko}
     local param
 
     test -e /proc/cmdline || return 1
     
     name=$(eval echo $name | sed "s/[-_]/\*/g")
     for i in `cat /proc/cmdline`
     do
 	case $i in
 	    ${name}.*=*)
              param="${param}${param:+ }${i##${name}.}"
 	     ;;
 	esac
     done
     echo $param
}

##################################################
# load_modules
# loads all kernelmodules that belong to the 
# current init module
# this is also done automatically when the
# init module is done
# e.g. load_modules
##################################################
load_modules() {
    local option
    local i
    for file in $(eval echo $modules)
    do
	options=$(mod_opt $file)
	if [ "n" != "n$options" ]
	then
	    for i in $options
	    do
		add_module_param ${file%%.ko} $i
	    done
	fi
        modprobe $file
    done
    modules=""
}

##################################################
# dont_load_modules
# stops automatic loading of modules for the
# current init module
# e.g. dont_load_modules
##################################################
dont_load_modules() {
    modules=""
}

##################################################
# get_param $key
# returns the kernel commandline parameter value
# that is identified by the key
# e.g. get_param root
#      => /dev/hda1
##################################################
get_param() {
    echo $(eval echo \${cmd_${1/-/_}}) 2>/dev/null
}

if [ ! "$slow_boot" ]; then
  echo "doing fast boot"
  source run_all.sh
else
  for file in boot/*; do
    [ "$debug" ] && echo "preping $file"
    # load config for the current module
    config="config/${file#*-}"
    [ -e "$config" ] && . "$config"

    # check if we should run the module
    condition="$(cat $file | sed -n '/%if: /p')"
    condition="${condition#*if: }"
    if [ "$condition" ]; then
        if ! eval test $condition; then
            continue
        fi
    fi
    # remember dependent modules
    modules=$(cat $file | sed -n '/%modules: /p')
    modules="${modules#*les: }"

    # run the module
    [ "$debug" ] && echo "running $file"
    source $file
    
    # if the module did not load its modules, we do
    [ "$modules" ] && load_modules
  done
fi
