From 865fd3f4cc56e190fe18e69bc1583a0c3ba60176 Mon Sep 17 00:00:00 2001 Message-Id: <865fd3f4cc56e190fe18e69bc1583a0c3ba60176.1714036648.git.mdw@distorted.org.uk> From: Mark Wooding Date: Wed, 15 Feb 2012 00:45:09 +0000 Subject: [PATCH 1/1] keyfunc.sh.in: Infrastructure for built-in subcommands. Organization: Straylight/Edgeware From: Mark Wooding This is the `defcmd' machinery from elsewhere, in yet another guise. --- cryptop.in | 2 +- keyfunc.sh.in | 104 +++++++++++++++++++++++++++++++++++++------------- keys.in | 2 +- 3 files changed, 79 insertions(+), 29 deletions(-) diff --git a/cryptop.in b/cryptop.in index 064b595..75a553b 100755 --- a/cryptop.in +++ b/cryptop.in @@ -31,7 +31,7 @@ export ETC KEYS KEYSLIB . "$KEYSLIB"/keyfunc.sh -usage="usage: $quis COMMAND [ARGUMENTS ...]" +usage="COMMAND [ARGUMENTS ...]" prefix=cryptop runas @user@ cryptop "$@" diff --git a/keyfunc.sh.in b/keyfunc.sh.in index 89deccc..952a095 100644 --- a/keyfunc.sh.in +++ b/keyfunc.sh.in @@ -636,7 +636,7 @@ recover () { defhelp () { read umsg - usage="usage: $quis${umsg+ }$umsg" + usage=$umsg help=$(cat) case "$KEYS_HELP" in t) help; exit ;; esac } @@ -644,13 +644,17 @@ defhelp () { help () { showhelp; } showhelp () { cat <&2 "$usage"; exit 1; } +usage () { + : ${cmdargs=$usage} + echo "usage: $quis${cmdname:+ $cmdname}${cmdargs:+ $cmdargs}" +} +usage_err () { usage >&2; exit 1; } ###-------------------------------------------------------------------------- ### Subcommand handling. @@ -659,6 +663,20 @@ version () { echo "$PACKAGE version $VERSION" } +unset cmdargs +unset cmdname +cmds="" +defcmd () { + cmd=$1; shift; args=$* + help=$(cat) + eval help_$cmd=\$help + cmds="${cmds:+$cmds +}$cmd $args" +} + +defcmd help "[COMMAND ...]" <&2 "$quis: unrecognized command \`$i'" - rc=1 - continue - elif ! KEYS_HELP=t "$KEYSLIB/$prefix.$i"; then - rc=1 - fi + foundp=nil + while read cmdname cmdargs; do + case $cmdname in "$cmd") foundp=t; break ;; esac + done <&2 "$quis: unrecognized command \`$cmd'" + rc=1 + continue + elif ! KEYS_HELP=t "$KEYSLIB/$prefix.$cmd"; then + rc=1 + fi + ;; + esac done ;; esac @@ -697,16 +735,28 @@ EOF } dispatch () { - case $# in 0) echo >&2 "$usage"; exit 1 ;; esac + case $# in 0) usage_err ;; esac cmd=$1; shift - case "$cmd" in help) cmd_help "$@"; exit ;; esac - if [ ! -x "$KEYSLIB/$prefix.$cmd" ]; then - echo >&2 "$quis: unrecognized command \`$cmd'" - exit 1 - fi - - unset KEYS_HELP - exec "$KEYSLIB/$prefix.$cmd" "$@" + foundp=nil + while read cmdname cmdargs; do + case $cmdname in "$cmd") foundp=t; break ;; esac + done <&2 "$quis: unrecognized command \`$cmd'" + exit 1 + fi + unset KEYS_HELP + exec "$KEYSLIB/$prefix.$cmd" "$@" + ;; + esac } ###----- That's all, folks -------------------------------------------------- diff --git a/keys.in b/keys.in index 5baa9f5..cee261c 100755 --- a/keys.in +++ b/keys.in @@ -31,7 +31,7 @@ export ETC KEYS KEYSLIB . "$KEYSLIB"/keyfunc.sh -usage="usage: $quis COMMAND [ARGUMENTS ...]" +usage="COMMAND [ARGUMENTS ...]" prefix=keys runas @user@ keys "$@" -- [mdw]