################################################################################
#
# Shell function collection for Altera Nios II
#
# Copyright (c) 2015, B&R Industrial Automation GmbH
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#     * Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above copyright
#       notice, this list of conditions and the following disclaimer in the
#       documentation and/or other materials provided with the distribution.
#     * Neither the name of the copyright holders nor the
#       names of its contributors may be used to endorse or promote products
#       derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
################################################################################

# function select_dir_abs()
# User can select from list of files. Those files are searched in a predefined
# path and its subdirectories. The files can be specified with a pattern and a filter.
# The selection is retured as absolute path to the user-selected file.
# Args  $1: discovery path
#       $2: file pattern to be searched
#       $3: filter action (optional)
# Ret   0: valid output  1: invalid output
# Ret echo: absoulte path to selected file
#
# usage example: listfiles /user/test '*.txt' 'grep myfilefilter'

select_dir_abs () {
local list=

    cd ${1}
    search_path_abs=`pwd`

    case $# in
    2)  list=$(find -name ${2})
        ;;
    3)  list=$(find -name ${2} | ${3})
        ;;
    *) echo "Usage: $FUNCNAME <discovery_path> <search_pattern> (<filter_action>)"; return 1;;
    esac

    # let user select found files
    PS3="Select a number:"
    select string in ${list}
    do
        case ${string} in
            "") ;;
            *) cd ${search_path_abs}; cd `dirname ${string}`; pwd; return 0;;
        esac
    done
}
