Max Mahn

aboutsummaryrefslogtreecommitdiff
path: root/src/args.sh
diff options
context:
space:
mode:
authorMax Mahn <mahn.maxwell@proton.me>2026-05-20 09:23:50 -0400
committerMax Mahn <mahn.maxwell@proton.me>2026-05-20 09:23:50 -0400
commit137e4ed9d74891349de1b0da1e0cf2653ea92c5e (patch)
tree29f913c45c081ec52269362eb2ce7f6f18d09070 /src/args.sh
initial commit
Diffstat (limited to 'src/args.sh')
-rw-r--r--src/args.sh79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/args.sh b/src/args.sh
new file mode 100644
index 0000000..25a11db
--- /dev/null
+++ b/src/args.sh
@@ -0,0 +1,79 @@
+
+SHORT_OPTS=""
+LONG_OPTS=""
+for option in $(seq 0 5 $((${#OPTIONS[@]}-1)) )
+do
+ SHORT_OPTS+="${OPTIONS[(${option} + 1)]}${OPTIONS[(${option} + 3)]:+:}"
+ LONG_OPTS+="${OPTIONS[(${option} + 2)]}${OPTIONS[(${option} + 3)]:+:},"
+done
+
+GETOPT_CMD="getopt -n $(basename $0) -o ${SHORT_OPTS} -l ${LONG_OPTS} -- $@"
+
+
+USAGES=(
+ "mktree [options] <format> <name>"
+ "mktree -f <format> [options] <name>"
+)
+
+
+PrintHelp() {
+ leader="Usage: "
+ for usage in "${USAGES[@]}"
+ do
+ echo "${leader}${usage}"
+ leader=" or "
+ done
+ echo "Options:"
+ for option in $(seq 0 5 $((${#OPTIONS[@]}-1)) )
+ do
+ short="${OPTIONS[(${option} + 1)]}"
+ long="${OPTIONS[(${option} + 2)]}"
+ arg="${OPTIONS[(${option} + 3)]}"
+ desc="${OPTIONS[(${option} + 4)]}"
+
+ printf " -%-6s --%-16s %-48s\n" \
+ "${short} ${arg}" "${long}${arg:+=${arg}}" "${desc}"
+ done
+}
+
+
+ParseOpts() {
+ while [ $# -gt 0 ]
+ do
+ case $1 in
+ "--") # end of options
+ shift
+ if [ -z "${FMT_PATH}" ]
+ then
+ FMT_PATH=$(GetTemplate $(Unquote $1))
+ [ 0 -ne $? ] && Error "Couldn't find template $1!" && exit 1
+ shift
+ fi
+ PROJECT_NAME=$(Unquote $1)
+ shift
+ [ -z "${PROJECT_NAME}" ] && Error "Project name not specified!\n" && exit 1
+ MakeProject ${FMT_PATH} ${PROJECT_NAME} $@
+ exit $?
+ ;;
+ -*) # options
+ for i in $( seq 0 5 $((${#OPTIONS[@]}-1)) )
+ do
+ callback="${OPTIONS[${i}]}"
+ short="${OPTIONS[(${i} + 1)]}"
+ long="${OPTIONS[(${i} + 2)]}"
+ arg="${OPTIONS[(${i} + 3)]}"
+ desc="${OPTIONS[(${i} + 4)]}"
+ case $1 in
+ "-${short}" | "--${long}")
+ eval "${callback}" "${arg:+$2}" || exit $?
+ [ -n "${arg}" ] && shift # extra shift if the option takes an arg
+ break
+ ;;
+ esac
+ done
+ ;;
+ esac
+ shift
+ done
+}
+