Max Mahn

aboutsummaryrefslogtreecommitdiff
path: root/src/args.sh
blob: 25a11db8c958614c07dfcca4f22af264b7c33bb9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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
}