#; kate: space-indent on; indent-width 2; syntax bash;


declare -r TV_LD_X86_64_PATH='/lib64/ld-linux-x86-64.so.2'
declare -r TV_LD_X86_32_PATH='/lib/ld-linux.so.2'
declare -r TV_LD_ARM_HF_PATH='/lib/ld-linux-armhf.so.3'
declare -r TV_LD_ARM_EL_PATH='/lib/ld-linux.so.3'
declare -r TV_LD_ARM_64_PATH='/lib/ld-linux-aarch64.so.1'


# error message, set return value
function fail()
{
  echo -e "\nError: $@\n"
  false
}

# die with message
function die()
{
  echo -e "\nError: $@\n"
  exit 1
}

# die with red message
function Rdie()
{
  Recho "\nError: $@\n"
  exit 1
}

# echo to stderr, don't catch if die is called in VAR=$(func) statements
function Rdie2()
{
  Recho "\n $@ \n" 1>&2
  exit 1
}

# *A*    b
function ABecho()
{
  printf "\E[1m %-35s \E[0m %s \n" "$1" "$2"
}

function HeadEcho()
{
  printf "%-18s %s\n" "$1" "$2"
}

function IndentEcho()
{
  local data="$1"
  local pre="$2"

  while read -r line; do
    echo "$pre$line"
  done <<< "$data"
}

# echo bold
function BDecho()
{
  echo -ne "\E[1m$@\E[0m\n"
}

function Recho()
{
  # force black background: "\E[1;31;40m$@\E[0m\n"
  echo -ne "\E[1;31m$@\E[0m\n"
}

function Gecho()
{
  # force black background: "\E[1;32;40m$@\E[0m\n"
  echo -ne "\E[1;32m$@\E[0m\n"
}

function Yecho()
{
  # force black background: "\E[1;33;40m$@\E[0m\n"
  #        auto background: "\E[1;33m$@\E[0m\n"
  echo -ne "\E[1;33;40m$@\E[0m\n"
}

# logging

function Techo()
{
  echo "$@" | tee --append "$TV_STARTLOG"
}

function TeeLog()
{
  local append=$( [ "$1" = 'reset' ] || echo '--append' )
  tee $append "$TV_STARTLOG"
}

function Log()
{
  cat >> "$TV_STARTLOG"
}

# other commands

function cmdExists()
{
  command -v "$1" >/dev/null 2>&1
}

function hasArmhfSupport()
{
  [ -x "$TV_LD_ARM_HF_PATH" ]
}

function hasArmelSupport()
{
  [ -x "$TV_LD_ARM_EL_PATH" ]
}

function hasArm64Support()
{
  [ -x "$TV_LD_ARM_64_PATH" ]
}

function hasX86_32Support()
{
  [ -x "$TV_LD_X86_32_PATH" ]
}

function hasX86_64Support()
{
  [ -x "$TV_LD_X86_64_PATH" ]
}

