#!/bin/bash _ariketa.dir () { local _ariketa_filename _ariketa_dir _ariketa_filename="${BASH_SOURCE[$(( ${#BASH_SOURCE[@]} - 1 ))]}" [[ "$_ariketa_filename" == */* ]] && _ariketa_dir="${_ariketa_filename%/*}" # get an absolute path to ariketa in case we need it _ariketa_dir=$(cd "${_ariketa_dir:-$PWD}" && printf "%s" "$PWD") printf "%s" "$_ariketa_dir" } _ariketa.help () { >&2 printf "%s\n" "$(<${ARIKETA_DIR:-.}${ARIKETA_DIR+/}USAGE)" return 1 } _sourced? () { [[ ${FUNCNAME[$(( ${#FUNCNAME[@]} - 1 ))]} == "source" ]] } ARIKETA_DIR=$(_ariketa.dir) _sourced? || { _ariketa.help exit $? } until [[ -z "$1" ]]; do case "$1" in -h|--help) _ariketa.help return $?;; -a|--array) # copy by indirection to set of discrete elements in named array _ariketa_array_elements="${2:?Missing name parameter for '-a'}[@]" _examples=( "${!_ariketa_array_elements}" ) shift 2;; *) _ariketa_examples_file="${1}" [[ -r "${_ariketa_examples_file}" ]] || { _ariketa.help return $? } shift;; esac done # load examples array from file if array not passed / copied from args [[ -z "${_ariketa_array_elements}" ]] && { source "${_ariketa_examples_file:-${ARIKETA_DIR:?}/config/examples.sh}" } unset _ariketa_array_elements # if examples array has no content, bail with USAGE text (( ${#_examples[@]} )) || { >&2 printf "** %s\n" \ "" ""\ "$(declare -p _examples)"\ "_examples array needs content -- see 'configuration' below"\ "" "" _ariketa.help return $? } # preserve multiline commands as such in history HISTCONTROL=ignoredup shopt -s lithist # load presentation prompt source "${ARIKETA_DIR:?}/lib/prompt.sh" # load misc functions source "${ARIKETA_DIR:?}/lib/functions.sh" # set up bash macros to page through examples source "${ARIKETA_DIR:?}/lib/bindings.sh" # unset example index/directionality markers unset _I _D