#!/bin/bash bold="" red="" green="" yellow="" blue="" normal="" # {{{ usage_functions usage_functions(){ echo -n } # }}} # {{{ human readable human_readable() { size=${1} if [ ${size} -gt 1024 ] ; then if [ ${size} -gt $(( 1024*1024 )) ] ; then size="$(( ${size} / ( 1024*1024 ) )) MB" else size="$(( ${size} / 1024 )) kB" fi else size="${size} Byte" fi echo "${size}" } # }}} # {{{ lvp_read function lvp_read { var=$1 shift default=${1} shift if [ ${LVP_USE_DEFAULTS} -eq 1 ] ; then echo "${@} ${default} (batch mode)" eval "${var}=\"${default}\"" return fi eval "read -p \"${@}\" ${var}" return } # }}} # {{{ confirm function confirm { unset yesno if [ ${LVP_USE_DEFAULTS} -eq 1 ] ; then echo "${@} [yes|no] ? yes (batch mode)" yesno="yes" fi while [ "${yesno}" != "yes" -a "${yesno}" != "no" ] ; do echo -n "${@} [yes|no] ? " read yesno done [ "${yesno}" = "yes" ] && return 0 return 1 } # }}} # {{{ menu_init menu_init () { block_level=0 items=0 } # }}} # {{{ block_start block_start () { block_level=$(( ${block_level} + 2 )) echo "${@}" } # }}} # {{{ block_end block_end () { block_level=$(( ${block_level} - 2 )) } # }}} # {{{ bool bool () { # bool LVPCFG_FOO 1 "This is Option FOO" items=$(( ${items} + 1 )) eval "type_${items}=\"bool\"" eval "option_${items}=\"${1}\"" eval "value=\${${1}}" [ -z "${value}" ] && \ eval "${1}=\"${2}\"" eval "text_${items}=\"${3}\"" } # }}} # {{{ multi multi () { # multi LVPCFG_FOO default "This is Multioption FOO" foo default bar items=$(( ${items} + 1 )) eval "type_${items}=\"multi\"" eval "option_${items}=\"${1}\"" eval "value=\${${1}}" [ -z "${value}" ] && \ eval "${1}=\"${2}\"" eval "text_${items}=\"${3}\"" shift; shift; shift eval "values_${items}=\"\"" while [ ! -z "${1}" ] ; do eval "values_${items}=\"\${values_${items}} ${1}\"" shift done } # }}} # {{{ text text () { # text LVPCFG_FOO "default text" "This is textoption FOO" items=$(( ${items} + 1 )) eval "type_${items}=\"text\"" eval "option_${items}=\"${1}\"" eval "value=\${${1}}" [ -z "${value}" ] && \ eval "${1}=\"${2}\"" eval "text_${items}=\"${3}\"" } # }}} # {{{ comment comment (){ items=$(( ${items} + 1 )) eval "type_${items}=\"comment\"" eval "text_${items}=\"${@}\"" } # }}} # {{{ display display () { i=1 while [ ${i} -le ${items} ] ; do eval "type=\${type_${i}}" case "${type}" in bool) eval "option=\${option_${i}}" eval "value=\${${option}}" desc="X" [ "${value}" == "0" ] && desc=" " eval "echo \"${i} - [${desc}] \${text_${i}}\"" ;; multi) eval "option=\${option_${i}}" eval "value=\${${option}}" eval "echo \"${i} - (${value}) \${text_${i}}\"" ;; text) eval "option=\${option_${i}}" eval "value=\${${option}}" dots="..." [ "${value:0:17}" == "${value}" ] && dots="" eval "echo \"${i} - (${value:0:17}${dots}) \${text_${i}}\"" ;; comment) eval "echo \"\${text_${i}}\"" ;; *) echo "${type} NOT IMPLEMENTED" ;; esac i=$(( ${i} + 1 )) done } # }}} # {{{ save save () { i=1 echo "# LVP Configuration" > .config while [ ${i} -le ${items} ] ; do eval "option=\${option_${i}}" eval "value=\${${option}}" 2>/dev/null eval "type=\${type_${i}}" case "${type}" in bool) echo "${option}=${value}" >>.config ;; multi) echo "${option}=\"${value}\"" >>.config ;; text) echo "${option}=\"${value}\"" >>.config ;; esac i=$(( ${i} + 1 )) done } # }}} # {{{ load load () { . .config } # }}} # {{{ get get () { # get 3 eval "option=\${option_${1}}" if [ -z "${option}" ] ; then echo "${bold}${red}No such option: ${1}${normal}" sleep 1 return fi eval "type=\${type_${1}}" case "${type}" in text) eval "value=\${${option}}" read -erp "Enter new value for ${option} [${value}]> " new [ ! -z "${new}" ] && eval "${option}=\"${new}\"" ;; multi) eval "value=\${${option}}" eval "values=\${values_${1}}" x=1 for v in ${values} ; do [ "${value}" == "${v}" ] && echo -n "${bold}" echo "${x} - ${v}${normal}" eval "nval_${1}_${x}=\"${v}\"" x=$(( ${x} + 1 )) done read -ep "Enter new value by number> " new [ -z "${new}" ] && return eval "new=\${nval_${1}_${new}}" if [ -z "${new}" ] ; then echo "${bold}${red}No such option!${normal}" sleep 1 return else eval "${option}=\"${new}\"" fi ;; bool) eval "value=\${${option}}" if [ ${value} -eq 1 ] ; then eval "${option}=0" else eval "${option}=1" fi ;; *) echo "${bold}${red}NOT IMPLEMENTED${normal}" sleep 1 ;; esac } # }}}