# Command-related functions # # Copyright (C) 2013 Patrick "P. J." McDermott # # This file is part of the ProteanOS Development Kit. # # The ProteanOS Development Kit 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. # # The ProteanOS Development Kit 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 the ProteanOS Development Kit. If not, see # . [ "x${_CMD_SM+set}" = 'xset' ] && return 0 _CMD_SM=1 use output use locale CMDS='@cmds@' running_cmd= load_cmds() { local cmd= for cmd in ${CMDS}; do 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 ${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}" [ "x$(printf '%s\n' ${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 running_cmd="${cmd}" "cmd_${cmd_clean}_main" "${@}" running_cmd='' else error 1 "$(get_msg 'cmd_not_found')" "${cmd}" fi }