# 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 . [ "x${_CMD_SM+set}" = 'xset' ] && return 0 _CMD_SM=1 cmds= load_cmds() { local cmd for cmd in ${PKGLIBCMD}; do cmd="${cmd##*/}" cmd="${cmd%.sm}" cmds="${cmds}${cmd}${LF}" use "cmd/${cmd}" done } cmd_summary() { if [ "x${loading_cmd}" = 'x' ]; then return 125 fi eval "cmd_${loading_cmd}_summary='${1}'" } cmd_usage() { if [ "x${loading_cmd}" = 'x' ]; then return 125 fi eval "cmd_${loading_cmd}_usage='${1}'" } print_cmd_summaries() { local padding cmd summary padding="$(printf '%24s' '')" for cmd in ${PKGLIBCMD}; do cmd="${cmd##*/}" cmd="${cmd%.sm}" if [ ${#cmd} -gt 20 ]; then printf ' %s\n%24s' "${cmd}" '' else printf ' %-20s ' "${cmd}" fi summary="$(eval printf \'%s\' \"\$\{cmd_"${cmd}"_summary\}\")" printf '%s\n' "${summary}" | fold -s -w 56 | \ sed "2,\$s/^/${padding}/;" done } print_cmd_usage() { local cmd usage cmd="${1}" usage="$(eval printf \'%s\' \"\$\{cmd_"${cmd}"_usage\}\")" printf 'Usage: %s %s %s\n' "${0}" "${cmd}" "${usage}" } is_cmd() { local cmd cmd="${1}" [ "x$(printf '%s' "${cmds}" | grep "^${cmd}$")" = "x${cmd}" ] } run_cmd() { local cmd cmd="${1}" shift if is_cmd "${cmd}"; then "cmd_${cmd}_main" "${@}" else printf 'Command "%s" not found\n' "${cmd}" fi }