#!/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 everythin 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}"

}
