################################################################################
# Function:     parse_cmdline
# Description:  Parses the command-line using the enhanced version of getopt
# Arguments:    $@ :- Command-line arguments (required)
# Requires:     Global variables $USER_NAME, $DEST_DIR, $IS_REMOVE, and
#               $IS_VERBOSE
# Outputs:      Sets above-mentioned global variables based on given
#               command-line arguments
function parse_cmd_line {
    # Ensure that the enhanced version of getopt is available

    ! getopt --test > /dev/null
    if (( "${PIPESTATUS[0]}" != 4 )); then
        echo "I'm sorry, the enhanced version of getopt is required. Exiting." >&2
        exit 1
    fi

    # Initialize the global variables

    USER_NAME=''
    DEST_DIR=''
    IS_VERBOSE=''
    IS_REMOVE=''

    # Parse the command-line options

    if ! readonly PARSED_OPTIONS=$(getopt --options=${OPTIONS} \
                                    --longoptions=${LONGOPTS} \
                                    --name "$(basename "$0")" -- "$@"); then
        echo 'Unknown error parsing getopt options. Exiting.' >&2
        exit 2
    fi

    eval set -- "${PARSED_OPTIONS}"

    # Extract and validate command-line options and their arguments, if any

    while (( $# >= 1 )); do
        case "$1" in
            -u|--user)
                USER_NAME=$(trim "$2") ; shift 2
                ;;
            -d|--destdir)
                DEST_DIR=$(chomp_slash "$(trim "$2")") ; shift 2
                ;;
            -r|--remove)
                IS_REMOVE='true' ; shift
                ;;
            -v|--verbose)
                IS_VERBOSE='true' ; shift
                ;;
            -h|--help)
                usage_exit 0
                ;;
            --)
                shift ; break
                ;;
            *)
                usage_exit 3 >&2
                ;;
        esac
    done

    # Ensure that required options have been supplied

    if [[ -z "${USER_NAME}" || -z "${DEST_DIR}" ]]; then
        usage_exit 4 >&2
    fi
} # parse_cmd_line