

___x_cmd_line_args(){
    [ $# -gt 0 ]    ||  set -- --help

    local op="$1"
    case "$op" in
        -h|--help)      ___x_cmd help -m line args;     return 0    ;;
        *)              ___x_cmd_line_args___n  "$@"                ;;
    esac
}

# Provide -0
___x_cmd_line_args___n(){
    local n=50      # fine tunning using codi module
    if [ "$1" = -n ]; then
        [ -n "$2" ] || N=args M="A int is required after -n" log:ret:64
        n="$2"
        shift 2
    fi

    local code_func='___x_cmd_line_args___run_inner(){ eval '
    local i=1; while [ $i -le $# ]; do
        eval "local _$i; _$i=\"\$$i\""
        code_func="$code_func \"\$_$i\" "
        i=$((i+1))
    done
    code_func="$code_func ; }"
    eval "$code_func"

    local code_read
    local code_local=''
    local code_invoke="___x_cmd_line_args___run_inner \${_a1+\"\$_a1\"} "
    local code_reset="unset _a1"
    local _a1
    # for ((i=2; i<=n; ++i)); do
    i=2
    while [ $i -le "$n" ];do
        code_local="${code_local}; local _a$i"
        code_read="$code_read && { read -r _a$i || { unset _a$i; false; } }"       # Delibratly not return 1
        code_invoke="$code_invoke \${_a$i+\"\$_a$i\"}"
        code_reset="$code_reset _a$i"
        i=$((i+1))
    done
    eval "${code_local#;}"
    eval "$code_reset"
    code_read="${code_read# && }"

    # echo "$code_func"
    # echo "$code_read"
    # echo "$code_invoke"

    local errcode
    eval '
    while read -r _a1; do
        '"$code_read"'
        errcode=$?
        case "$errcode" in
            0)      '"$code_invoke; $code_reset "'; continue ;;
            1)      '"$code_invoke"'; return 0 ;;
            *)      return "$errcode"
        esac
    done
    '
}

