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 'src') diff --git a/src/local.mk b/src/local.mk new file mode 100644 index 0000000..c42c66e --- /dev/null +++ b/src/local.mk @@ -0,0 +1,5 @@ +# pro-archman +# src/local.mk + +bin_srcs = \ + src/pro-archman.sh diff --git a/src/pro-archman.sh b/src/pro-archman.sh new file mode 100644 index 0000000..a3824cf --- /dev/null +++ b/src/pro-archman.sh @@ -0,0 +1,85 @@ +#!@@SH@@ +# +# pro-archman +# src/archive-manager.sh +# Main program file +# +# 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 . + +set -u + +# Constant global variables +PKGLIBDIR='@@PKGLIBDIR@@' +PKGLIBCMDDIR='@@PKGLIBCMDDIR@@' +PKGLIBCMD='@@PKGLIBCMD@@' +LF=' +' + +# Global variables +loading_cmd= + +# use() must be defined inline so it can be used to load other modules. +use() +{ + local module default_dir lib_subdir dir + + module="${1}" + + if [ "x${module%/*}" = "x${module}" ]; then + default_dir="${PKGLIBDIR}" + lib_subdir='' + else + case "${module%/*}" in + 'cmd') + loading_cmd="$(printf '%s' "${module##*/}" | \ + tr '[A-Z]' '[a-z]' | \ + tr -C '[a-z0-9_]' '_')" + default_dir="${PKGLIBCMDDIR}" + lib_subdir='cmd' + ;; + esac + fi + + if [ "${ARCHMAN_LIBDIR+set}" = 'set' ]; then + dir="${ARCHMAN_LIBDIR:-.}/${lib_subdir}" + else + dir="${default_dir}" + fi + + if [ -f "${dir}/${module##*/}.sm" ]; then + . "${dir}/${module##*/}.sm" + else + printf 'Failed to load module "%s": %s\n' \ + "${module}" 'no such file or directory' >&2 + exit 2 + fi +} + +use cmd + +main() +{ + load_cmds + + if [ ${#} -lt 1 ]; then + cmd_help_main >&2 + exit 1 + fi + + run_cmd "${@}" +} + +main "${@}" -- cgit v0.9.1