


___x_cmd_ui_varctl_num(){
    local name1="${1:?Provide var name}";

    local state
    eval "state=\"\$$name1\""

    local min="${2:?Min}"
    local max="${3:?Max}"

    local op="${4:?Op}"

    case "$op" in
        dec)
            if [ "$state" -le "$min" ]; then
                state=$max
            else
                state="$((state-1))"
            fi
            ;;
        inc)
            if [ "$state" -ge "$max" ]; then
                state=1
            else
                state="$((state+1))"
            fi
            ;;
    esac

    eval "$name1=\"\$state\""
}


___x_cmd_ui_varctl_numtext(){
    local name1="${1:?Provide var name}";
    local name2="${2:?Provide text name}";

    local state
    local state_text
    eval "state=\"\$$name1\""
    eval "state_text=\"\$$name2\""

    local min="${3:?Min}"
    local max="${4:?Max}"
    state=$((state+0))
    max=$((max+0))
    min=$((min+0))

    local op="${5:?Op}"

    case "$op" in
        dec)
            if [ "$state" -le "$min" ]; then
                state=$max
            else
                state="$((state-1))"
            fi
            ;;
        inc)
            if [ "$state" -ge "$max" ]; then
                state=1
            else
                state="$((state+1))"
            fi
            ;;
        del)
            state_text="${state_text%?}"
            state=
            if [ "$state_text" != "" ] && [ "$state_text" -ge $min ] && [ "$state_text" -le $max ] ; then
                state="$state_text"
            fi
            ;;
        0|1|2|3|4|5|6|7|8|9)
            state_text="${state_text}${op}"
            state=
            if [ "$state_text" != "" ] && [ "$state_text" -ge $min ] && [ "$state_text" -le $max ] ; then
                state="$state_text"
            fi
            ;;
    esac
    if [ -n "$state" ]; then
        state=$(( (state + $max - $min ) % $max + $min ))
        state_text="$state"
    fi

    eval "$name1=\"\$state\""
    eval "$name2=\"\$state_text\""
}

