#! /bin/sh
# shellcheck disable=SC3043,SC1091

___X_CMD_ROOT="${___X_CMD_ROOT:-$HOME/.x-cmd.root}"

___x_cmd_xbinexp___init(){
    case "$0" in
        */mod/x-cmd/lib/bin/___x_cmdexe_exp)
            ___X_CMD_ROOT_CODE="${0%/mod/x-cmd/lib/bin/___x_cmdexe_exp}"
            . "$___X_CMD_ROOT_CODE/X"
            ;;
        *)
            # ___X_CMD_ROOT_CODE="$___X_CMD_"
            # echo "error heree $0"
            # return 1
            . "$HOME/.x-cmd.root/X"
            ;;
    esac
}

___x_cmd_xbinexp___init || exit 1

___x_cmd_xbinexp___add(){
    [ -n "$___X_CMD_XBINEXP_FP" ] || return

    ___x_cmd mkdirp "$___X_CMD_XBINEXP_FP"

    local exportmode=""
    case "$1" in
        --export)       exportmode=1
    esac

    # TODO: using a counter instead of random ...

    if [ -z "$exportmode" ]; then
        while [ $# -gt 0 ]; do
            eval 'printf "%s" "$'"$1"'"' >"$___X_CMD_XBINEXP_FP/1${RANDOM}_$1"      # Just in case RANDOM is null.
            shift
        done
    else
        while [ $# -gt 0 ]; do
            eval 'printf "%s" "$'"$1"'"' >"$___X_CMD_XBINEXP_FP/export_$1"          # Just in case RANDOM is null.
            shift
        done
    fi
}

___x_cmd_xbinexp___run(){
    local ___X_CMD_XBINEXP_PATH="$PATH"
    local ___X_CMD_XBINEXP_PWD="$PWD"

    local ___X_CMD_XBINEXP_EXIT=0

    ___x_cmd "$@" || ___X_CMD_XBINEXP_EXIT=$?

    [ "$___X_CMD_XBINEXP_PATH" = "$PATH"  ] ||  ___x_cmd_xbinexp___add PATH         # Consider it twice.
    [ "$___X_CMD_XBINEXP_PWD"  = "$PWD"   ] ||  ___x_cmd_xbinexp___add --export PWD

    return "$___X_CMD_XBINEXP_EXIT"
}

OLDPWD="$___X_CMD_XBINEXP_INITENV_OLDPWD"

___x_cmd_xbinexp___run "$@"


