#!/bin/bash

# Universal bash program setup functions.

# Example usage:

# Source files to get required functions.
# source_files="gen_setup.sh"
# source_file_paths=$(type -p ${source_files})
# for file_path in ${source_file_paths} ; do source ${file_path} ; done

# Turn on extended globbing.
shopt -s extglob


function get_pgm_path_info {
  local program_path_var="${1:-program_path}" ; shift
  local program_name_var="${1:-program_name}" ; shift
  local program_dir_path_var="${1:-program_dir_path}" ; shift
  local follow_links="${1:-0}" ; shift

  # Determine the program path, name and dir path and assign them to the
  # variables indicated by the caller.

  # Description of argument(s):
  # program_path_var                The name of the variable to receive the
  #                                 program path.
  # program_name_var                The name of the variable to receive the
  #                                 program name.
  # program_dir_path_var            The name of the variable to receive the
  #                                 program dir path.
  # follow_links                    If the program running is actually a link
  #                                 to another file, use that file when
  #                                 calculating the above values.

  local _spn_loc_program_path_="${0}"

  # The program name is the program path minus all characters up to and
  # including the first slash.
  local _spn_loc_program_name_=${_spn_loc_program_path_##*/}
  # The program dir path is the program path minus everything from the last
  # slash to the end of the string.
  local _spn_loc_program_dir_path_=${_spn_loc_program_path_%${_spn_loc_program_name_}}

  # If program dir path does not start with a slash then it is relative.
  # Convert it to absolute.
  if [ "${_spn_loc_program_dir_path_:0:1}" != "/" ] ; then
    _spn_loc_program_dir_path_="$(readlink -f ${_spn_loc_program_dir_path_})/"
    # Re-assemble the parts into program path variable.
    _spn_loc_program_path_="${_spn_loc_program_dir_path_}${_spn_loc_program_name_}"
  fi

  if (( follow_links )) ; then
    _spn_loc_program_path_=$(readlink -f ${_spn_loc_program_path_})
    # Re-calculate program_name in case it is different now.
    _spn_loc_program_name_=${_spn_loc_program_path_##*/}
  fi

  # Set caller's variables.
  cmd_buf="${program_path_var}=\"\${_spn_loc_program_path_}\" ; ${program_name_var}=\"\${_spn_loc_program_name_}\" ; ${program_dir_path_var}=\"\${_spn_loc_program_dir_path_}\""
  eval "${cmd_buf}"

}
