#!/usr/bin/env bash

set -o errexit
set -o nounset

if [[ "$0" = "${BASH_SOURCE[0]}" ]] ; then  # '#!/usr/bin/env bashsh-0'
  if [[ $# -eq 0 ]] ; then
    echo 'ERROR: Bashsh must be run from a script.' >&2
    echo >&2
    echo 'Usage variants:' >&2
    echo '  #!/usr/bin/env bashsh-0' >&2
    echo 'or' >&2
    echo '  source bashsh-0' >&2
    exit 1
  fi
  DIR="$( cd "$( dirname "$1" )" && pwd )"
else  # 'source bashsh-0'
  # DIR="$( cd "$( dirname "${BASH_SOURCE[1]:-}" )" && pwd )"
  DIR="$( cd "$( dirname "${BASH_SOURCE[1]}" )" && pwd )"
fi

# http://misc.flogisoft.com/bash/tip_colors_and_formatting
# http://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux#comment24883926_5947802
if [[ "$(uname -s)" = "Darwin" || "$(uname -s)" = "Linux" ]] ; then
  bold='\033[1m'
else
  # Make it a different color on Windows:
  bold='\033[38;5;172m'
fi
normal='\033[0m'

function QUOTED() {
  echo "$(printf "%q " "$@")"
}

function CMD_STR() {
  ECHO "$@"
  eval "$@"
}

function CMD() {
  CMD_STR "$(QUOTED "$@")"
}

function ECHO() {
  echo -ne "$bold" >&2
  echo "$@" >&2
  echo -ne "$normal" >&2
}

function MSG() {
  ECHO "# $@"
}

function READ_P() {
  ECHO -n "# $1"
  shift
  read "$@" >&2
}

if [[ "$0" = "${BASH_SOURCE[0]}" ]] ; then  # '#!/usr/bin/env bashsh-0'
  _program=$1
  shift
  . "$_program"
fi
