# shellcheck shell=dash

xrc awk
xrc:mod:lib     cawk        init

# x cawk -m j/json -f "a.awk" 'END{ ... }'
# x cawk -m u/wcwidth 'BEGIN{ print wcswidth("中")}'
# x cawk -m url 'BEGIN{ print urlencode(",a中")}'

___x_cmd_cawk___main(){
    local IFS=" "
    [ "$#" -gt 0 ] || N=cawk M="No argument" log:ret:64

    # Notice: local varaible name should be in uppercase form.
    awk:argparse:init
    while [ "$#" -gt 0 ]; do
        case "$1" in
            -h|--help)
                ___x_cmd help -m cawk; return ;;
        esac
        awk:argparse:handle-v-using-env-stage1
        awk:argparse:handle
    done

    AWK_IMPL="${AWK_IMPL:-$___X_CMD_AWK_IMPL}" awk:argparse:handle-v-using-env-stage2

    if [ -n "$AWK_CODE" ]; then
        case "$___X_CMD_AWK_IMPL" in
            bsdawk|mawk)
                ___x_cmd mkdirp "$___X_CMD_ROOT_TMP_AWK"
                local AWK_TMPFILE; AWK_TMPFILE="${___X_CMD_ROOT_TMP_AWK}/cawk.current___X_CMD_MAWK_VAR_CODE.$(___x_cmd str md5 "$AWK_CODE")"
                printf "%s\n" "$AWK_CODE" >"$AWK_TMPFILE"
                AWK_CODE=""
                AWK_ARG="$AWK_ARG -f \"\$AWK_TMPFILE\""
                ;;
            *)
                AWK_CODE="-e $AWK_CODE"
                ;;
        esac
    fi

    local _locale="$AWK_LOCALE"
    if [ -z "$_locale" ]; then
        _locale="$___X_CMD_AWK_LANGUAGE"
        ! ___x_cmd_is_termux || _locale="$___X_CMD_LOCALE_DEF_UTF8"
    fi

    LANG="$_locale" \
    LC_ALL="$_locale" \
    ___x_cmd_awk_runinside                  \
        "$AWK_ENV_SH"                       \
        "${___X_CMD_AWK_IMPL}"        ___x_cmd_cawk___run     \
        "$AWK_MOD"  "$AWK_ARG"              \
        "$AWK_CODE" "$AWK_ENV_CODE"
}
