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

    while [ $# -gt 0 ]; do
        case "$1" in
            --csv|--tsv)
                    fmt="${1#--}" ; shift ;;
            *)      break
        esac
    done
}

___x_cmd_claw_ps___csv(){
    ___x_cmd_claw_ps___tsv | ___x_cmd tsv tocsv
}

___x_cmd_claw_ps___tsv(){
    printf "%s\t%s\t%s\t%s\n"   name  pid  start    desc

    # fsiter provide iterator: ___x_cmd fsiter "$___X_CMD_CLAW_DATA/instance" ___x_cmd_claw_ps___raw_handle

    ___x_cmd fsiter "$___X_CMD_CLAW_DATA/instance" | {
        local ins
        local x_

        while read -r ins; do
            printf "%s\t" "$ins"

            ___x_cmd_claw_ps___pid_ ;        printf "%s\t" "$x_"
            ___x_cmd_claw_ps___start_ ;      printf "%s\t" "$x_"

            ___x_cmd_claw_ps___desc_ ;
            ___x_cmd_claw_ps___tsvq_ "$x_"
            printf "%s\n" "$x_"
        done
    }
}

___x_cmd_claw_ps___pid_(){
    local ins="$1"
    read -r x_ <"$___X_CMD_CLAW_DATA/instance/$ins/pid"
}

___x_cmd_claw_ps___desc_(){
    local ins="$1"
    read -r x_ <"$___X_CMD_CLAW_DATA/instance/$ins/desc"
}

___x_cmd_claw_ps___start_(){
    local ins="$1"
    read -r x_ <"$___X_CMD_CLAW_DATA/instance/$ins/start"
}

___x_cmd_claw_ps___tsvq(){
    local x_
    ___x_cmd_claw_ps___tsvq_ "$@" || return $?
    printf "%s\n" "$x_"
}

case "$___X_CMD_SHELL" in

dash)
___x_cmd_claw_ps___tsvq_(){
    local data="$1"

    while true; do
        case "$data" in
            *"$___X_CMD_UNSEENCHAR_NEWLINE"*)   data="${data%%"$___X_CMD_UNSEENCHAR_NEWLINE"*}\\n${data#*"$___X_CMD_UNSEENCHAR_NEWLINE"}"
            *"$___X_CMD_UNSEENCHAR_HT"*)        data="${data%%"$___X_CMD_UNSEENCHAR_HT"*}\\t${data#*"$___X_CMD_UNSEENCHAR_HT"}"
            *)  break ;;
        esac
    done
}

*)
___x_cmd_claw_ps___tsvq_(){
    x_="${data//"$___X_CMD_UNSEENCHAR_NEWLINE"/\\n}"
    x_="${x_//"$___X_CMD_UNSEENCHAR_HT"/\\t}"
}

esac

