# CLI user interface # # Copyright (C) 2015 Patrick "P. J." McDermott # # This program 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 3 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, see . cli_tty='' cli_msg='' cli_init_ui() { cli_tty="$(tty)" } cli_exit_ui() { : Nothing to do. } cli_dbg() { : No output. } cli_info() { local fmt="${1}" shift 1 printf "${fmt}\n" "${@}" >"${cli_tty}" } cli_warn() { local fmt="${1}" shift 1 printf "Warning: ${fmt}\n" "${@}" >"${cli_tty}" } cli_err() { local fmt="${1}" shift 1 printf "Error: ${fmt}\n" "${@}" >"${cli_tty}" } cli_message() { local msg="${1}" shift 1 printf '%s\n\n' "${msg}" >"${cli_tty}" return 0 } cli_show_menu() { local title="${1}" shift 1 local i= local l= local label= printf '%s\n' "${title}" >"${cli_tty}" { printf '%s\n' "${title}" | sed 's/./-/g'; } >"${cli_tty}" while :; do printf '\n' >"${cli_tty}" i=0 l=${#} for label in "${@}"; do i=$(($i + 1)) printf ' %4d: %s\n' "${i}" "${label}" >"${cli_tty}" done printf '\n> ' >"${cli_tty}" if ! read -r i <"${cli_tty}"; then continue fi case "${i}" in *[!0-9]* | '') continue ;; esac if [ ${i} -le 0 ] || [ ${i} -gt ${l} ]; then continue fi printf '\n' >"${cli_tty}" i=$(($i - 1)) printf '%d' "${i}" return 0 done } cli_show_prompt() { local title="${1}" local input="${2}" local len=${3} shift 3 local input='' printf '%s\n' "${title}" >"${cli_tty}" { printf '%s\n' "${title}" | sed 's/./-/g'; } >"${cli_tty}" if [ "x${input}" = 'x' ]; then printf '\n> ' >"${cli_tty}" else printf '\n[%s] > ' "${input}" >"${cli_tty}" fi read -r input printf '\n' >"${cli_tty}" printf '%s' "${input}" return 0 }