

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

    local op="$1" ; shift
    case "$op" in
        -h|--help)          ___x_cmd help -m rmrf rule "$@" ; return 0 ;;

        ls|clear|add|check) ___x_cmd_rmrf_rule_"$op"    "$@" ;;
        rm|del)             ___x_cmd_rmrf_rule_rm       "$@" ;;

        *)                  N=rmrf M="Unknown op -> $op" log:ret:64
    esac
}


___x_cmd_rmrf_rule_clear(){
    ___X_CMD_RMRF_RULE_LIST=
}

___x_cmd_rmrf_rule_add(){
    local IFS="$___X_CMD_UNSEENCHAR_NEWLINE"
    ___X_CMD_RMRF_RULE_LIST="${___X_CMD_RMRF_RULE_LIST}$*${___X_CMD_UNSEENCHAR_NEWLINE}"
}

___x_cmd_rmrf_rule_ls(){
    printf "%s" "$___X_CMD_RMRF_RULE_LIST" | awk '{
        if ($0 == ""){ next; }
        print $0
    }'
}

___x_cmd_rmrf_rule_rm(){
    local NL="$___X_CMD_UNSEENCHAR_NEWLINE"
    local rule
    local tmp
    local list
    local e
    for rule in "$@"; do
        list="${NL}${___X_CMD_RMRF_RULE_LIST}"
        e="${NL}${rule}${NL}"
        tmp="${list#*"$e"}"
        if [ "$tmp" != "$list" ]; then
            rmrf:info "Removing Rule -> $rule"
            ___X_CMD_RMRF_RULE_LIST="${list%%"${e}"*}${NL}${tmp}"
            ___X_CMD_RMRF_RULE_LIST="${___X_CMD_RMRF_RULE_LIST#"${NL}"}"
        else
            rmrf:warn "Rule Not found -> $rule"
        fi
    done
}

___x_cmd_rmrf_rule_check(){
    [ -n "$___X_CMD_RMRF_RULE_LIST" ]   ||  return 0

    local result
    local rule
    local target

    result="$(
            TARGET_LIST="$*" RULE_LIST="$___X_CMD_RMRF_RULE_LIST" \
            ___x_cmd_cmds_awk -f "$___X_CMD_ROOT_MOD/rmrf/lib/awk/check.awk" </dev/null
    )" || {
        {
            read -r rule
            read -r target
        } <<A
$result
A
        N=rmrf M="Try to 'rm -rf $target'. Violation of rule: $rule" log:ret:1
    }

}


