# shellcheck shell=dash

___x_cmd_hash___run_1(){
    # Notice: using LC_ALL to suppress perl hash warning
    LC_ALL="$___X_CMD_LOCALE_DEF_C" "$@" | ___x_cmd_cmds_awk '{ print $1; }'
}

___x_cmd_hash___run_last(){
    "$@" | ___x_cmd_cmds_awk '{ print $NF; }'
}

___x_cmd_hash___run_cosmo(){
    "$@" | ___x_cmd_cmds_awk '{ print $NF; }'
}

___x_cmd_hash_md5(){
    case "$1" in
        -h|--help)      ___x_cmd help -m hash md5 "$@"; return 0 ;;
        --)             shift ;;
    esac

    if ___x_cmd_hascmd md5sum; then         ___x_cmd_hash___run_1       ___x_cmd_cmds   md5sum      "$@"
    elif ___x_cmd_hascmd md5; then          ___x_cmd_hash___run_last    ___x_cmd_cmds   md5         "$@"
    else                                    ___x_cmd_hash___run_cosmo                   md5sum      "$@"
    fi
}

___x_cmd_hash_sha1(){
    case "$1" in
        -h|--help)      ___x_cmd help -m hash sha1 "$@"; return 0 ;;
        --)             shift ;;
    esac

    if ___x_cmd_hascmd sha1sum; then        ___x_cmd_hash___run_1       ___x_cmd_cmds   sha1sum     "$@"
    elif [ -x /usr/bin/shasum ]; then       ___x_cmd_hash___run_1       /usr/bin/shasum -a 1        "$@"
    else                                    ___x_cmd_hash___run_cosmo                   sha1sum     "$@"
    fi
}

___x_cmd_hash_sha256(){
    case "$1" in
        -h|--help)      ___x_cmd help -m hash sha256 "$@"; return 0 ;;
        --)             shift ;;
    esac

    if ___x_cmd_hascmd sha256sum; then      ___x_cmd_hash___run_1       ___x_cmd_cmds   sha256sum   "$@"
    elif [ -x /usr/bin/shasum ]; then       ___x_cmd_hash___run_1       /usr/bin/shasum -a 256      "$@"
    else                                    ___x_cmd_hash___run_cosmo                   sha256sum   "$@"
    fi
}

___x_cmd_hash_sha384(){
    case "$1" in
        -h|--help)      ___x_cmd help -m hash sha384 "$@"; return 0 ;;
        --)             shift ;;
    esac

    if ___x_cmd_hascmd sha384sum; then      ___x_cmd_hash___run_1       ___x_cmd_cmds   sha384sum   "$@"
    elif [ -x /usr/bin/shasum ]; then       ___x_cmd_hash___run_1       /usr/bin/shasum -a 384      "$@"
    else                                    ___x_cmd_hash___run_cosmo                   sha384sum   "$@"
    fi
}

___x_cmd_hash_sha512(){
    case "$1" in
        -h|--help)      ___x_cmd help -m hash sha512 "$@"; return 0 ;;
        --)             shift ;;
    esac

    if ___x_cmd_hascmd sha512sum; then      ___x_cmd_hash___run_1       ___x_cmd_cmds   sha512sum   "$@"
    elif [ -x /usr/bin/shasum ]; then       ___x_cmd_hash___run_1       /usr/bin/shasum -a 512      "$@"
    else                                    ___x_cmd_hash___run_cosmo                   sha512sum   "$@"
    fi
}
