diff options
author | P. J. McDermott <pj@pehjota.net> | 2017-07-22 13:26:23 (EDT) |
---|---|---|
committer | P. J. McDermott <pj@pehjota.net> | 2017-07-22 13:26:23 (EDT) |
commit | 65022fdd57f41b6250b2e29bdd7bac59b17f3cea (patch) | |
tree | c7f7e11c3e8f4f8e215789be9929d21ab14ccb6b /src/cmd.sh | |
parent | 8dcab4434333dc9c8170baa8fbbccc2538fa2401 (diff) |
`git mv lib/*.sh src/`
Diffstat (limited to 'src/cmd.sh')
-rw-r--r-- | src/cmd.sh | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/src/cmd.sh b/src/cmd.sh new file mode 100644 index 0000000..d05e7eb --- /dev/null +++ b/src/cmd.sh @@ -0,0 +1,126 @@ +# 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 <http://www.gnu.org/licenses/>. + +[ "x${_CMD_SM+set}" = 'xset' ] && return 0 +_CMD_SM=1 + +use output +use locale + +cmds= + +load_cmds() +{ + local cmd= + + for cmd in ${PKGLIBCMD}; do + cmd="${cmd##*/}" + cmd="${cmd%.sm}" + cmds="${cmds}${cmd}${LF}" + use "cmd/${cmd}" + done +} + +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 ${PKGLIBCMD}; do + cmd="${cmd##*/}" + cmd="${cmd%.sm}" + 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}" + + [ "x$(printf '%s' "${cmds}" | grep "^${cmd}$")" = "x${cmd}" ] +} + +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 +} |