From c3d3f0c1ac1ef45916b3ff7d32b39f9531f94e51 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Fri, 12 Jul 2013 11:00:02 -0400 Subject: Write pro-archman and command handling. --- (limited to 'lib/cmd.sh') diff --git a/lib/cmd.sh b/lib/cmd.sh new file mode 100644 index 0000000..cff225b --- /dev/null +++ b/lib/cmd.sh @@ -0,0 +1,95 @@ +# 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 +} + +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 +} -- cgit v0.9.1