# pro-archman # lib/cmd.sh # Command-related functions # # Copyright (C) 2013 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 . cmds=' ' register_cmd() { local cmd="${1}" shift 1 cmds="${cmds}${cmd} " return 0 } print_opt_summaries() { local padding= local opt= local opt_out= local summary= padding="$(printf '%24s' '')" for opt in $(printf '%s' "${OPTSTRING}" | sed 's/\([a-zA-Z0-9]\)/ \1/g') do if [ ${#opt} -eq 1 ]; then # No argument expected. opt_out="-${opt}" else # Argument expected. opt="${opt%?}" opt_out="-${opt} $(get_msg "opt_${opt}_arg")" fi if [ ${#opt_out} -gt 20 ]; then printf ' %s\n%24s' "${opt_out}" '' else printf ' %-20s ' "${opt_out}" fi summary="$(get_msg "opt_${opt}_summary")" printf '%s\n' "${summary}" | fold -s -w 56 | \ sed "2,\$s/^/${padding}/;" done } print_cmd_summaries() { local padding= local cmd= local cmd_clean= local summary= padding="$(printf '%24s' '')" for cmd in ${cmds}; do if [ ${#cmd} -gt 20 ]; then printf ' %s\n%24s' "${cmd}" '' else printf ' %-20s ' "${cmd}" fi cmd_clean="$(printf '%s' "${cmd}" | \ tr '[A-Z]' '[a-z]' | tr -C '[a-z0-9_]' '_')" summary="$(get_msg "cmd_${cmd_clean}_summary")" printf '%s\n' "${summary}" | fold -s -w 56 | \ sed "2,\$s/^/${padding}/;" done } print_cmd_usage() { local cmd="${1}" local cmd_clean= local usage= cmd_clean="$(printf '%s' "${cmd}" | \ tr '[A-Z]' '[a-z]' | tr -C '[a-z0-9_]' '_')" usage="$(get_msg "cmd_${cmd_clean}_usage")" printf "$(get_msg 'cmd_usage')\n" "${0}" "${cmd}" "${usage}" } is_cmd() { local cmd="${1}" case "${cmds}" in *" ${cmd} "*) return 0;; esac return 1 } run_cmd() { local cmd="${1}" local cmd_clean= shift cmd_clean="$(printf '%s' "${cmd}" | \ tr '[A-Z]' '[a-z]' | tr -C '[a-z0-9_]' '_')" if is_cmd "${cmd}"; then "cmd_${cmd_clean}_main" "${@}" else error 1 "$(get_msg 'cmd_not_found')" "${cmd}" fi }