# Linux iwconfig(8) completion


comp_include _available_interfaces _get_cword


_iwconfig()
{
    local cur prev

    COMPREPLY=()
    cur=`_get_cword`
    prev=${COMP_WORDS[COMP_CWORD-1]}
    
    case $prev in
        mode)
            COMPREPLY=( $( compgen -W 'managed ad-hoc master \
                repeater secondary monitor' -- $cur ) )
            return 0
            ;;
        essid)
            COMPREPLY=( $( compgen -W 'on off any' -- $cur ) )
            if [ -n "${COMP_IWLIST_SCAN:-}" ]; then
                COMPREPLY=( ${COMPREPLY[@]:-} \
                    $( iwlist ${COMP_WORDS[1]} scan | \
                    awk -F '"' '/ESSID/ {print $2}' | \
                    grep "^$cur" ))
            fi
            return 0
            ;;
        nwid)
            COMPREPLY=( $( compgen -W 'on off' -- $cur ) )
            return 0
            ;;
        channel)
            COMPREPLY=( $( iwlist ${COMP_WORDS[1]} channel | \
                awk '/^[[:space:]]*Channel/ {print $2}' | \
                grep "^$cur" ) )
            return 0
            ;;

        freq)
            COMPREPLY=( $( iwlist ${COMP_WORDS[1]} channel | \
                awk '/^[[:space:]]*Channel/ {print $4"G"}' | \
                grep "^$cur" ) )
            return 0
            ;;
        ap)
            COMPREPLY=( $( compgen -W 'on off any' -- $cur ) )
            if [ -n "${COMP_IWLIST_SCAN:-}" ]; then
                COMPREPLY=( ${COMPREPLY[@]:-} \
                    $( iwlist ${COMP_WORDS[1]} scan | \
                    awk -F ': ' '/Address/ {print $2}' | \
                    grep "^$cur" ) )
            fi
            return 0
            ;;
        rate)
            COMPREPLY=( $( compgen -W 'auto fixed' -- $cur ) )
            COMPREPLY=( ${COMPREPLY[@]:-} \
                $( iwlist ${COMP_WORDS[1]} rate | \
                awk '/^[[:space:]]*[0-9]/ {print $1"M"}' | \
                grep "^$cur" ) )
            return 0
            ;;
        rts)
            COMPREPLY=( $( compgen -W 'auto fixed off' -- $cur ) )
            return 0
            ;;
        frag)
            COMPREPLY=( $( compgen -W 'auto fixed off' -- $cur ) )
            return 0
            ;;
        key)
            COMPREPLY=( $( compgen -W 'off on open restricted' -- $cur ) )
            return 0
            ;;
        enc)
            COMPREPLY=( $( compgen -W 'off on open restricted' -- $cur ) )
            return 0
            ;;
        power)
            COMPREPLY=( $( compgen -W 'period timeout off on' -- $cur ) )
            return 0
            ;;
        txpower)
            COMPREPLY=( $( compgen -W 'off on auto' -- $cur ) )
            return 0
            ;;
        retry)
            COMPREPLY=( $( compgen -W 'limit lifetime' -- $cur ) )
            return 0
            ;;
    esac

    if [ $COMP_CWORD -eq 1 ]; then
        if [[ "$cur" == -* ]]; then
            COMPREPLY=( $( compgen -W '--help --version' -- $cur ) ) 
        else
            _available_interfaces -w
        fi
    else
        COMPREPLY=( $( compgen -W 'essid nwid mode freq channel sens mode \
            ap nick rate rts frag enc key power txpower commit' -- $cur ) ) 
    fi

} # _iwconfig()
