

# testcase: . util; ___x_cmd_writeml "$t" cde  | { ___x_cmd_mline_read c d; echo "|$c|"; echo "$d"; }

___X_CMD_MULTIPLELINE_SEP="${___X_CMD_UNSEENCHAR_003}${___X_CMD_UNSEENCHAR_002}${___X_CMD_UNSEENCHAR_005}"
___x_cmd_mline_read___readone(){
    local res
    local line
    while :; do
        read -r line || return $?
        if [ "$line" = "$___X_CMD_MULTIPLELINE_SEP" ]; then
            eval "$1=\"\$res\""
            return 0
        fi

        if [ -z "$res" ]; then  res="$line"
        else                    res="$res
$line"
        fi
    done
}

___x_cmd_mline_read(){
    local code="___x_cmd_mline_read___readone ${1:?At least provide one argument}"; shift
    while [ "$#" -gt 0 ]; do
        case "$1" in
            --)
                shift
                break ;;
            *)
                code="$code && ___x_cmd_mline_read___readone $1"
                shift ;;
        esac
    done

    if [ "$#" -eq 0 ]; then
        eval "$code"
    else
        while eval "$code"; do
            ___x_cmd_eval "$@"
        done
    fi
}
