#! /bin/sh

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

___x_cmd_xbinexp___init(){
    case "$0" in
        */mod/x-cmd/lib/bin/xbinexp)
            ___X_CMD_ROOT_CODE="${0%/mod/x-cmd/lib/bin/xbinexp}"
            . "$___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"

    # TODO: using a counter instead of random ...
    while [ $# -gt 0 ]; do
        eval 'printf "%s" "$'"$1"'"' >"$___X_CMD_XBINEXP_FP/${RANDOM}_$1"
        shift
    done
}

___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
    [ "$___X_CMD_XBINEXP_PWD"  = "$PWD"   ] ||  ___x_cmd_xbinexp___add PWD

    return "$___X_CMD_XBINEXP_EXIT"
}

OLDPWD="$___X_CMD_XBINEXP_INITENV_OLDPWD"

___x_cmd_xbinexp___run "$@"


